[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / nontemporal-load.ll
blobad46d32e4bf63237c5bc15b959e5beb52babc9db
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:
7 ; CHECK:       ; %bb.0:
8 ; CHECK-NEXT:    ldnp q0, q1, [x0]
9 ; CHECK-NEXT:    ret
11 ; CHECK-BE-LABEL: test_ldnp_v4f64:
12 ; CHECK-BE:       // %bb.0:
13 ; CHECK-BE-NEXT:    ldp q0, q1, [x0]
14 ; CHECK-BE-NEXT:    ret
15   %lv = load <4 x double>, ptr %A, align 8, !nontemporal !0
16   ret <4 x double> %lv
19 define <4 x i64> @test_ldnp_v4i64(ptr %A) {
20 ; CHECK-LABEL: test_ldnp_v4i64:
21 ; CHECK:       ; %bb.0:
22 ; CHECK-NEXT:    ldnp q0, q1, [x0]
23 ; CHECK-NEXT:    ret
25 ; CHECK-BE-LABEL: test_ldnp_v4i64:
26 ; CHECK-BE:       // %bb.0:
27 ; CHECK-BE-NEXT:    ldp q0, q1, [x0]
28 ; CHECK-BE-NEXT:    ret
29   %lv = load <4 x i64>, ptr %A, align 8, !nontemporal !0
30   ret <4 x i64> %lv
33 define <8 x i32> @test_ldnp_v8i32(ptr %A) {
34 ; CHECK-LABEL: test_ldnp_v8i32:
35 ; CHECK:       ; %bb.0:
36 ; CHECK-NEXT:    ldnp q0, q1, [x0]
37 ; CHECK-NEXT:    ret
39 ; CHECK-BE-LABEL: test_ldnp_v8i32:
40 ; CHECK-BE:       // %bb.0:
41 ; CHECK-BE-NEXT:    ldp q0, q1, [x0]
42 ; CHECK-BE-NEXT:    ret
43   %lv = load <8 x i32>, ptr %A, align 8, !nontemporal !0
44   ret <8 x i32> %lv
47 define <8 x float> @test_ldnp_v8f32(ptr %A) {
48 ; CHECK-LABEL: test_ldnp_v8f32:
49 ; CHECK:       ; %bb.0:
50 ; CHECK-NEXT:    ldnp q0, q1, [x0]
51 ; CHECK-NEXT:    ret
53 ; CHECK-BE-LABEL: test_ldnp_v8f32:
54 ; CHECK-BE:       // %bb.0:
55 ; CHECK-BE-NEXT:    ldp q0, q1, [x0]
56 ; CHECK-BE-NEXT:    ret
57   %lv = load <8 x float>, ptr %A, align 8, !nontemporal !0
58   ret <8 x float> %lv
61 define <16 x i16> @test_ldnp_v16i16(ptr %A) {
62 ; CHECK-LABEL: test_ldnp_v16i16:
63 ; CHECK:       ; %bb.0:
64 ; CHECK-NEXT:    ldnp q0, q1, [x0]
65 ; CHECK-NEXT:    ret
67 ; CHECK-BE-LABEL: test_ldnp_v16i16:
68 ; CHECK-BE:       // %bb.0:
69 ; CHECK-BE-NEXT:    ldp q0, q1, [x0]
70 ; CHECK-BE-NEXT:    ret
71   %lv = load <16 x i16>, ptr %A, align 8, !nontemporal !0
72   ret <16 x i16> %lv
75 define <16 x half> @test_ldnp_v16f16(ptr %A) {
76 ; CHECK-LABEL: test_ldnp_v16f16:
77 ; CHECK:       ; %bb.0:
78 ; CHECK-NEXT:    ldnp q0, q1, [x0]
79 ; CHECK-NEXT:    ret
81 ; CHECK-BE-LABEL: test_ldnp_v16f16:
82 ; CHECK-BE:       // %bb.0:
83 ; CHECK-BE-NEXT:    ldp q0, q1, [x0]
84 ; CHECK-BE-NEXT:    ret
85   %lv = load <16 x half>, ptr %A, align 8, !nontemporal !0
86   ret <16 x half> %lv
89 define <32 x i8> @test_ldnp_v32i8(ptr %A) {
90 ; CHECK-LABEL: test_ldnp_v32i8:
91 ; CHECK:       ; %bb.0:
92 ; CHECK-NEXT:    ldnp q0, q1, [x0]
93 ; CHECK-NEXT:    ret
95 ; CHECK-BE-LABEL: test_ldnp_v32i8:
96 ; CHECK-BE:       // %bb.0:
97 ; CHECK-BE-NEXT:    ldp q0, q1, [x0]
98 ; CHECK-BE-NEXT:    ret
99   %lv = load <32 x i8>, ptr %A, align 8, !nontemporal !0
100   ret <32 x i8> %lv
103 define <4 x i32> @test_ldnp_v4i32(ptr %A) {
104 ; CHECK-LABEL: test_ldnp_v4i32:
105 ; CHECK:       ; %bb.0:
106 ; CHECK-NEXT:    ldr q0, [x0]
107 ; CHECK-NEXT:    ret
109 ; CHECK-BE-LABEL: test_ldnp_v4i32:
110 ; CHECK-BE:       // %bb.0:
111 ; CHECK-BE-NEXT:    ldr q0, [x0]
112 ; CHECK-BE-NEXT:    ret
113   %lv = load<4 x i32>, ptr %A, align 8, !nontemporal !0
114   ret <4 x i32> %lv
117 define <4 x float> @test_ldnp_v4f32(ptr %A) {
118 ; CHECK-LABEL: test_ldnp_v4f32:
119 ; CHECK:       ; %bb.0:
120 ; CHECK-NEXT:    ldr q0, [x0]
121 ; CHECK-NEXT:    ret
123 ; CHECK-BE-LABEL: test_ldnp_v4f32:
124 ; CHECK-BE:       // %bb.0:
125 ; CHECK-BE-NEXT:    ldr q0, [x0]
126 ; CHECK-BE-NEXT:    ret
127   %lv = load<4 x float>, ptr %A, align 8, !nontemporal !0
128   ret <4 x float> %lv
131 define <8 x i16> @test_ldnp_v8i16(ptr %A) {
132 ; CHECK-LABEL: test_ldnp_v8i16:
133 ; CHECK:       ; %bb.0:
134 ; CHECK-NEXT:    ldr q0, [x0]
135 ; CHECK-NEXT:    ret
137 ; CHECK-BE-LABEL: test_ldnp_v8i16:
138 ; CHECK-BE:       // %bb.0:
139 ; CHECK-BE-NEXT:    ldr q0, [x0]
140 ; CHECK-BE-NEXT:    ret
141   %lv = load <8 x i16>, ptr %A, align 8, !nontemporal !0
142   ret <8 x i16> %lv
145 define <16 x i8> @test_ldnp_v16i8(ptr %A) {
146 ; CHECK-LABEL: test_ldnp_v16i8:
147 ; CHECK:       ; %bb.0:
148 ; CHECK-NEXT:    ldr q0, [x0]
149 ; CHECK-NEXT:    ret
151 ; CHECK-BE-LABEL: test_ldnp_v16i8:
152 ; CHECK-BE:       // %bb.0:
153 ; CHECK-BE-NEXT:    ldr q0, [x0]
154 ; CHECK-BE-NEXT:    ret
155   %lv = load <16 x i8>, ptr %A, align 8, !nontemporal !0
156   ret <16 x i8> %lv
158 define <2 x double> @test_ldnp_v2f64(ptr %A) {
159 ; CHECK-LABEL: test_ldnp_v2f64:
160 ; CHECK:       ; %bb.0:
161 ; CHECK-NEXT:    ldr q0, [x0]
162 ; CHECK-NEXT:    ret
164 ; CHECK-BE-LABEL: test_ldnp_v2f64:
165 ; CHECK-BE:       // %bb.0:
166 ; CHECK-BE-NEXT:    ldr q0, [x0]
167 ; CHECK-BE-NEXT:    ret
168   %lv = load <2 x double>, ptr %A, align 8, !nontemporal !0
169   ret <2 x double> %lv
172 define <2 x i32> @test_ldnp_v2i32(ptr %A) {
173 ; CHECK-LABEL: test_ldnp_v2i32:
174 ; CHECK:       ; %bb.0:
175 ; CHECK-NEXT:    ldr d0, [x0]
176 ; CHECK-NEXT:    ret
178 ; CHECK-BE-LABEL: test_ldnp_v2i32:
179 ; CHECK-BE:       // %bb.0:
180 ; CHECK-BE-NEXT:    ldr d0, [x0]
181 ; CHECK-BE-NEXT:    ret
182   %lv = load <2 x i32>, ptr %A, align 8, !nontemporal !0
183   ret <2 x i32> %lv
186 define <2 x float> @test_ldnp_v2f32(ptr %A) {
187 ; CHECK-LABEL: test_ldnp_v2f32:
188 ; CHECK:       ; %bb.0:
189 ; CHECK-NEXT:    ldr d0, [x0]
190 ; CHECK-NEXT:    ret
192 ; CHECK-BE-LABEL: test_ldnp_v2f32:
193 ; CHECK-BE:       // %bb.0:
194 ; CHECK-BE-NEXT:    ldr d0, [x0]
195 ; CHECK-BE-NEXT:    ret
196   %lv = load <2 x float>, ptr %A, align 8, !nontemporal !0
197   ret <2 x float> %lv
200 define <4 x i16> @test_ldnp_v4i16(ptr %A) {
201 ; CHECK-LABEL: test_ldnp_v4i16:
202 ; CHECK:       ; %bb.0:
203 ; CHECK-NEXT:    ldr d0, [x0]
204 ; CHECK-NEXT:    ret
206 ; CHECK-BE-LABEL: test_ldnp_v4i16:
207 ; CHECK-BE:       // %bb.0:
208 ; CHECK-BE-NEXT:    ldr d0, [x0]
209 ; CHECK-BE-NEXT:    ret
210   %lv = load <4 x i16>, ptr %A, align 8, !nontemporal !0
211   ret <4 x i16> %lv
214 define <8 x i8> @test_ldnp_v8i8(ptr %A) {
215 ; CHECK-LABEL: test_ldnp_v8i8:
216 ; CHECK:       ; %bb.0:
217 ; CHECK-NEXT:    ldr d0, [x0]
218 ; CHECK-NEXT:    ret
220 ; CHECK-BE-LABEL: test_ldnp_v8i8:
221 ; CHECK-BE:       // %bb.0:
222 ; CHECK-BE-NEXT:    ldr d0, [x0]
223 ; CHECK-BE-NEXT:    ret
224   %lv = load <8 x i8>, ptr %A, align 8, !nontemporal !0
225   ret <8 x i8> %lv
228 define <1 x double> @test_ldnp_v1f64(ptr %A) {
229 ; CHECK-LABEL: test_ldnp_v1f64:
230 ; CHECK:       ; %bb.0:
231 ; CHECK-NEXT:    ldr d0, [x0]
232 ; CHECK-NEXT:    ret
234 ; CHECK-BE-LABEL: test_ldnp_v1f64:
235 ; CHECK-BE:       // %bb.0:
236 ; CHECK-BE-NEXT:    ldr d0, [x0]
237 ; CHECK-BE-NEXT:    ret
238   %lv = load <1 x double>, ptr %A, align 8, !nontemporal !0
239   ret <1 x double> %lv
242 define <1 x i64> @test_ldnp_v1i64(ptr %A) {
243 ; CHECK-LABEL: test_ldnp_v1i64:
244 ; CHECK:       ; %bb.0:
245 ; CHECK-NEXT:    ldr d0, [x0]
246 ; CHECK-NEXT:    ret
248 ; CHECK-BE-LABEL: test_ldnp_v1i64:
249 ; CHECK-BE:       // %bb.0:
250 ; CHECK-BE-NEXT:    ldr d0, [x0]
251 ; CHECK-BE-NEXT:    ret
252   %lv = load <1 x i64>, ptr %A, align 8, !nontemporal !0
253   ret <1 x i64> %lv
256 define <32 x i16> @test_ldnp_v32i16(ptr %A) {
257 ; CHECK-LABEL: test_ldnp_v32i16:
258 ; CHECK:       ; %bb.0:
259 ; CHECK-NEXT:    ldnp q0, q1, [x0]
260 ; CHECK-NEXT:    ldnp q2, q3, [x0, #32]
261 ; CHECK-NEXT:    ret
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]
267 ; CHECK-BE-NEXT:    ret
268   %lv = load <32 x i16>, ptr %A, align 8, !nontemporal !0
269   ret <32 x i16> %lv
272 define <32 x half> @test_ldnp_v32f16(ptr %A) {
273 ; CHECK-LABEL: test_ldnp_v32f16:
274 ; CHECK:       ; %bb.0:
275 ; CHECK-NEXT:    ldnp q0, q1, [x0]
276 ; CHECK-NEXT:    ldnp q2, q3, [x0, #32]
277 ; CHECK-NEXT:    ret
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]
283 ; CHECK-BE-NEXT:    ret
284   %lv = load <32 x half>, ptr %A, align 8, !nontemporal !0
285   ret <32 x half> %lv
288 define <16 x i32> @test_ldnp_v16i32(ptr %A) {
289 ; CHECK-LABEL: test_ldnp_v16i32:
290 ; CHECK:       ; %bb.0:
291 ; CHECK-NEXT:    ldnp q0, q1, [x0]
292 ; CHECK-NEXT:    ldnp q2, q3, [x0, #32]
293 ; CHECK-NEXT:    ret
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]
299 ; CHECK-BE-NEXT:    ret
300   %lv = load <16 x i32>, ptr %A, align 8, !nontemporal !0
301   ret <16 x i32> %lv
304 define <16 x float> @test_ldnp_v16f32(ptr %A) {
305 ; CHECK-LABEL: test_ldnp_v16f32:
306 ; CHECK:       ; %bb.0:
307 ; CHECK-NEXT:    ldnp q0, q1, [x0]
308 ; CHECK-NEXT:    ldnp q2, q3, [x0, #32]
309 ; CHECK-NEXT:    ret
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]
315 ; CHECK-BE-NEXT:    ret
316   %lv = load <16 x float>, ptr %A, align 8, !nontemporal !0
317   ret <16 x float> %lv
320 define <17 x float> @test_ldnp_v17f32(ptr %A) {
321 ; CHECK-LABEL: test_ldnp_v17f32:
322 ; CHECK:       ; %bb.0:
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]
329 ; CHECK-NEXT:    ret
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]
349 ; CHECK-BE-NEXT:    ret
350   %lv = load <17 x float>, ptr %A, align 8, !nontemporal !0
351   ret <17 x float> %lv
354 define <33 x double> @test_ldnp_v33f64(ptr %A) {
355 ; CHECK-LABEL: test_ldnp_v33f64:
356 ; CHECK:       ; %bb.0:
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]
375 ; CHECK-NEXT:    ret
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]
443 ; CHECK-BE-NEXT:    ret
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:
450 ; CHECK:       ; %bb.0:
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]
456 ; CHECK-NEXT:    ret
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]
468 ; CHECK-BE-NEXT:    ret
469   %lv = load<33 x i8>, ptr %A, align 8, !nontemporal !0
470   ret <33 x i8> %lv
473 define <4 x i65> @test_ldnp_v4i65(ptr %A) {
474 ; CHECK-LABEL: test_ldnp_v4i65:
475 ; CHECK:       ; %bb.0:
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
489 ; CHECK-NEXT:    ret
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
522 ; CHECK-BE-NEXT:    ret
523   %lv = load <4 x i65>, ptr %A, align 8, !nontemporal !0
524   ret <4 x i65> %lv
527 define <4 x i63> @test_ldnp_v4i63(ptr %A) {
528 ; CHECK-LABEL: test_ldnp_v4i63:
529 ; CHECK:       ; %bb.0:
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
538 ; CHECK-NEXT:    ret
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
551 ; CHECK-BE-NEXT:    ret
552   %lv = load <4 x i63>, ptr %A, align 8, !nontemporal !0
553   ret <4 x i63> %lv
556 define <5 x double> @test_ldnp_v5f64(ptr %A) {
557 ; CHECK-LABEL: test_ldnp_v5f64:
558 ; CHECK:       ; %bb.0:
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
567 ; CHECK-NEXT:    ret
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
582 ; CHECK-BE-NEXT:    ret
583   %lv = load<5 x double>, ptr %A, align 8, !nontemporal !0
584   ret <5 x double> %lv
587 define <16 x i64> @test_ldnp_v16i64(ptr %A) {
588 ; CHECK-LABEL: test_ldnp_v16i64:
589 ; CHECK:       ; %bb.0:
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]
594 ; CHECK-NEXT:    ret
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]
602 ; CHECK-BE-NEXT:    ret
603   %lv = load <16 x i64>, ptr %A, align 8, !nontemporal !0
604   ret <16 x i64> %lv
607 define <16 x double> @test_ldnp_v16f64(ptr %A) {
608 ; CHECK-LABEL: test_ldnp_v16f64:
609 ; CHECK:       ; %bb.0:
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]
614 ; CHECK-NEXT:    ret
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]
622 ; CHECK-BE-NEXT:    ret
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:
629 ; CHECK:       ; %bb.0:
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]
636 ; CHECK-NEXT:    ret
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]
646 ; CHECK-BE-NEXT:    ret
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
651 !0 = !{i32 1}