1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc --mattr=+sve < %s -mtriple aarch64-apple-darwin | FileCheck %s
3 ; RUN: llc --mattr=+sve < %s -mtriple aarch64_be-unknown-unknown | FileCheck --check-prefix CHECK-BE %s
5 define <4 x double> @test_ldnp_v4f64(ptr %A) {
6 ; CHECK-LABEL: test_ldnp_v4f64:
8 ; CHECK-NEXT: ldnp q0, q1, [x0]
11 ; CHECK-BE-LABEL: test_ldnp_v4f64:
13 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
15 %lv = load <4 x double>, ptr %A, align 8, !nontemporal !0
19 define <4 x i64> @test_ldnp_v4i64(ptr %A) {
20 ; CHECK-LABEL: test_ldnp_v4i64:
22 ; CHECK-NEXT: ldnp q0, q1, [x0]
25 ; CHECK-BE-LABEL: test_ldnp_v4i64:
27 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
29 %lv = load <4 x i64>, ptr %A, align 8, !nontemporal !0
33 define <8 x i32> @test_ldnp_v8i32(ptr %A) {
34 ; CHECK-LABEL: test_ldnp_v8i32:
36 ; CHECK-NEXT: ldnp q0, q1, [x0]
39 ; CHECK-BE-LABEL: test_ldnp_v8i32:
41 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
43 %lv = load <8 x i32>, ptr %A, align 8, !nontemporal !0
47 define <8 x float> @test_ldnp_v8f32(ptr %A) {
48 ; CHECK-LABEL: test_ldnp_v8f32:
50 ; CHECK-NEXT: ldnp q0, q1, [x0]
53 ; CHECK-BE-LABEL: test_ldnp_v8f32:
55 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
57 %lv = load <8 x float>, ptr %A, align 8, !nontemporal !0
61 define <16 x i16> @test_ldnp_v16i16(ptr %A) {
62 ; CHECK-LABEL: test_ldnp_v16i16:
64 ; CHECK-NEXT: ldnp q0, q1, [x0]
67 ; CHECK-BE-LABEL: test_ldnp_v16i16:
69 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
71 %lv = load <16 x i16>, ptr %A, align 8, !nontemporal !0
75 define <16 x half> @test_ldnp_v16f16(ptr %A) {
76 ; CHECK-LABEL: test_ldnp_v16f16:
78 ; CHECK-NEXT: ldnp q0, q1, [x0]
81 ; CHECK-BE-LABEL: test_ldnp_v16f16:
83 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
85 %lv = load <16 x half>, ptr %A, align 8, !nontemporal !0
89 define <32 x i8> @test_ldnp_v32i8(ptr %A) {
90 ; CHECK-LABEL: test_ldnp_v32i8:
92 ; CHECK-NEXT: ldnp q0, q1, [x0]
95 ; CHECK-BE-LABEL: test_ldnp_v32i8:
97 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
99 %lv = load <32 x i8>, ptr %A, align 8, !nontemporal !0
103 define <4 x i32> @test_ldnp_v4i32(ptr %A) {
104 ; CHECK-LABEL: test_ldnp_v4i32:
106 ; CHECK-NEXT: ldr q0, [x0]
109 ; CHECK-BE-LABEL: test_ldnp_v4i32:
110 ; CHECK-BE: // %bb.0:
111 ; CHECK-BE-NEXT: ldr q0, [x0]
113 %lv = load<4 x i32>, ptr %A, align 8, !nontemporal !0
117 define <4 x float> @test_ldnp_v4f32(ptr %A) {
118 ; CHECK-LABEL: test_ldnp_v4f32:
120 ; CHECK-NEXT: ldr q0, [x0]
123 ; CHECK-BE-LABEL: test_ldnp_v4f32:
124 ; CHECK-BE: // %bb.0:
125 ; CHECK-BE-NEXT: ldr q0, [x0]
127 %lv = load<4 x float>, ptr %A, align 8, !nontemporal !0
131 define <8 x i16> @test_ldnp_v8i16(ptr %A) {
132 ; CHECK-LABEL: test_ldnp_v8i16:
134 ; CHECK-NEXT: ldr q0, [x0]
137 ; CHECK-BE-LABEL: test_ldnp_v8i16:
138 ; CHECK-BE: // %bb.0:
139 ; CHECK-BE-NEXT: ldr q0, [x0]
141 %lv = load <8 x i16>, ptr %A, align 8, !nontemporal !0
145 define <16 x i8> @test_ldnp_v16i8(ptr %A) {
146 ; CHECK-LABEL: test_ldnp_v16i8:
148 ; CHECK-NEXT: ldr q0, [x0]
151 ; CHECK-BE-LABEL: test_ldnp_v16i8:
152 ; CHECK-BE: // %bb.0:
153 ; CHECK-BE-NEXT: ldr q0, [x0]
155 %lv = load <16 x i8>, ptr %A, align 8, !nontemporal !0
158 define <2 x double> @test_ldnp_v2f64(ptr %A) {
159 ; CHECK-LABEL: test_ldnp_v2f64:
161 ; CHECK-NEXT: ldr q0, [x0]
164 ; CHECK-BE-LABEL: test_ldnp_v2f64:
165 ; CHECK-BE: // %bb.0:
166 ; CHECK-BE-NEXT: ldr q0, [x0]
168 %lv = load <2 x double>, ptr %A, align 8, !nontemporal !0
172 define <2 x i32> @test_ldnp_v2i32(ptr %A) {
173 ; CHECK-LABEL: test_ldnp_v2i32:
175 ; CHECK-NEXT: ldr d0, [x0]
178 ; CHECK-BE-LABEL: test_ldnp_v2i32:
179 ; CHECK-BE: // %bb.0:
180 ; CHECK-BE-NEXT: ldr d0, [x0]
182 %lv = load <2 x i32>, ptr %A, align 8, !nontemporal !0
186 define <2 x float> @test_ldnp_v2f32(ptr %A) {
187 ; CHECK-LABEL: test_ldnp_v2f32:
189 ; CHECK-NEXT: ldr d0, [x0]
192 ; CHECK-BE-LABEL: test_ldnp_v2f32:
193 ; CHECK-BE: // %bb.0:
194 ; CHECK-BE-NEXT: ldr d0, [x0]
196 %lv = load <2 x float>, ptr %A, align 8, !nontemporal !0
200 define <4 x i16> @test_ldnp_v4i16(ptr %A) {
201 ; CHECK-LABEL: test_ldnp_v4i16:
203 ; CHECK-NEXT: ldr d0, [x0]
206 ; CHECK-BE-LABEL: test_ldnp_v4i16:
207 ; CHECK-BE: // %bb.0:
208 ; CHECK-BE-NEXT: ldr d0, [x0]
210 %lv = load <4 x i16>, ptr %A, align 8, !nontemporal !0
214 define <8 x i8> @test_ldnp_v8i8(ptr %A) {
215 ; CHECK-LABEL: test_ldnp_v8i8:
217 ; CHECK-NEXT: ldr d0, [x0]
220 ; CHECK-BE-LABEL: test_ldnp_v8i8:
221 ; CHECK-BE: // %bb.0:
222 ; CHECK-BE-NEXT: ldr d0, [x0]
224 %lv = load <8 x i8>, ptr %A, align 8, !nontemporal !0
228 define <1 x double> @test_ldnp_v1f64(ptr %A) {
229 ; CHECK-LABEL: test_ldnp_v1f64:
231 ; CHECK-NEXT: ldr d0, [x0]
234 ; CHECK-BE-LABEL: test_ldnp_v1f64:
235 ; CHECK-BE: // %bb.0:
236 ; CHECK-BE-NEXT: ldr d0, [x0]
238 %lv = load <1 x double>, ptr %A, align 8, !nontemporal !0
242 define <1 x i64> @test_ldnp_v1i64(ptr %A) {
243 ; CHECK-LABEL: test_ldnp_v1i64:
245 ; CHECK-NEXT: ldr d0, [x0]
248 ; CHECK-BE-LABEL: test_ldnp_v1i64:
249 ; CHECK-BE: // %bb.0:
250 ; CHECK-BE-NEXT: ldr d0, [x0]
252 %lv = load <1 x i64>, ptr %A, align 8, !nontemporal !0
256 define <32 x i16> @test_ldnp_v32i16(ptr %A) {
257 ; CHECK-LABEL: test_ldnp_v32i16:
259 ; CHECK-NEXT: ldnp q0, q1, [x0]
260 ; CHECK-NEXT: ldnp q2, q3, [x0, #32]
263 ; CHECK-BE-LABEL: test_ldnp_v32i16:
264 ; CHECK-BE: // %bb.0:
265 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
266 ; CHECK-BE-NEXT: ldp q2, q3, [x0, #32]
268 %lv = load <32 x i16>, ptr %A, align 8, !nontemporal !0
272 define <32 x half> @test_ldnp_v32f16(ptr %A) {
273 ; CHECK-LABEL: test_ldnp_v32f16:
275 ; CHECK-NEXT: ldnp q0, q1, [x0]
276 ; CHECK-NEXT: ldnp q2, q3, [x0, #32]
279 ; CHECK-BE-LABEL: test_ldnp_v32f16:
280 ; CHECK-BE: // %bb.0:
281 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
282 ; CHECK-BE-NEXT: ldp q2, q3, [x0, #32]
284 %lv = load <32 x half>, ptr %A, align 8, !nontemporal !0
288 define <16 x i32> @test_ldnp_v16i32(ptr %A) {
289 ; CHECK-LABEL: test_ldnp_v16i32:
291 ; CHECK-NEXT: ldnp q0, q1, [x0]
292 ; CHECK-NEXT: ldnp q2, q3, [x0, #32]
295 ; CHECK-BE-LABEL: test_ldnp_v16i32:
296 ; CHECK-BE: // %bb.0:
297 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
298 ; CHECK-BE-NEXT: ldp q2, q3, [x0, #32]
300 %lv = load <16 x i32>, ptr %A, align 8, !nontemporal !0
304 define <16 x float> @test_ldnp_v16f32(ptr %A) {
305 ; CHECK-LABEL: test_ldnp_v16f32:
307 ; CHECK-NEXT: ldnp q0, q1, [x0]
308 ; CHECK-NEXT: ldnp q2, q3, [x0, #32]
311 ; CHECK-BE-LABEL: test_ldnp_v16f32:
312 ; CHECK-BE: // %bb.0:
313 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
314 ; CHECK-BE-NEXT: ldp q2, q3, [x0, #32]
316 %lv = load <16 x float>, ptr %A, align 8, !nontemporal !0
320 define <17 x float> @test_ldnp_v17f32(ptr %A) {
321 ; CHECK-LABEL: test_ldnp_v17f32:
323 ; CHECK-NEXT: ldnp q0, q1, [x0, #32]
324 ; CHECK-NEXT: ldr s2, [x0, #64]
325 ; CHECK-NEXT: ldnp q3, q4, [x0]
326 ; CHECK-NEXT: stp q0, q1, [x8, #32]
327 ; CHECK-NEXT: stp q3, q4, [x8]
328 ; CHECK-NEXT: str s2, [x8, #64]
331 ; CHECK-BE-LABEL: test_ldnp_v17f32:
332 ; CHECK-BE: // %bb.0:
333 ; CHECK-BE-NEXT: add x9, x0, #48
334 ; CHECK-BE-NEXT: ld1 { v0.4s }, [x0]
335 ; CHECK-BE-NEXT: add x10, x0, #32
336 ; CHECK-BE-NEXT: ld1 { v2.4s }, [x9]
337 ; CHECK-BE-NEXT: add x9, x0, #16
338 ; CHECK-BE-NEXT: ldr s1, [x0, #64]
339 ; CHECK-BE-NEXT: ld1 { v3.4s }, [x9]
340 ; CHECK-BE-NEXT: ld1 { v4.4s }, [x10]
341 ; CHECK-BE-NEXT: add x9, x8, #48
342 ; CHECK-BE-NEXT: str s1, [x8, #64]
343 ; CHECK-BE-NEXT: add x10, x8, #32
344 ; CHECK-BE-NEXT: st1 { v0.4s }, [x8]
345 ; CHECK-BE-NEXT: add x8, x8, #16
346 ; CHECK-BE-NEXT: st1 { v2.4s }, [x9]
347 ; CHECK-BE-NEXT: st1 { v4.4s }, [x10]
348 ; CHECK-BE-NEXT: st1 { v3.4s }, [x8]
350 %lv = load <17 x float>, ptr %A, align 8, !nontemporal !0
354 define <33 x double> @test_ldnp_v33f64(ptr %A) {
355 ; CHECK-LABEL: test_ldnp_v33f64:
357 ; CHECK-NEXT: ldnp q0, q1, [x0]
358 ; CHECK-NEXT: ldr d20, [x0, #256]
359 ; CHECK-NEXT: ldnp q2, q3, [x0, #32]
360 ; CHECK-NEXT: ldnp q4, q5, [x0, #64]
361 ; CHECK-NEXT: ldnp q6, q7, [x0, #96]
362 ; CHECK-NEXT: ldnp q16, q17, [x0, #128]
363 ; CHECK-NEXT: ldnp q18, q19, [x0, #224]
364 ; CHECK-NEXT: ldnp q21, q22, [x0, #160]
365 ; CHECK-NEXT: ldnp q23, q24, [x0, #192]
366 ; CHECK-NEXT: stp q0, q1, [x8]
367 ; CHECK-NEXT: stp q2, q3, [x8, #32]
368 ; CHECK-NEXT: stp q4, q5, [x8, #64]
369 ; CHECK-NEXT: stp q6, q7, [x8, #96]
370 ; CHECK-NEXT: stp q16, q17, [x8, #128]
371 ; CHECK-NEXT: stp q21, q22, [x8, #160]
372 ; CHECK-NEXT: stp q23, q24, [x8, #192]
373 ; CHECK-NEXT: stp q18, q19, [x8, #224]
374 ; CHECK-NEXT: str d20, [x8, #256]
377 ; CHECK-BE-LABEL: test_ldnp_v33f64:
378 ; CHECK-BE: // %bb.0:
379 ; CHECK-BE-NEXT: add x9, x0, #16
380 ; CHECK-BE-NEXT: add x10, x0, #32
381 ; CHECK-BE-NEXT: add x11, x0, #48
382 ; CHECK-BE-NEXT: ld1 { v0.2d }, [x9]
383 ; CHECK-BE-NEXT: add x9, x0, #64
384 ; CHECK-BE-NEXT: ld1 { v1.2d }, [x10]
385 ; CHECK-BE-NEXT: add x10, x0, #80
386 ; CHECK-BE-NEXT: ld1 { v3.2d }, [x9]
387 ; CHECK-BE-NEXT: add x9, x0, #112
388 ; CHECK-BE-NEXT: ld1 { v4.2d }, [x10]
389 ; CHECK-BE-NEXT: add x10, x0, #128
390 ; CHECK-BE-NEXT: ld1 { v6.2d }, [x9]
391 ; CHECK-BE-NEXT: add x9, x0, #160
392 ; CHECK-BE-NEXT: ld1 { v7.2d }, [x10]
393 ; CHECK-BE-NEXT: add x10, x0, #176
394 ; CHECK-BE-NEXT: ld1 { v17.2d }, [x9]
395 ; CHECK-BE-NEXT: add x9, x0, #240
396 ; CHECK-BE-NEXT: ld1 { v2.2d }, [x11]
397 ; CHECK-BE-NEXT: add x11, x0, #96
398 ; CHECK-BE-NEXT: ld1 { v18.2d }, [x10]
399 ; CHECK-BE-NEXT: ld1 { v20.2d }, [x0]
400 ; CHECK-BE-NEXT: ld1 { v22.2d }, [x9]
401 ; CHECK-BE-NEXT: add x10, x0, #224
402 ; CHECK-BE-NEXT: ld1 { v5.2d }, [x11]
403 ; CHECK-BE-NEXT: add x11, x0, #144
404 ; CHECK-BE-NEXT: ldr d21, [x0, #256]
405 ; CHECK-BE-NEXT: add x9, x0, #208
406 ; CHECK-BE-NEXT: ld1 { v24.2d }, [x10]
407 ; CHECK-BE-NEXT: ld1 { v16.2d }, [x11]
408 ; CHECK-BE-NEXT: add x11, x0, #192
409 ; CHECK-BE-NEXT: ld1 { v23.2d }, [x9]
410 ; CHECK-BE-NEXT: add x9, x8, #240
411 ; CHECK-BE-NEXT: ld1 { v19.2d }, [x11]
412 ; CHECK-BE-NEXT: str d21, [x8, #256]
413 ; CHECK-BE-NEXT: st1 { v20.2d }, [x8]
414 ; CHECK-BE-NEXT: st1 { v22.2d }, [x9]
415 ; CHECK-BE-NEXT: add x9, x8, #224
416 ; CHECK-BE-NEXT: st1 { v24.2d }, [x9]
417 ; CHECK-BE-NEXT: add x9, x8, #208
418 ; CHECK-BE-NEXT: st1 { v23.2d }, [x9]
419 ; CHECK-BE-NEXT: add x9, x8, #192
420 ; CHECK-BE-NEXT: st1 { v19.2d }, [x9]
421 ; CHECK-BE-NEXT: add x9, x8, #176
422 ; CHECK-BE-NEXT: st1 { v18.2d }, [x9]
423 ; CHECK-BE-NEXT: add x9, x8, #160
424 ; CHECK-BE-NEXT: st1 { v17.2d }, [x9]
425 ; CHECK-BE-NEXT: add x9, x8, #144
426 ; CHECK-BE-NEXT: st1 { v16.2d }, [x9]
427 ; CHECK-BE-NEXT: add x9, x8, #128
428 ; CHECK-BE-NEXT: st1 { v7.2d }, [x9]
429 ; CHECK-BE-NEXT: add x9, x8, #112
430 ; CHECK-BE-NEXT: st1 { v6.2d }, [x9]
431 ; CHECK-BE-NEXT: add x9, x8, #96
432 ; CHECK-BE-NEXT: st1 { v5.2d }, [x9]
433 ; CHECK-BE-NEXT: add x9, x8, #80
434 ; CHECK-BE-NEXT: st1 { v4.2d }, [x9]
435 ; CHECK-BE-NEXT: add x9, x8, #64
436 ; CHECK-BE-NEXT: st1 { v3.2d }, [x9]
437 ; CHECK-BE-NEXT: add x9, x8, #48
438 ; CHECK-BE-NEXT: st1 { v2.2d }, [x9]
439 ; CHECK-BE-NEXT: add x9, x8, #32
440 ; CHECK-BE-NEXT: add x8, x8, #16
441 ; CHECK-BE-NEXT: st1 { v1.2d }, [x9]
442 ; CHECK-BE-NEXT: st1 { v0.2d }, [x8]
444 %lv = load <33 x double>, ptr %A, align 8, !nontemporal !0
445 ret <33 x double> %lv
448 define <33 x i8> @test_ldnp_v33i8(ptr %A) {
449 ; CHECK-LABEL: test_ldnp_v33i8:
451 ; CHECK-NEXT: ldnp q0, q1, [x0]
452 ; CHECK-NEXT: add x9, x8, #32
453 ; CHECK-NEXT: ldr b2, [x0, #32]
454 ; CHECK-NEXT: stp q0, q1, [x8]
455 ; CHECK-NEXT: st1.b { v2 }[0], [x9]
458 ; CHECK-BE-LABEL: test_ldnp_v33i8:
459 ; CHECK-BE: // %bb.0:
460 ; CHECK-BE-NEXT: add x9, x0, #16
461 ; CHECK-BE-NEXT: ld1 { v0.16b }, [x0]
462 ; CHECK-BE-NEXT: ldrb w10, [x0, #32]
463 ; CHECK-BE-NEXT: ld1 { v1.16b }, [x9]
464 ; CHECK-BE-NEXT: strb w10, [x8, #32]
465 ; CHECK-BE-NEXT: st1 { v0.16b }, [x8]
466 ; CHECK-BE-NEXT: add x8, x8, #16
467 ; CHECK-BE-NEXT: st1 { v1.16b }, [x8]
469 %lv = load<33 x i8>, ptr %A, align 8, !nontemporal !0
473 define <4 x i65> @test_ldnp_v4i65(ptr %A) {
474 ; CHECK-LABEL: test_ldnp_v4i65:
476 ; CHECK-NEXT: ldp x8, x9, [x0, #8]
477 ; CHECK-NEXT: ldr d0, [x0]
478 ; CHECK-NEXT: ldr x10, [x0, #24]
479 ; CHECK-NEXT: ldrb w11, [x0, #32]
480 ; CHECK-NEXT: and x1, x8, #0x1
481 ; CHECK-NEXT: extr x2, x9, x8, #1
482 ; CHECK-NEXT: extr x4, x10, x9, #2
483 ; CHECK-NEXT: mov.d v0[1], x1
484 ; CHECK-NEXT: extr x6, x11, x10, #3
485 ; CHECK-NEXT: ubfx x3, x9, #1, #1
486 ; CHECK-NEXT: ubfx x5, x10, #2, #1
487 ; CHECK-NEXT: ubfx x7, x11, #3, #1
488 ; CHECK-NEXT: fmov x0, d0
491 ; CHECK-BE-LABEL: test_ldnp_v4i65:
492 ; CHECK-BE: // %bb.0:
493 ; CHECK-BE-NEXT: ldp x10, x9, [x0]
494 ; CHECK-BE-NEXT: ldrb w8, [x0, #32]
495 ; CHECK-BE-NEXT: ldp x12, x11, [x0, #16]
496 ; CHECK-BE-NEXT: lsr x13, x10, #56
497 ; CHECK-BE-NEXT: orr x7, x8, x11, lsl #8
498 ; CHECK-BE-NEXT: extr x8, x10, x9, #56
499 ; CHECK-BE-NEXT: extr x11, x12, x11, #56
500 ; CHECK-BE-NEXT: lsr x14, x12, #56
501 ; CHECK-BE-NEXT: extr x15, x9, x12, #56
502 ; CHECK-BE-NEXT: lsr x10, x10, #59
503 ; CHECK-BE-NEXT: extr x1, x13, x8, #3
504 ; CHECK-BE-NEXT: lsr x8, x9, #56
505 ; CHECK-BE-NEXT: ubfx x12, x12, #57, #1
506 ; CHECK-BE-NEXT: ubfx x9, x9, #58, #1
507 ; CHECK-BE-NEXT: extr x5, x14, x11, #1
508 ; CHECK-BE-NEXT: and x11, x11, #0x1
509 ; CHECK-BE-NEXT: fmov d0, x10
510 ; CHECK-BE-NEXT: fmov d2, x12
511 ; CHECK-BE-NEXT: fmov d3, x11
512 ; CHECK-BE-NEXT: fmov d1, x9
513 ; CHECK-BE-NEXT: extr x3, x8, x15, #2
514 ; CHECK-BE-NEXT: mov v0.d[1], x1
515 ; CHECK-BE-NEXT: mov v2.d[1], x5
516 ; CHECK-BE-NEXT: mov v3.d[1], x7
517 ; CHECK-BE-NEXT: mov v1.d[1], x3
518 ; CHECK-BE-NEXT: fmov x0, d0
519 ; CHECK-BE-NEXT: fmov x4, d2
520 ; CHECK-BE-NEXT: fmov x6, d3
521 ; CHECK-BE-NEXT: fmov x2, d1
523 %lv = load <4 x i65>, ptr %A, align 8, !nontemporal !0
527 define <4 x i63> @test_ldnp_v4i63(ptr %A) {
528 ; CHECK-LABEL: test_ldnp_v4i63:
530 ; CHECK-NEXT: ldp x8, x9, [x0]
531 ; CHECK-NEXT: ldp x10, x11, [x0, #16]
532 ; CHECK-NEXT: extr x12, x9, x8, #63
533 ; CHECK-NEXT: and x0, x8, #0x7fffffffffffffff
534 ; CHECK-NEXT: extr x9, x10, x9, #62
535 ; CHECK-NEXT: extr x3, x11, x10, #61
536 ; CHECK-NEXT: and x1, x12, #0x7fffffffffffffff
537 ; CHECK-NEXT: and x2, x9, #0x7fffffffffffffff
540 ; CHECK-BE-LABEL: test_ldnp_v4i63:
541 ; CHECK-BE: // %bb.0:
542 ; CHECK-BE-NEXT: ldp x9, x8, [x0, #8]
543 ; CHECK-BE-NEXT: ldr x11, [x0, #24]
544 ; CHECK-BE-NEXT: ldr x10, [x0]
545 ; CHECK-BE-NEXT: and x3, x11, #0x7fffffffffffffff
546 ; CHECK-BE-NEXT: extr x12, x9, x8, #62
547 ; CHECK-BE-NEXT: extr x8, x8, x11, #63
548 ; CHECK-BE-NEXT: extr x0, x10, x9, #61
549 ; CHECK-BE-NEXT: and x1, x12, #0x7fffffffffffffff
550 ; CHECK-BE-NEXT: and x2, x8, #0x7fffffffffffffff
552 %lv = load <4 x i63>, ptr %A, align 8, !nontemporal !0
556 define <5 x double> @test_ldnp_v5f64(ptr %A) {
557 ; CHECK-LABEL: test_ldnp_v5f64:
559 ; CHECK-NEXT: ldnp q0, q2, [x0]
560 ; CHECK-NEXT: ldr d4, [x0, #32]
561 ; CHECK-NEXT: ext.16b v1, v0, v0, #8
562 ; CHECK-NEXT: ext.16b v3, v2, v2, #8
563 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
564 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q2
565 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q1
566 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q3
569 ; CHECK-BE-LABEL: test_ldnp_v5f64:
570 ; CHECK-BE: // %bb.0:
571 ; CHECK-BE-NEXT: add x8, x0, #16
572 ; CHECK-BE-NEXT: ld1 { v0.2d }, [x0]
573 ; CHECK-BE-NEXT: ldr d4, [x0, #32]
574 ; CHECK-BE-NEXT: ld1 { v2.2d }, [x8]
575 ; CHECK-BE-NEXT: // kill: def $d4 killed $d4 killed $q4
576 ; CHECK-BE-NEXT: ext v1.16b, v0.16b, v0.16b, #8
577 ; CHECK-BE-NEXT: // kill: def $d0 killed $d0 killed $q0
578 ; CHECK-BE-NEXT: ext v3.16b, v2.16b, v2.16b, #8
579 ; CHECK-BE-NEXT: // kill: def $d1 killed $d1 killed $q1
580 ; CHECK-BE-NEXT: // kill: def $d2 killed $d2 killed $q2
581 ; CHECK-BE-NEXT: // kill: def $d3 killed $d3 killed $q3
583 %lv = load<5 x double>, ptr %A, align 8, !nontemporal !0
587 define <16 x i64> @test_ldnp_v16i64(ptr %A) {
588 ; CHECK-LABEL: test_ldnp_v16i64:
590 ; CHECK-NEXT: ldnp q0, q1, [x0]
591 ; CHECK-NEXT: ldnp q2, q3, [x0, #32]
592 ; CHECK-NEXT: ldnp q4, q5, [x0, #64]
593 ; CHECK-NEXT: ldnp q6, q7, [x0, #96]
596 ; CHECK-BE-LABEL: test_ldnp_v16i64:
597 ; CHECK-BE: // %bb.0:
598 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
599 ; CHECK-BE-NEXT: ldp q2, q3, [x0, #32]
600 ; CHECK-BE-NEXT: ldp q4, q5, [x0, #64]
601 ; CHECK-BE-NEXT: ldp q6, q7, [x0, #96]
603 %lv = load <16 x i64>, ptr %A, align 8, !nontemporal !0
607 define <16 x double> @test_ldnp_v16f64(ptr %A) {
608 ; CHECK-LABEL: test_ldnp_v16f64:
610 ; CHECK-NEXT: ldnp q0, q1, [x0]
611 ; CHECK-NEXT: ldnp q2, q3, [x0, #32]
612 ; CHECK-NEXT: ldnp q4, q5, [x0, #64]
613 ; CHECK-NEXT: ldnp q6, q7, [x0, #96]
616 ; CHECK-BE-LABEL: test_ldnp_v16f64:
617 ; CHECK-BE: // %bb.0:
618 ; CHECK-BE-NEXT: ldp q0, q1, [x0]
619 ; CHECK-BE-NEXT: ldp q2, q3, [x0, #32]
620 ; CHECK-BE-NEXT: ldp q4, q5, [x0, #64]
621 ; CHECK-BE-NEXT: ldp q6, q7, [x0, #96]
623 %lv = load <16 x double>, ptr %A, align 8, !nontemporal !0
624 ret <16 x double> %lv
627 define <vscale x 20 x float> @test_ldnp_v20f32_vscale(<vscale x 20 x float>* %A) {
628 ; CHECK-LABEL: test_ldnp_v20f32_vscale:
630 ; CHECK-NEXT: ptrue p0.s
631 ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0]
632 ; CHECK-NEXT: ld1w { z1.s }, p0/z, [x0, #1, mul vl]
633 ; CHECK-NEXT: ld1w { z2.s }, p0/z, [x0, #2, mul vl]
634 ; CHECK-NEXT: ld1w { z3.s }, p0/z, [x0, #3, mul vl]
635 ; CHECK-NEXT: ld1w { z4.s }, p0/z, [x0, #4, mul vl]
638 ; CHECK-BE-LABEL: test_ldnp_v20f32_vscale:
639 ; CHECK-BE: // %bb.0:
640 ; CHECK-BE-NEXT: ptrue p0.s
641 ; CHECK-BE-NEXT: ld1w { z0.s }, p0/z, [x0]
642 ; CHECK-BE-NEXT: ld1w { z1.s }, p0/z, [x0, #1, mul vl]
643 ; CHECK-BE-NEXT: ld1w { z2.s }, p0/z, [x0, #2, mul vl]
644 ; CHECK-BE-NEXT: ld1w { z3.s }, p0/z, [x0, #3, mul vl]
645 ; CHECK-BE-NEXT: ld1w { z4.s }, p0/z, [x0, #4, mul vl]
647 %lv = load<vscale x 20 x float>, <vscale x 20 x float>* %A, align 8, !nontemporal !0
648 ret <vscale x 20 x float> %lv