1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=arm64-apple-ios7.0 -o - %s | FileCheck %s
6 define <8 x i8> @test_v8i8_pre_load(ptr %addr) {
7 ; CHECK-LABEL: test_v8i8_pre_load:
9 ; CHECK-NEXT: ldr d0, [x0, #40]!
10 ; CHECK-NEXT: adrp x8, _ptr@PAGE
11 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
13 %newaddr = getelementptr <8 x i8>, ptr %addr, i32 5
14 %val = load <8 x i8>, ptr %newaddr, align 8
15 store ptr %newaddr, ptr @ptr
19 define <8 x i8> @test_v8i8_post_load(ptr %addr) {
20 ; CHECK-LABEL: test_v8i8_post_load:
22 ; CHECK-NEXT: ldr d0, [x0], #40
23 ; CHECK-NEXT: adrp x8, _ptr@PAGE
24 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
26 %newaddr = getelementptr <8 x i8>, ptr %addr, i32 5
27 %val = load <8 x i8>, ptr %addr, align 8
28 store ptr %newaddr, ptr @ptr
32 define void @test_v8i8_pre_store(<8 x i8> %in, ptr %addr) {
33 ; CHECK-LABEL: test_v8i8_pre_store:
35 ; CHECK-NEXT: adrp x8, _ptr@PAGE
36 ; CHECK-NEXT: str d0, [x0, #40]!
37 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
39 %newaddr = getelementptr <8 x i8>, ptr %addr, i32 5
40 store <8 x i8> %in, ptr %newaddr, align 8
41 store ptr %newaddr, ptr @ptr
45 define void @test_v8i8_post_store(<8 x i8> %in, ptr %addr) {
46 ; CHECK-LABEL: test_v8i8_post_store:
48 ; CHECK-NEXT: adrp x8, _ptr@PAGE
49 ; CHECK-NEXT: str d0, [x0], #40
50 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
52 %newaddr = getelementptr <8 x i8>, ptr %addr, i32 5
53 store <8 x i8> %in, ptr %addr, align 8
54 store ptr %newaddr, ptr @ptr
58 define <4 x i16> @test_v4i16_pre_load(ptr %addr) {
59 ; CHECK-LABEL: test_v4i16_pre_load:
61 ; CHECK-NEXT: ldr d0, [x0, #40]!
62 ; CHECK-NEXT: adrp x8, _ptr@PAGE
63 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
65 %newaddr = getelementptr <4 x i16>, ptr %addr, i32 5
66 %val = load <4 x i16>, ptr %newaddr, align 8
67 store ptr %newaddr, ptr @ptr
71 define <4 x i16> @test_v4i16_post_load(ptr %addr) {
72 ; CHECK-LABEL: test_v4i16_post_load:
74 ; CHECK-NEXT: ldr d0, [x0], #40
75 ; CHECK-NEXT: adrp x8, _ptr@PAGE
76 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
78 %newaddr = getelementptr <4 x i16>, ptr %addr, i32 5
79 %val = load <4 x i16>, ptr %addr, align 8
80 store ptr %newaddr, ptr @ptr
84 define void @test_v4i16_pre_store(<4 x i16> %in, ptr %addr) {
85 ; CHECK-LABEL: test_v4i16_pre_store:
87 ; CHECK-NEXT: adrp x8, _ptr@PAGE
88 ; CHECK-NEXT: str d0, [x0, #40]!
89 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
91 %newaddr = getelementptr <4 x i16>, ptr %addr, i32 5
92 store <4 x i16> %in, ptr %newaddr, align 8
93 store ptr %newaddr, ptr @ptr
97 define void @test_v4i16_post_store(<4 x i16> %in, ptr %addr) {
98 ; CHECK-LABEL: test_v4i16_post_store:
100 ; CHECK-NEXT: adrp x8, _ptr@PAGE
101 ; CHECK-NEXT: str d0, [x0], #40
102 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
104 %newaddr = getelementptr <4 x i16>, ptr %addr, i32 5
105 store <4 x i16> %in, ptr %addr, align 8
106 store ptr %newaddr, ptr @ptr
110 define <2 x i32> @test_v2i32_pre_load(ptr %addr) {
111 ; CHECK-LABEL: test_v2i32_pre_load:
113 ; CHECK-NEXT: ldr d0, [x0, #40]!
114 ; CHECK-NEXT: adrp x8, _ptr@PAGE
115 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
117 %newaddr = getelementptr <2 x i32>, ptr %addr, i32 5
118 %val = load <2 x i32>, ptr %newaddr, align 8
119 store ptr %newaddr, ptr @ptr
123 define <2 x i32> @test_v2i32_post_load(ptr %addr) {
124 ; CHECK-LABEL: test_v2i32_post_load:
126 ; CHECK-NEXT: ldr d0, [x0], #40
127 ; CHECK-NEXT: adrp x8, _ptr@PAGE
128 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
130 %newaddr = getelementptr <2 x i32>, ptr %addr, i32 5
131 %val = load <2 x i32>, ptr %addr, align 8
132 store ptr %newaddr, ptr @ptr
136 define void @test_v2i32_pre_store(<2 x i32> %in, ptr %addr) {
137 ; CHECK-LABEL: test_v2i32_pre_store:
139 ; CHECK-NEXT: adrp x8, _ptr@PAGE
140 ; CHECK-NEXT: str d0, [x0, #40]!
141 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
143 %newaddr = getelementptr <2 x i32>, ptr %addr, i32 5
144 store <2 x i32> %in, ptr %newaddr, align 8
145 store ptr %newaddr, ptr @ptr
149 define void @test_v2i32_post_store(<2 x i32> %in, ptr %addr) {
150 ; CHECK-LABEL: test_v2i32_post_store:
152 ; CHECK-NEXT: adrp x8, _ptr@PAGE
153 ; CHECK-NEXT: str d0, [x0], #40
154 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
156 %newaddr = getelementptr <2 x i32>, ptr %addr, i32 5
157 store <2 x i32> %in, ptr %addr, align 8
158 store ptr %newaddr, ptr @ptr
162 define <2 x float> @test_v2f32_pre_load(ptr %addr) {
163 ; CHECK-LABEL: test_v2f32_pre_load:
165 ; CHECK-NEXT: ldr d0, [x0, #40]!
166 ; CHECK-NEXT: adrp x8, _ptr@PAGE
167 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
169 %newaddr = getelementptr <2 x float>, ptr %addr, i32 5
170 %val = load <2 x float>, ptr %newaddr, align 8
171 store ptr %newaddr, ptr @ptr
175 define <2 x float> @test_v2f32_post_load(ptr %addr) {
176 ; CHECK-LABEL: test_v2f32_post_load:
178 ; CHECK-NEXT: ldr d0, [x0], #40
179 ; CHECK-NEXT: adrp x8, _ptr@PAGE
180 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
182 %newaddr = getelementptr <2 x float>, ptr %addr, i32 5
183 %val = load <2 x float>, ptr %addr, align 8
184 store ptr %newaddr, ptr @ptr
188 define void @test_v2f32_pre_store(<2 x float> %in, ptr %addr) {
189 ; CHECK-LABEL: test_v2f32_pre_store:
191 ; CHECK-NEXT: adrp x8, _ptr@PAGE
192 ; CHECK-NEXT: str d0, [x0, #40]!
193 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
195 %newaddr = getelementptr <2 x float>, ptr %addr, i32 5
196 store <2 x float> %in, ptr %newaddr, align 8
197 store ptr %newaddr, ptr @ptr
201 define void @test_v2f32_post_store(<2 x float> %in, ptr %addr) {
202 ; CHECK-LABEL: test_v2f32_post_store:
204 ; CHECK-NEXT: adrp x8, _ptr@PAGE
205 ; CHECK-NEXT: str d0, [x0], #40
206 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
208 %newaddr = getelementptr <2 x float>, ptr %addr, i32 5
209 store <2 x float> %in, ptr %addr, align 8
210 store ptr %newaddr, ptr @ptr
214 define <1 x i64> @test_v1i64_pre_load(ptr %addr) {
215 ; CHECK-LABEL: test_v1i64_pre_load:
217 ; CHECK-NEXT: ldr d0, [x0, #40]!
218 ; CHECK-NEXT: adrp x8, _ptr@PAGE
219 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
221 %newaddr = getelementptr <1 x i64>, ptr %addr, i32 5
222 %val = load <1 x i64>, ptr %newaddr, align 8
223 store ptr %newaddr, ptr @ptr
227 define <1 x i64> @test_v1i64_post_load(ptr %addr) {
228 ; CHECK-LABEL: test_v1i64_post_load:
230 ; CHECK-NEXT: ldr d0, [x0], #40
231 ; CHECK-NEXT: adrp x8, _ptr@PAGE
232 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
234 %newaddr = getelementptr <1 x i64>, ptr %addr, i32 5
235 %val = load <1 x i64>, ptr %addr, align 8
236 store ptr %newaddr, ptr @ptr
240 define void @test_v1i64_pre_store(<1 x i64> %in, ptr %addr) {
241 ; CHECK-LABEL: test_v1i64_pre_store:
243 ; CHECK-NEXT: adrp x8, _ptr@PAGE
244 ; CHECK-NEXT: str d0, [x0, #40]!
245 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
247 %newaddr = getelementptr <1 x i64>, ptr %addr, i32 5
248 store <1 x i64> %in, ptr %newaddr, align 8
249 store ptr %newaddr, ptr @ptr
253 define void @test_v1i64_post_store(<1 x i64> %in, ptr %addr) {
254 ; CHECK-LABEL: test_v1i64_post_store:
256 ; CHECK-NEXT: adrp x8, _ptr@PAGE
257 ; CHECK-NEXT: str d0, [x0], #40
258 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
260 %newaddr = getelementptr <1 x i64>, ptr %addr, i32 5
261 store <1 x i64> %in, ptr %addr, align 8
262 store ptr %newaddr, ptr @ptr
266 define <16 x i8> @test_v16i8_pre_load(ptr %addr) {
267 ; CHECK-LABEL: test_v16i8_pre_load:
269 ; CHECK-NEXT: ldr q0, [x0, #80]!
270 ; CHECK-NEXT: adrp x8, _ptr@PAGE
271 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
273 %newaddr = getelementptr <16 x i8>, ptr %addr, i32 5
274 %val = load <16 x i8>, ptr %newaddr, align 8
275 store ptr %newaddr, ptr @ptr
279 define <16 x i8> @test_v16i8_post_load(ptr %addr) {
280 ; CHECK-LABEL: test_v16i8_post_load:
282 ; CHECK-NEXT: ldr q0, [x0], #80
283 ; CHECK-NEXT: adrp x8, _ptr@PAGE
284 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
286 %newaddr = getelementptr <16 x i8>, ptr %addr, i32 5
287 %val = load <16 x i8>, ptr %addr, align 8
288 store ptr %newaddr, ptr @ptr
292 define void @test_v16i8_pre_store(<16 x i8> %in, ptr %addr) {
293 ; CHECK-LABEL: test_v16i8_pre_store:
295 ; CHECK-NEXT: adrp x8, _ptr@PAGE
296 ; CHECK-NEXT: str q0, [x0, #80]!
297 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
299 %newaddr = getelementptr <16 x i8>, ptr %addr, i32 5
300 store <16 x i8> %in, ptr %newaddr, align 8
301 store ptr %newaddr, ptr @ptr
305 define void @test_v16i8_post_store(<16 x i8> %in, ptr %addr) {
306 ; CHECK-LABEL: test_v16i8_post_store:
308 ; CHECK-NEXT: adrp x8, _ptr@PAGE
309 ; CHECK-NEXT: str q0, [x0], #80
310 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
312 %newaddr = getelementptr <16 x i8>, ptr %addr, i32 5
313 store <16 x i8> %in, ptr %addr, align 8
314 store ptr %newaddr, ptr @ptr
318 define <8 x i16> @test_v8i16_pre_load(ptr %addr) {
319 ; CHECK-LABEL: test_v8i16_pre_load:
321 ; CHECK-NEXT: ldr q0, [x0, #80]!
322 ; CHECK-NEXT: adrp x8, _ptr@PAGE
323 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
325 %newaddr = getelementptr <8 x i16>, ptr %addr, i32 5
326 %val = load <8 x i16>, ptr %newaddr, align 8
327 store ptr %newaddr, ptr @ptr
331 define <8 x i16> @test_v8i16_post_load(ptr %addr) {
332 ; CHECK-LABEL: test_v8i16_post_load:
334 ; CHECK-NEXT: ldr q0, [x0], #80
335 ; CHECK-NEXT: adrp x8, _ptr@PAGE
336 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
338 %newaddr = getelementptr <8 x i16>, ptr %addr, i32 5
339 %val = load <8 x i16>, ptr %addr, align 8
340 store ptr %newaddr, ptr @ptr
344 define void @test_v8i16_pre_store(<8 x i16> %in, ptr %addr) {
345 ; CHECK-LABEL: test_v8i16_pre_store:
347 ; CHECK-NEXT: adrp x8, _ptr@PAGE
348 ; CHECK-NEXT: str q0, [x0, #80]!
349 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
351 %newaddr = getelementptr <8 x i16>, ptr %addr, i32 5
352 store <8 x i16> %in, ptr %newaddr, align 8
353 store ptr %newaddr, ptr @ptr
357 define void @test_v8i16_post_store(<8 x i16> %in, ptr %addr) {
358 ; CHECK-LABEL: test_v8i16_post_store:
360 ; CHECK-NEXT: adrp x8, _ptr@PAGE
361 ; CHECK-NEXT: str q0, [x0], #80
362 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
364 %newaddr = getelementptr <8 x i16>, ptr %addr, i32 5
365 store <8 x i16> %in, ptr %addr, align 8
366 store ptr %newaddr, ptr @ptr
370 define <4 x i32> @test_v4i32_pre_load(ptr %addr) {
371 ; CHECK-LABEL: test_v4i32_pre_load:
373 ; CHECK-NEXT: ldr q0, [x0, #80]!
374 ; CHECK-NEXT: adrp x8, _ptr@PAGE
375 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
377 %newaddr = getelementptr <4 x i32>, ptr %addr, i32 5
378 %val = load <4 x i32>, ptr %newaddr, align 8
379 store ptr %newaddr, ptr @ptr
383 define <4 x i32> @test_v4i32_post_load(ptr %addr) {
384 ; CHECK-LABEL: test_v4i32_post_load:
386 ; CHECK-NEXT: ldr q0, [x0], #80
387 ; CHECK-NEXT: adrp x8, _ptr@PAGE
388 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
390 %newaddr = getelementptr <4 x i32>, ptr %addr, i32 5
391 %val = load <4 x i32>, ptr %addr, align 8
392 store ptr %newaddr, ptr @ptr
396 define void @test_v4i32_pre_store(<4 x i32> %in, ptr %addr) {
397 ; CHECK-LABEL: test_v4i32_pre_store:
399 ; CHECK-NEXT: adrp x8, _ptr@PAGE
400 ; CHECK-NEXT: str q0, [x0, #80]!
401 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
403 %newaddr = getelementptr <4 x i32>, ptr %addr, i32 5
404 store <4 x i32> %in, ptr %newaddr, align 8
405 store ptr %newaddr, ptr @ptr
409 define void @test_v4i32_post_store(<4 x i32> %in, ptr %addr) {
410 ; CHECK-LABEL: test_v4i32_post_store:
412 ; CHECK-NEXT: adrp x8, _ptr@PAGE
413 ; CHECK-NEXT: str q0, [x0], #80
414 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
416 %newaddr = getelementptr <4 x i32>, ptr %addr, i32 5
417 store <4 x i32> %in, ptr %addr, align 8
418 store ptr %newaddr, ptr @ptr
423 define <4 x float> @test_v4f32_pre_load(ptr %addr) {
424 ; CHECK-LABEL: test_v4f32_pre_load:
426 ; CHECK-NEXT: ldr q0, [x0, #80]!
427 ; CHECK-NEXT: adrp x8, _ptr@PAGE
428 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
430 %newaddr = getelementptr <4 x float>, ptr %addr, i32 5
431 %val = load <4 x float>, ptr %newaddr, align 8
432 store ptr %newaddr, ptr @ptr
436 define <4 x float> @test_v4f32_post_load(ptr %addr) {
437 ; CHECK-LABEL: test_v4f32_post_load:
439 ; CHECK-NEXT: ldr q0, [x0], #80
440 ; CHECK-NEXT: adrp x8, _ptr@PAGE
441 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
443 %newaddr = getelementptr <4 x float>, ptr %addr, i32 5
444 %val = load <4 x float>, ptr %addr, align 8
445 store ptr %newaddr, ptr @ptr
449 define void @test_v4f32_pre_store(<4 x float> %in, ptr %addr) {
450 ; CHECK-LABEL: test_v4f32_pre_store:
452 ; CHECK-NEXT: adrp x8, _ptr@PAGE
453 ; CHECK-NEXT: str q0, [x0, #80]!
454 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
456 %newaddr = getelementptr <4 x float>, ptr %addr, i32 5
457 store <4 x float> %in, ptr %newaddr, align 8
458 store ptr %newaddr, ptr @ptr
462 define void @test_v4f32_post_store(<4 x float> %in, ptr %addr) {
463 ; CHECK-LABEL: test_v4f32_post_store:
465 ; CHECK-NEXT: adrp x8, _ptr@PAGE
466 ; CHECK-NEXT: str q0, [x0], #80
467 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
469 %newaddr = getelementptr <4 x float>, ptr %addr, i32 5
470 store <4 x float> %in, ptr %addr, align 8
471 store ptr %newaddr, ptr @ptr
476 define <2 x i64> @test_v2i64_pre_load(ptr %addr) {
477 ; CHECK-LABEL: test_v2i64_pre_load:
479 ; CHECK-NEXT: ldr q0, [x0, #80]!
480 ; CHECK-NEXT: adrp x8, _ptr@PAGE
481 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
483 %newaddr = getelementptr <2 x i64>, ptr %addr, i32 5
484 %val = load <2 x i64>, ptr %newaddr, align 8
485 store ptr %newaddr, ptr @ptr
489 define <2 x i64> @test_v2i64_post_load(ptr %addr) {
490 ; CHECK-LABEL: test_v2i64_post_load:
492 ; CHECK-NEXT: ldr q0, [x0], #80
493 ; CHECK-NEXT: adrp x8, _ptr@PAGE
494 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
496 %newaddr = getelementptr <2 x i64>, ptr %addr, i32 5
497 %val = load <2 x i64>, ptr %addr, align 8
498 store ptr %newaddr, ptr @ptr
502 define void @test_v2i64_pre_store(<2 x i64> %in, ptr %addr) {
503 ; CHECK-LABEL: test_v2i64_pre_store:
505 ; CHECK-NEXT: adrp x8, _ptr@PAGE
506 ; CHECK-NEXT: str q0, [x0, #80]!
507 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
509 %newaddr = getelementptr <2 x i64>, ptr %addr, i32 5
510 store <2 x i64> %in, ptr %newaddr, align 8
511 store ptr %newaddr, ptr @ptr
515 define void @test_v2i64_post_store(<2 x i64> %in, ptr %addr) {
516 ; CHECK-LABEL: test_v2i64_post_store:
518 ; CHECK-NEXT: adrp x8, _ptr@PAGE
519 ; CHECK-NEXT: str q0, [x0], #80
520 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
522 %newaddr = getelementptr <2 x i64>, ptr %addr, i32 5
523 store <2 x i64> %in, ptr %addr, align 8
524 store ptr %newaddr, ptr @ptr
529 define <2 x double> @test_v2f64_pre_load(ptr %addr) {
530 ; CHECK-LABEL: test_v2f64_pre_load:
532 ; CHECK-NEXT: ldr q0, [x0, #80]!
533 ; CHECK-NEXT: adrp x8, _ptr@PAGE
534 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
536 %newaddr = getelementptr <2 x double>, ptr %addr, i32 5
537 %val = load <2 x double>, ptr %newaddr, align 8
538 store ptr %newaddr, ptr @ptr
539 ret <2 x double> %val
542 define <2 x double> @test_v2f64_post_load(ptr %addr) {
543 ; CHECK-LABEL: test_v2f64_post_load:
545 ; CHECK-NEXT: ldr q0, [x0], #80
546 ; CHECK-NEXT: adrp x8, _ptr@PAGE
547 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
549 %newaddr = getelementptr <2 x double>, ptr %addr, i32 5
550 %val = load <2 x double>, ptr %addr, align 8
551 store ptr %newaddr, ptr @ptr
552 ret <2 x double> %val
555 define void @test_v2f64_pre_store(<2 x double> %in, ptr %addr) {
556 ; CHECK-LABEL: test_v2f64_pre_store:
558 ; CHECK-NEXT: adrp x8, _ptr@PAGE
559 ; CHECK-NEXT: str q0, [x0, #80]!
560 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
562 %newaddr = getelementptr <2 x double>, ptr %addr, i32 5
563 store <2 x double> %in, ptr %newaddr, align 8
564 store ptr %newaddr, ptr @ptr
568 define void @test_v2f64_post_store(<2 x double> %in, ptr %addr) {
569 ; CHECK-LABEL: test_v2f64_post_store:
571 ; CHECK-NEXT: adrp x8, _ptr@PAGE
572 ; CHECK-NEXT: str q0, [x0], #80
573 ; CHECK-NEXT: str x0, [x8, _ptr@PAGEOFF]
575 %newaddr = getelementptr <2 x double>, ptr %addr, i32 5
576 store <2 x double> %in, ptr %addr, align 8
577 store ptr %newaddr, ptr @ptr
581 define ptr @test_v16i8_post_imm_st1_lane(<16 x i8> %in, ptr %addr) {
582 ; CHECK-LABEL: test_v16i8_post_imm_st1_lane:
584 ; CHECK-NEXT: st1.b { v0 }[3], [x0], #1
586 %elt = extractelement <16 x i8> %in, i32 3
587 store i8 %elt, ptr %addr
589 %newaddr = getelementptr i8, ptr %addr, i32 1
593 define ptr @test_v16i8_post_reg_st1_lane(<16 x i8> %in, ptr %addr) {
594 ; CHECK-LABEL: test_v16i8_post_reg_st1_lane:
596 ; CHECK-NEXT: mov w8, #2 ; =0x2
597 ; CHECK-NEXT: st1.b { v0 }[3], [x0], x8
599 %elt = extractelement <16 x i8> %in, i32 3
600 store i8 %elt, ptr %addr
602 %newaddr = getelementptr i8, ptr %addr, i32 2
607 define ptr @test_v8i16_post_imm_st1_lane(<8 x i16> %in, ptr %addr) {
608 ; CHECK-LABEL: test_v8i16_post_imm_st1_lane:
610 ; CHECK-NEXT: st1.h { v0 }[3], [x0], #2
612 %elt = extractelement <8 x i16> %in, i32 3
613 store i16 %elt, ptr %addr
615 %newaddr = getelementptr i16, ptr %addr, i32 1
619 define ptr @test_v8i16_post_reg_st1_lane(<8 x i16> %in, ptr %addr) {
620 ; CHECK-LABEL: test_v8i16_post_reg_st1_lane:
622 ; CHECK-NEXT: mov w8, #4 ; =0x4
623 ; CHECK-NEXT: st1.h { v0 }[3], [x0], x8
625 %elt = extractelement <8 x i16> %in, i32 3
626 store i16 %elt, ptr %addr
628 %newaddr = getelementptr i16, ptr %addr, i32 2
632 define ptr @test_v4i32_post_imm_st1_lane(<4 x i32> %in, ptr %addr) {
633 ; CHECK-LABEL: test_v4i32_post_imm_st1_lane:
635 ; CHECK-NEXT: st1.s { v0 }[3], [x0], #4
637 %elt = extractelement <4 x i32> %in, i32 3
638 store i32 %elt, ptr %addr
640 %newaddr = getelementptr i32, ptr %addr, i32 1
644 define ptr @test_v4i32_post_reg_st1_lane(<4 x i32> %in, ptr %addr) {
645 ; CHECK-LABEL: test_v4i32_post_reg_st1_lane:
647 ; CHECK-NEXT: mov w8, #8 ; =0x8
648 ; CHECK-NEXT: st1.s { v0 }[3], [x0], x8
650 %elt = extractelement <4 x i32> %in, i32 3
651 store i32 %elt, ptr %addr
653 %newaddr = getelementptr i32, ptr %addr, i32 2
657 define ptr @test_v4f32_post_imm_st1_lane(<4 x float> %in, ptr %addr) {
658 ; CHECK-LABEL: test_v4f32_post_imm_st1_lane:
660 ; CHECK-NEXT: st1.s { v0 }[3], [x0], #4
662 %elt = extractelement <4 x float> %in, i32 3
663 store float %elt, ptr %addr
665 %newaddr = getelementptr float, ptr %addr, i32 1
669 define ptr @test_v4f32_post_reg_st1_lane(<4 x float> %in, ptr %addr) {
670 ; CHECK-LABEL: test_v4f32_post_reg_st1_lane:
672 ; CHECK-NEXT: mov w8, #8 ; =0x8
673 ; CHECK-NEXT: st1.s { v0 }[3], [x0], x8
675 %elt = extractelement <4 x float> %in, i32 3
676 store float %elt, ptr %addr
678 %newaddr = getelementptr float, ptr %addr, i32 2
682 define ptr @test_v2i64_post_imm_st1_lane(<2 x i64> %in, ptr %addr) {
683 ; CHECK-LABEL: test_v2i64_post_imm_st1_lane:
685 ; CHECK-NEXT: st1.d { v0 }[1], [x0], #8
687 %elt = extractelement <2 x i64> %in, i64 1
688 store i64 %elt, ptr %addr
690 %newaddr = getelementptr i64, ptr %addr, i64 1
694 define ptr @test_v2i64_post_reg_st1_lane(<2 x i64> %in, ptr %addr) {
695 ; CHECK-LABEL: test_v2i64_post_reg_st1_lane:
697 ; CHECK-NEXT: mov w8, #16 ; =0x10
698 ; CHECK-NEXT: st1.d { v0 }[1], [x0], x8
700 %elt = extractelement <2 x i64> %in, i64 1
701 store i64 %elt, ptr %addr
703 %newaddr = getelementptr i64, ptr %addr, i64 2
707 define ptr @test_v2f64_post_imm_st1_lane(<2 x double> %in, ptr %addr) {
708 ; CHECK-LABEL: test_v2f64_post_imm_st1_lane:
710 ; CHECK-NEXT: st1.d { v0 }[1], [x0], #8
712 %elt = extractelement <2 x double> %in, i32 1
713 store double %elt, ptr %addr
715 %newaddr = getelementptr double, ptr %addr, i32 1
719 define ptr @test_v2f64_post_reg_st1_lane(<2 x double> %in, ptr %addr) {
720 ; CHECK-LABEL: test_v2f64_post_reg_st1_lane:
722 ; CHECK-NEXT: mov w8, #16 ; =0x10
723 ; CHECK-NEXT: st1.d { v0 }[1], [x0], x8
725 %elt = extractelement <2 x double> %in, i32 1
726 store double %elt, ptr %addr
728 %newaddr = getelementptr double, ptr %addr, i32 2
732 define ptr @test_v8i8_post_imm_st1_lane(<8 x i8> %in, ptr %addr) {
733 ; CHECK-LABEL: test_v8i8_post_imm_st1_lane:
735 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
736 ; CHECK-NEXT: st1.b { v0 }[3], [x0], #1
738 %elt = extractelement <8 x i8> %in, i32 3
739 store i8 %elt, ptr %addr
741 %newaddr = getelementptr i8, ptr %addr, i32 1
745 define ptr @test_v8i8_post_reg_st1_lane(<8 x i8> %in, ptr %addr) {
746 ; CHECK-LABEL: test_v8i8_post_reg_st1_lane:
748 ; CHECK-NEXT: mov w8, #2 ; =0x2
749 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
750 ; CHECK-NEXT: st1.b { v0 }[3], [x0], x8
752 %elt = extractelement <8 x i8> %in, i32 3
753 store i8 %elt, ptr %addr
755 %newaddr = getelementptr i8, ptr %addr, i32 2
759 define ptr @test_v4i16_post_imm_st1_lane(<4 x i16> %in, ptr %addr) {
760 ; CHECK-LABEL: test_v4i16_post_imm_st1_lane:
762 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
763 ; CHECK-NEXT: st1.h { v0 }[3], [x0], #2
765 %elt = extractelement <4 x i16> %in, i32 3
766 store i16 %elt, ptr %addr
768 %newaddr = getelementptr i16, ptr %addr, i32 1
772 define ptr @test_v4i16_post_reg_st1_lane(<4 x i16> %in, ptr %addr) {
773 ; CHECK-LABEL: test_v4i16_post_reg_st1_lane:
775 ; CHECK-NEXT: mov w8, #4 ; =0x4
776 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
777 ; CHECK-NEXT: st1.h { v0 }[3], [x0], x8
779 %elt = extractelement <4 x i16> %in, i32 3
780 store i16 %elt, ptr %addr
782 %newaddr = getelementptr i16, ptr %addr, i32 2
786 define ptr @test_v2i32_post_imm_st1_lane(<2 x i32> %in, ptr %addr) {
787 ; CHECK-LABEL: test_v2i32_post_imm_st1_lane:
789 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
790 ; CHECK-NEXT: st1.s { v0 }[1], [x0], #4
792 %elt = extractelement <2 x i32> %in, i32 1
793 store i32 %elt, ptr %addr
795 %newaddr = getelementptr i32, ptr %addr, i32 1
799 define ptr @test_v2i32_post_reg_st1_lane(<2 x i32> %in, ptr %addr) {
800 ; CHECK-LABEL: test_v2i32_post_reg_st1_lane:
802 ; CHECK-NEXT: mov w8, #8 ; =0x8
803 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
804 ; CHECK-NEXT: st1.s { v0 }[1], [x0], x8
806 %elt = extractelement <2 x i32> %in, i32 1
807 store i32 %elt, ptr %addr
809 %newaddr = getelementptr i32, ptr %addr, i32 2
813 define ptr @test_v2f32_post_imm_st1_lane(<2 x float> %in, ptr %addr) {
814 ; CHECK-LABEL: test_v2f32_post_imm_st1_lane:
816 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
817 ; CHECK-NEXT: st1.s { v0 }[1], [x0], #4
819 %elt = extractelement <2 x float> %in, i32 1
820 store float %elt, ptr %addr
822 %newaddr = getelementptr float, ptr %addr, i32 1
826 define ptr @test_v2f32_post_reg_st1_lane(<2 x float> %in, ptr %addr) {
827 ; CHECK-LABEL: test_v2f32_post_reg_st1_lane:
829 ; CHECK-NEXT: mov w8, #8 ; =0x8
830 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
831 ; CHECK-NEXT: st1.s { v0 }[1], [x0], x8
833 %elt = extractelement <2 x float> %in, i32 1
834 store float %elt, ptr %addr
836 %newaddr = getelementptr float, ptr %addr, i32 2
840 define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld2(ptr %A, ptr %ptr) {
841 ; CHECK-LABEL: test_v16i8_post_imm_ld2:
843 ; CHECK-NEXT: ld2.16b { v0, v1 }, [x0], #32
844 ; CHECK-NEXT: str x0, [x1]
846 %ld2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2.v16i8.p0(ptr %A)
847 %tmp = getelementptr i8, ptr %A, i32 32
848 store ptr %tmp, ptr %ptr
849 ret { <16 x i8>, <16 x i8> } %ld2
852 define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
853 ; CHECK-LABEL: test_v16i8_post_reg_ld2:
855 ; CHECK-NEXT: ld2.16b { v0, v1 }, [x0], x2
856 ; CHECK-NEXT: str x0, [x1]
858 %ld2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2.v16i8.p0(ptr %A)
859 %tmp = getelementptr i8, ptr %A, i64 %inc
860 store ptr %tmp, ptr %ptr
861 ret { <16 x i8>, <16 x i8> } %ld2
864 declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2.v16i8.p0(ptr)
867 define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld2(ptr %A, ptr %ptr) {
868 ; CHECK-LABEL: test_v8i8_post_imm_ld2:
870 ; CHECK-NEXT: ld2.8b { v0, v1 }, [x0], #16
871 ; CHECK-NEXT: str x0, [x1]
873 %ld2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2.v8i8.p0(ptr %A)
874 %tmp = getelementptr i8, ptr %A, i32 16
875 store ptr %tmp, ptr %ptr
876 ret { <8 x i8>, <8 x i8> } %ld2
879 define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
880 ; CHECK-LABEL: test_v8i8_post_reg_ld2:
882 ; CHECK-NEXT: ld2.8b { v0, v1 }, [x0], x2
883 ; CHECK-NEXT: str x0, [x1]
885 %ld2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2.v8i8.p0(ptr %A)
886 %tmp = getelementptr i8, ptr %A, i64 %inc
887 store ptr %tmp, ptr %ptr
888 ret { <8 x i8>, <8 x i8> } %ld2
891 declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2.v8i8.p0(ptr)
894 define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld2(ptr %A, ptr %ptr) {
895 ; CHECK-LABEL: test_v8i16_post_imm_ld2:
897 ; CHECK-NEXT: ld2.8h { v0, v1 }, [x0], #32
898 ; CHECK-NEXT: str x0, [x1]
900 %ld2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2.v8i16.p0(ptr %A)
901 %tmp = getelementptr i16, ptr %A, i32 16
902 store ptr %tmp, ptr %ptr
903 ret { <8 x i16>, <8 x i16> } %ld2
906 define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
907 ; CHECK-LABEL: test_v8i16_post_reg_ld2:
909 ; CHECK-NEXT: lsl x8, x2, #1
910 ; CHECK-NEXT: ld2.8h { v0, v1 }, [x0], x8
911 ; CHECK-NEXT: str x0, [x1]
913 %ld2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2.v8i16.p0(ptr %A)
914 %tmp = getelementptr i16, ptr %A, i64 %inc
915 store ptr %tmp, ptr %ptr
916 ret { <8 x i16>, <8 x i16> } %ld2
919 declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2.v8i16.p0(ptr)
922 define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld2(ptr %A, ptr %ptr) {
923 ; CHECK-LABEL: test_v4i16_post_imm_ld2:
925 ; CHECK-NEXT: ld2.4h { v0, v1 }, [x0], #16
926 ; CHECK-NEXT: str x0, [x1]
928 %ld2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2.v4i16.p0(ptr %A)
929 %tmp = getelementptr i16, ptr %A, i32 8
930 store ptr %tmp, ptr %ptr
931 ret { <4 x i16>, <4 x i16> } %ld2
934 define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
935 ; CHECK-LABEL: test_v4i16_post_reg_ld2:
937 ; CHECK-NEXT: lsl x8, x2, #1
938 ; CHECK-NEXT: ld2.4h { v0, v1 }, [x0], x8
939 ; CHECK-NEXT: str x0, [x1]
941 %ld2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2.v4i16.p0(ptr %A)
942 %tmp = getelementptr i16, ptr %A, i64 %inc
943 store ptr %tmp, ptr %ptr
944 ret { <4 x i16>, <4 x i16> } %ld2
947 declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2.v4i16.p0(ptr)
950 define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld2(ptr %A, ptr %ptr) {
951 ; CHECK-LABEL: test_v4i32_post_imm_ld2:
953 ; CHECK-NEXT: ld2.4s { v0, v1 }, [x0], #32
954 ; CHECK-NEXT: str x0, [x1]
956 %ld2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0(ptr %A)
957 %tmp = getelementptr i32, ptr %A, i32 8
958 store ptr %tmp, ptr %ptr
959 ret { <4 x i32>, <4 x i32> } %ld2
962 define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
963 ; CHECK-LABEL: test_v4i32_post_reg_ld2:
965 ; CHECK-NEXT: lsl x8, x2, #2
966 ; CHECK-NEXT: ld2.4s { v0, v1 }, [x0], x8
967 ; CHECK-NEXT: str x0, [x1]
969 %ld2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0(ptr %A)
970 %tmp = getelementptr i32, ptr %A, i64 %inc
971 store ptr %tmp, ptr %ptr
972 ret { <4 x i32>, <4 x i32> } %ld2
975 declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0(ptr)
978 define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld2(ptr %A, ptr %ptr) {
979 ; CHECK-LABEL: test_v2i32_post_imm_ld2:
981 ; CHECK-NEXT: ld2.2s { v0, v1 }, [x0], #16
982 ; CHECK-NEXT: str x0, [x1]
984 %ld2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2.v2i32.p0(ptr %A)
985 %tmp = getelementptr i32, ptr %A, i32 4
986 store ptr %tmp, ptr %ptr
987 ret { <2 x i32>, <2 x i32> } %ld2
990 define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
991 ; CHECK-LABEL: test_v2i32_post_reg_ld2:
993 ; CHECK-NEXT: lsl x8, x2, #2
994 ; CHECK-NEXT: ld2.2s { v0, v1 }, [x0], x8
995 ; CHECK-NEXT: str x0, [x1]
997 %ld2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2.v2i32.p0(ptr %A)
998 %tmp = getelementptr i32, ptr %A, i64 %inc
999 store ptr %tmp, ptr %ptr
1000 ret { <2 x i32>, <2 x i32> } %ld2
1003 declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2.v2i32.p0(ptr)
1006 define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld2(ptr %A, ptr %ptr) {
1007 ; CHECK-LABEL: test_v2i64_post_imm_ld2:
1009 ; CHECK-NEXT: ld2.2d { v0, v1 }, [x0], #32
1010 ; CHECK-NEXT: str x0, [x1]
1012 %ld2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2.v2i64.p0(ptr %A)
1013 %tmp = getelementptr i64, ptr %A, i32 4
1014 store ptr %tmp, ptr %ptr
1015 ret { <2 x i64>, <2 x i64> } %ld2
1018 define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1019 ; CHECK-LABEL: test_v2i64_post_reg_ld2:
1021 ; CHECK-NEXT: lsl x8, x2, #3
1022 ; CHECK-NEXT: ld2.2d { v0, v1 }, [x0], x8
1023 ; CHECK-NEXT: str x0, [x1]
1025 %ld2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2.v2i64.p0(ptr %A)
1026 %tmp = getelementptr i64, ptr %A, i64 %inc
1027 store ptr %tmp, ptr %ptr
1028 ret { <2 x i64>, <2 x i64> } %ld2
1031 declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2.v2i64.p0(ptr)
1034 define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld2(ptr %A, ptr %ptr) {
1035 ; CHECK-LABEL: test_v1i64_post_imm_ld2:
1037 ; CHECK-NEXT: ld1.1d { v0, v1 }, [x0], #16
1038 ; CHECK-NEXT: str x0, [x1]
1040 %ld2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0(ptr %A)
1041 %tmp = getelementptr i64, ptr %A, i32 2
1042 store ptr %tmp, ptr %ptr
1043 ret { <1 x i64>, <1 x i64> } %ld2
1046 define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1047 ; CHECK-LABEL: test_v1i64_post_reg_ld2:
1049 ; CHECK-NEXT: lsl x8, x2, #3
1050 ; CHECK-NEXT: ld1.1d { v0, v1 }, [x0], x8
1051 ; CHECK-NEXT: str x0, [x1]
1053 %ld2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0(ptr %A)
1054 %tmp = getelementptr i64, ptr %A, i64 %inc
1055 store ptr %tmp, ptr %ptr
1056 ret { <1 x i64>, <1 x i64> } %ld2
1059 declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0(ptr)
1062 define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld2(ptr %A, ptr %ptr) {
1063 ; CHECK-LABEL: test_v4f32_post_imm_ld2:
1065 ; CHECK-NEXT: ld2.4s { v0, v1 }, [x0], #32
1066 ; CHECK-NEXT: str x0, [x1]
1068 %ld2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2.v4f32.p0(ptr %A)
1069 %tmp = getelementptr float, ptr %A, i32 8
1070 store ptr %tmp, ptr %ptr
1071 ret { <4 x float>, <4 x float> } %ld2
1074 define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1075 ; CHECK-LABEL: test_v4f32_post_reg_ld2:
1077 ; CHECK-NEXT: lsl x8, x2, #2
1078 ; CHECK-NEXT: ld2.4s { v0, v1 }, [x0], x8
1079 ; CHECK-NEXT: str x0, [x1]
1081 %ld2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2.v4f32.p0(ptr %A)
1082 %tmp = getelementptr float, ptr %A, i64 %inc
1083 store ptr %tmp, ptr %ptr
1084 ret { <4 x float>, <4 x float> } %ld2
1087 declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2.v4f32.p0(ptr)
1090 define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld2(ptr %A, ptr %ptr) {
1091 ; CHECK-LABEL: test_v2f32_post_imm_ld2:
1093 ; CHECK-NEXT: ld2.2s { v0, v1 }, [x0], #16
1094 ; CHECK-NEXT: str x0, [x1]
1096 %ld2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2.v2f32.p0(ptr %A)
1097 %tmp = getelementptr float, ptr %A, i32 4
1098 store ptr %tmp, ptr %ptr
1099 ret { <2 x float>, <2 x float> } %ld2
1102 define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1103 ; CHECK-LABEL: test_v2f32_post_reg_ld2:
1105 ; CHECK-NEXT: lsl x8, x2, #2
1106 ; CHECK-NEXT: ld2.2s { v0, v1 }, [x0], x8
1107 ; CHECK-NEXT: str x0, [x1]
1109 %ld2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2.v2f32.p0(ptr %A)
1110 %tmp = getelementptr float, ptr %A, i64 %inc
1111 store ptr %tmp, ptr %ptr
1112 ret { <2 x float>, <2 x float> } %ld2
1115 declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2.v2f32.p0(ptr)
1118 define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld2(ptr %A, ptr %ptr) {
1119 ; CHECK-LABEL: test_v2f64_post_imm_ld2:
1121 ; CHECK-NEXT: ld2.2d { v0, v1 }, [x0], #32
1122 ; CHECK-NEXT: str x0, [x1]
1124 %ld2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2.v2f64.p0(ptr %A)
1125 %tmp = getelementptr double, ptr %A, i32 4
1126 store ptr %tmp, ptr %ptr
1127 ret { <2 x double>, <2 x double> } %ld2
1130 define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1131 ; CHECK-LABEL: test_v2f64_post_reg_ld2:
1133 ; CHECK-NEXT: lsl x8, x2, #3
1134 ; CHECK-NEXT: ld2.2d { v0, v1 }, [x0], x8
1135 ; CHECK-NEXT: str x0, [x1]
1137 %ld2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2.v2f64.p0(ptr %A)
1138 %tmp = getelementptr double, ptr %A, i64 %inc
1139 store ptr %tmp, ptr %ptr
1140 ret { <2 x double>, <2 x double> } %ld2
1143 declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2.v2f64.p0(ptr)
1146 define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld2(ptr %A, ptr %ptr) {
1147 ; CHECK-LABEL: test_v1f64_post_imm_ld2:
1149 ; CHECK-NEXT: ld1.1d { v0, v1 }, [x0], #16
1150 ; CHECK-NEXT: str x0, [x1]
1152 %ld2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2.v1f64.p0(ptr %A)
1153 %tmp = getelementptr double, ptr %A, i32 2
1154 store ptr %tmp, ptr %ptr
1155 ret { <1 x double>, <1 x double> } %ld2
1158 define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld2(ptr %A, ptr %ptr, i64 %inc) {
1159 ; CHECK-LABEL: test_v1f64_post_reg_ld2:
1161 ; CHECK-NEXT: lsl x8, x2, #3
1162 ; CHECK-NEXT: ld1.1d { v0, v1 }, [x0], x8
1163 ; CHECK-NEXT: str x0, [x1]
1165 %ld2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2.v1f64.p0(ptr %A)
1166 %tmp = getelementptr double, ptr %A, i64 %inc
1167 store ptr %tmp, ptr %ptr
1168 ret { <1 x double>, <1 x double> } %ld2
1171 declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2.v1f64.p0(ptr)
1174 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld3(ptr %A, ptr %ptr) {
1175 ; CHECK-LABEL: test_v16i8_post_imm_ld3:
1177 ; CHECK-NEXT: ld3.16b { v0, v1, v2 }, [x0], #48
1178 ; CHECK-NEXT: str x0, [x1]
1180 %ld3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3.v16i8.p0(ptr %A)
1181 %tmp = getelementptr i8, ptr %A, i32 48
1182 store ptr %tmp, ptr %ptr
1183 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
1186 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1187 ; CHECK-LABEL: test_v16i8_post_reg_ld3:
1189 ; CHECK-NEXT: ld3.16b { v0, v1, v2 }, [x0], x2
1190 ; CHECK-NEXT: str x0, [x1]
1192 %ld3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3.v16i8.p0(ptr %A)
1193 %tmp = getelementptr i8, ptr %A, i64 %inc
1194 store ptr %tmp, ptr %ptr
1195 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
1198 declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3.v16i8.p0(ptr)
1201 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld3(ptr %A, ptr %ptr) {
1202 ; CHECK-LABEL: test_v8i8_post_imm_ld3:
1204 ; CHECK-NEXT: ld3.8b { v0, v1, v2 }, [x0], #24
1205 ; CHECK-NEXT: str x0, [x1]
1207 %ld3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3.v8i8.p0(ptr %A)
1208 %tmp = getelementptr i8, ptr %A, i32 24
1209 store ptr %tmp, ptr %ptr
1210 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
1213 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1214 ; CHECK-LABEL: test_v8i8_post_reg_ld3:
1216 ; CHECK-NEXT: ld3.8b { v0, v1, v2 }, [x0], x2
1217 ; CHECK-NEXT: str x0, [x1]
1219 %ld3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3.v8i8.p0(ptr %A)
1220 %tmp = getelementptr i8, ptr %A, i64 %inc
1221 store ptr %tmp, ptr %ptr
1222 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
1225 declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3.v8i8.p0(ptr)
1228 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld3(ptr %A, ptr %ptr) {
1229 ; CHECK-LABEL: test_v8i16_post_imm_ld3:
1231 ; CHECK-NEXT: ld3.8h { v0, v1, v2 }, [x0], #48
1232 ; CHECK-NEXT: str x0, [x1]
1234 %ld3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3.v8i16.p0(ptr %A)
1235 %tmp = getelementptr i16, ptr %A, i32 24
1236 store ptr %tmp, ptr %ptr
1237 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
1240 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1241 ; CHECK-LABEL: test_v8i16_post_reg_ld3:
1243 ; CHECK-NEXT: lsl x8, x2, #1
1244 ; CHECK-NEXT: ld3.8h { v0, v1, v2 }, [x0], x8
1245 ; CHECK-NEXT: str x0, [x1]
1247 %ld3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3.v8i16.p0(ptr %A)
1248 %tmp = getelementptr i16, ptr %A, i64 %inc
1249 store ptr %tmp, ptr %ptr
1250 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
1253 declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3.v8i16.p0(ptr)
1256 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld3(ptr %A, ptr %ptr) {
1257 ; CHECK-LABEL: test_v4i16_post_imm_ld3:
1259 ; CHECK-NEXT: ld3.4h { v0, v1, v2 }, [x0], #24
1260 ; CHECK-NEXT: str x0, [x1]
1262 %ld3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3.v4i16.p0(ptr %A)
1263 %tmp = getelementptr i16, ptr %A, i32 12
1264 store ptr %tmp, ptr %ptr
1265 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
1268 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1269 ; CHECK-LABEL: test_v4i16_post_reg_ld3:
1271 ; CHECK-NEXT: lsl x8, x2, #1
1272 ; CHECK-NEXT: ld3.4h { v0, v1, v2 }, [x0], x8
1273 ; CHECK-NEXT: str x0, [x1]
1275 %ld3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3.v4i16.p0(ptr %A)
1276 %tmp = getelementptr i16, ptr %A, i64 %inc
1277 store ptr %tmp, ptr %ptr
1278 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
1281 declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3.v4i16.p0(ptr)
1284 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld3(ptr %A, ptr %ptr) {
1285 ; CHECK-LABEL: test_v4i32_post_imm_ld3:
1287 ; CHECK-NEXT: ld3.4s { v0, v1, v2 }, [x0], #48
1288 ; CHECK-NEXT: str x0, [x1]
1290 %ld3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3.v4i32.p0(ptr %A)
1291 %tmp = getelementptr i32, ptr %A, i32 12
1292 store ptr %tmp, ptr %ptr
1293 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
1296 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1297 ; CHECK-LABEL: test_v4i32_post_reg_ld3:
1299 ; CHECK-NEXT: lsl x8, x2, #2
1300 ; CHECK-NEXT: ld3.4s { v0, v1, v2 }, [x0], x8
1301 ; CHECK-NEXT: str x0, [x1]
1303 %ld3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3.v4i32.p0(ptr %A)
1304 %tmp = getelementptr i32, ptr %A, i64 %inc
1305 store ptr %tmp, ptr %ptr
1306 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
1309 declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3.v4i32.p0(ptr)
1312 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld3(ptr %A, ptr %ptr) {
1313 ; CHECK-LABEL: test_v2i32_post_imm_ld3:
1315 ; CHECK-NEXT: ld3.2s { v0, v1, v2 }, [x0], #24
1316 ; CHECK-NEXT: str x0, [x1]
1318 %ld3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3.v2i32.p0(ptr %A)
1319 %tmp = getelementptr i32, ptr %A, i32 6
1320 store ptr %tmp, ptr %ptr
1321 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
1324 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1325 ; CHECK-LABEL: test_v2i32_post_reg_ld3:
1327 ; CHECK-NEXT: lsl x8, x2, #2
1328 ; CHECK-NEXT: ld3.2s { v0, v1, v2 }, [x0], x8
1329 ; CHECK-NEXT: str x0, [x1]
1331 %ld3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3.v2i32.p0(ptr %A)
1332 %tmp = getelementptr i32, ptr %A, i64 %inc
1333 store ptr %tmp, ptr %ptr
1334 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
1337 declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3.v2i32.p0(ptr)
1340 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld3(ptr %A, ptr %ptr) {
1341 ; CHECK-LABEL: test_v2i64_post_imm_ld3:
1343 ; CHECK-NEXT: ld3.2d { v0, v1, v2 }, [x0], #48
1344 ; CHECK-NEXT: str x0, [x1]
1346 %ld3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3.v2i64.p0(ptr %A)
1347 %tmp = getelementptr i64, ptr %A, i32 6
1348 store ptr %tmp, ptr %ptr
1349 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
1352 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1353 ; CHECK-LABEL: test_v2i64_post_reg_ld3:
1355 ; CHECK-NEXT: lsl x8, x2, #3
1356 ; CHECK-NEXT: ld3.2d { v0, v1, v2 }, [x0], x8
1357 ; CHECK-NEXT: str x0, [x1]
1359 %ld3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3.v2i64.p0(ptr %A)
1360 %tmp = getelementptr i64, ptr %A, i64 %inc
1361 store ptr %tmp, ptr %ptr
1362 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
1365 declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3.v2i64.p0(ptr)
1368 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld3(ptr %A, ptr %ptr) {
1369 ; CHECK-LABEL: test_v1i64_post_imm_ld3:
1371 ; CHECK-NEXT: ld1.1d { v0, v1, v2 }, [x0], #24
1372 ; CHECK-NEXT: str x0, [x1]
1374 %ld3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0(ptr %A)
1375 %tmp = getelementptr i64, ptr %A, i32 3
1376 store ptr %tmp, ptr %ptr
1377 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
1380 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1381 ; CHECK-LABEL: test_v1i64_post_reg_ld3:
1383 ; CHECK-NEXT: lsl x8, x2, #3
1384 ; CHECK-NEXT: ld1.1d { v0, v1, v2 }, [x0], x8
1385 ; CHECK-NEXT: str x0, [x1]
1387 %ld3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0(ptr %A)
1388 %tmp = getelementptr i64, ptr %A, i64 %inc
1389 store ptr %tmp, ptr %ptr
1390 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
1393 declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0(ptr)
1396 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld3(ptr %A, ptr %ptr) {
1397 ; CHECK-LABEL: test_v4f32_post_imm_ld3:
1399 ; CHECK-NEXT: ld3.4s { v0, v1, v2 }, [x0], #48
1400 ; CHECK-NEXT: str x0, [x1]
1402 %ld3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3.v4f32.p0(ptr %A)
1403 %tmp = getelementptr float, ptr %A, i32 12
1404 store ptr %tmp, ptr %ptr
1405 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
1408 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1409 ; CHECK-LABEL: test_v4f32_post_reg_ld3:
1411 ; CHECK-NEXT: lsl x8, x2, #2
1412 ; CHECK-NEXT: ld3.4s { v0, v1, v2 }, [x0], x8
1413 ; CHECK-NEXT: str x0, [x1]
1415 %ld3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3.v4f32.p0(ptr %A)
1416 %tmp = getelementptr float, ptr %A, i64 %inc
1417 store ptr %tmp, ptr %ptr
1418 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
1421 declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3.v4f32.p0(ptr)
1424 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld3(ptr %A, ptr %ptr) {
1425 ; CHECK-LABEL: test_v2f32_post_imm_ld3:
1427 ; CHECK-NEXT: ld3.2s { v0, v1, v2 }, [x0], #24
1428 ; CHECK-NEXT: str x0, [x1]
1430 %ld3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3.v2f32.p0(ptr %A)
1431 %tmp = getelementptr float, ptr %A, i32 6
1432 store ptr %tmp, ptr %ptr
1433 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
1436 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1437 ; CHECK-LABEL: test_v2f32_post_reg_ld3:
1439 ; CHECK-NEXT: lsl x8, x2, #2
1440 ; CHECK-NEXT: ld3.2s { v0, v1, v2 }, [x0], x8
1441 ; CHECK-NEXT: str x0, [x1]
1443 %ld3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3.v2f32.p0(ptr %A)
1444 %tmp = getelementptr float, ptr %A, i64 %inc
1445 store ptr %tmp, ptr %ptr
1446 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
1449 declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3.v2f32.p0(ptr)
1452 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld3(ptr %A, ptr %ptr) {
1453 ; CHECK-LABEL: test_v2f64_post_imm_ld3:
1455 ; CHECK-NEXT: ld3.2d { v0, v1, v2 }, [x0], #48
1456 ; CHECK-NEXT: str x0, [x1]
1458 %ld3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3.v2f64.p0(ptr %A)
1459 %tmp = getelementptr double, ptr %A, i32 6
1460 store ptr %tmp, ptr %ptr
1461 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
1464 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1465 ; CHECK-LABEL: test_v2f64_post_reg_ld3:
1467 ; CHECK-NEXT: lsl x8, x2, #3
1468 ; CHECK-NEXT: ld3.2d { v0, v1, v2 }, [x0], x8
1469 ; CHECK-NEXT: str x0, [x1]
1471 %ld3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3.v2f64.p0(ptr %A)
1472 %tmp = getelementptr double, ptr %A, i64 %inc
1473 store ptr %tmp, ptr %ptr
1474 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
1477 declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3.v2f64.p0(ptr)
1480 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld3(ptr %A, ptr %ptr) {
1481 ; CHECK-LABEL: test_v1f64_post_imm_ld3:
1483 ; CHECK-NEXT: ld1.1d { v0, v1, v2 }, [x0], #24
1484 ; CHECK-NEXT: str x0, [x1]
1486 %ld3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3.v1f64.p0(ptr %A)
1487 %tmp = getelementptr double, ptr %A, i32 3
1488 store ptr %tmp, ptr %ptr
1489 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
1492 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld3(ptr %A, ptr %ptr, i64 %inc) {
1493 ; CHECK-LABEL: test_v1f64_post_reg_ld3:
1495 ; CHECK-NEXT: lsl x8, x2, #3
1496 ; CHECK-NEXT: ld1.1d { v0, v1, v2 }, [x0], x8
1497 ; CHECK-NEXT: str x0, [x1]
1499 %ld3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3.v1f64.p0(ptr %A)
1500 %tmp = getelementptr double, ptr %A, i64 %inc
1501 store ptr %tmp, ptr %ptr
1502 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
1505 declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3.v1f64.p0(ptr)
1508 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld4(ptr %A, ptr %ptr) {
1509 ; CHECK-LABEL: test_v16i8_post_imm_ld4:
1511 ; CHECK-NEXT: ld4.16b { v0, v1, v2, v3 }, [x0], #64
1512 ; CHECK-NEXT: str x0, [x1]
1514 %ld4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4.v16i8.p0(ptr %A)
1515 %tmp = getelementptr i8, ptr %A, i32 64
1516 store ptr %tmp, ptr %ptr
1517 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
1520 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1521 ; CHECK-LABEL: test_v16i8_post_reg_ld4:
1523 ; CHECK-NEXT: ld4.16b { v0, v1, v2, v3 }, [x0], x2
1524 ; CHECK-NEXT: str x0, [x1]
1526 %ld4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4.v16i8.p0(ptr %A)
1527 %tmp = getelementptr i8, ptr %A, i64 %inc
1528 store ptr %tmp, ptr %ptr
1529 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
1532 declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4.v16i8.p0(ptr)
1535 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld4(ptr %A, ptr %ptr) {
1536 ; CHECK-LABEL: test_v8i8_post_imm_ld4:
1538 ; CHECK-NEXT: ld4.8b { v0, v1, v2, v3 }, [x0], #32
1539 ; CHECK-NEXT: str x0, [x1]
1541 %ld4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr %A)
1542 %tmp = getelementptr i8, ptr %A, i32 32
1543 store ptr %tmp, ptr %ptr
1544 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
1547 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1548 ; CHECK-LABEL: test_v8i8_post_reg_ld4:
1550 ; CHECK-NEXT: ld4.8b { v0, v1, v2, v3 }, [x0], x2
1551 ; CHECK-NEXT: str x0, [x1]
1553 %ld4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr %A)
1554 %tmp = getelementptr i8, ptr %A, i64 %inc
1555 store ptr %tmp, ptr %ptr
1556 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
1559 declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr)
1562 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld4(ptr %A, ptr %ptr) {
1563 ; CHECK-LABEL: test_v8i16_post_imm_ld4:
1565 ; CHECK-NEXT: ld4.8h { v0, v1, v2, v3 }, [x0], #64
1566 ; CHECK-NEXT: str x0, [x1]
1568 %ld4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4.v8i16.p0(ptr %A)
1569 %tmp = getelementptr i16, ptr %A, i32 32
1570 store ptr %tmp, ptr %ptr
1571 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
1574 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1575 ; CHECK-LABEL: test_v8i16_post_reg_ld4:
1577 ; CHECK-NEXT: lsl x8, x2, #1
1578 ; CHECK-NEXT: ld4.8h { v0, v1, v2, v3 }, [x0], x8
1579 ; CHECK-NEXT: str x0, [x1]
1581 %ld4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4.v8i16.p0(ptr %A)
1582 %tmp = getelementptr i16, ptr %A, i64 %inc
1583 store ptr %tmp, ptr %ptr
1584 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
1587 declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4.v8i16.p0(ptr)
1590 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld4(ptr %A, ptr %ptr) {
1591 ; CHECK-LABEL: test_v4i16_post_imm_ld4:
1593 ; CHECK-NEXT: ld4.4h { v0, v1, v2, v3 }, [x0], #32
1594 ; CHECK-NEXT: str x0, [x1]
1596 %ld4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4.v4i16.p0(ptr %A)
1597 %tmp = getelementptr i16, ptr %A, i32 16
1598 store ptr %tmp, ptr %ptr
1599 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
1602 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1603 ; CHECK-LABEL: test_v4i16_post_reg_ld4:
1605 ; CHECK-NEXT: lsl x8, x2, #1
1606 ; CHECK-NEXT: ld4.4h { v0, v1, v2, v3 }, [x0], x8
1607 ; CHECK-NEXT: str x0, [x1]
1609 %ld4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4.v4i16.p0(ptr %A)
1610 %tmp = getelementptr i16, ptr %A, i64 %inc
1611 store ptr %tmp, ptr %ptr
1612 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
1615 declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4.v4i16.p0(ptr)
1618 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld4(ptr %A, ptr %ptr) {
1619 ; CHECK-LABEL: test_v4i32_post_imm_ld4:
1621 ; CHECK-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0], #64
1622 ; CHECK-NEXT: str x0, [x1]
1624 %ld4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4.v4i32.p0(ptr %A)
1625 %tmp = getelementptr i32, ptr %A, i32 16
1626 store ptr %tmp, ptr %ptr
1627 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
1630 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1631 ; CHECK-LABEL: test_v4i32_post_reg_ld4:
1633 ; CHECK-NEXT: lsl x8, x2, #2
1634 ; CHECK-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0], x8
1635 ; CHECK-NEXT: str x0, [x1]
1637 %ld4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4.v4i32.p0(ptr %A)
1638 %tmp = getelementptr i32, ptr %A, i64 %inc
1639 store ptr %tmp, ptr %ptr
1640 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
1643 declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4.v4i32.p0(ptr)
1646 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld4(ptr %A, ptr %ptr) {
1647 ; CHECK-LABEL: test_v2i32_post_imm_ld4:
1649 ; CHECK-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0], #32
1650 ; CHECK-NEXT: str x0, [x1]
1652 %ld4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4.v2i32.p0(ptr %A)
1653 %tmp = getelementptr i32, ptr %A, i32 8
1654 store ptr %tmp, ptr %ptr
1655 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
1658 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1659 ; CHECK-LABEL: test_v2i32_post_reg_ld4:
1661 ; CHECK-NEXT: lsl x8, x2, #2
1662 ; CHECK-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0], x8
1663 ; CHECK-NEXT: str x0, [x1]
1665 %ld4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4.v2i32.p0(ptr %A)
1666 %tmp = getelementptr i32, ptr %A, i64 %inc
1667 store ptr %tmp, ptr %ptr
1668 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
1671 declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4.v2i32.p0(ptr)
1674 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld4(ptr %A, ptr %ptr) {
1675 ; CHECK-LABEL: test_v2i64_post_imm_ld4:
1677 ; CHECK-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0], #64
1678 ; CHECK-NEXT: str x0, [x1]
1680 %ld4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4.v2i64.p0(ptr %A)
1681 %tmp = getelementptr i64, ptr %A, i32 8
1682 store ptr %tmp, ptr %ptr
1683 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
1686 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1687 ; CHECK-LABEL: test_v2i64_post_reg_ld4:
1689 ; CHECK-NEXT: lsl x8, x2, #3
1690 ; CHECK-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0], x8
1691 ; CHECK-NEXT: str x0, [x1]
1693 %ld4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4.v2i64.p0(ptr %A)
1694 %tmp = getelementptr i64, ptr %A, i64 %inc
1695 store ptr %tmp, ptr %ptr
1696 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
1699 declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4.v2i64.p0(ptr)
1702 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld4(ptr %A, ptr %ptr) {
1703 ; CHECK-LABEL: test_v1i64_post_imm_ld4:
1705 ; CHECK-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], #32
1706 ; CHECK-NEXT: str x0, [x1]
1708 %ld4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0(ptr %A)
1709 %tmp = getelementptr i64, ptr %A, i32 4
1710 store ptr %tmp, ptr %ptr
1711 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
1714 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1715 ; CHECK-LABEL: test_v1i64_post_reg_ld4:
1717 ; CHECK-NEXT: lsl x8, x2, #3
1718 ; CHECK-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], x8
1719 ; CHECK-NEXT: str x0, [x1]
1721 %ld4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0(ptr %A)
1722 %tmp = getelementptr i64, ptr %A, i64 %inc
1723 store ptr %tmp, ptr %ptr
1724 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
1727 declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0(ptr)
1730 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld4(ptr %A, ptr %ptr) {
1731 ; CHECK-LABEL: test_v4f32_post_imm_ld4:
1733 ; CHECK-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0], #64
1734 ; CHECK-NEXT: str x0, [x1]
1736 %ld4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4.v4f32.p0(ptr %A)
1737 %tmp = getelementptr float, ptr %A, i32 16
1738 store ptr %tmp, ptr %ptr
1739 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
1742 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1743 ; CHECK-LABEL: test_v4f32_post_reg_ld4:
1745 ; CHECK-NEXT: lsl x8, x2, #2
1746 ; CHECK-NEXT: ld4.4s { v0, v1, v2, v3 }, [x0], x8
1747 ; CHECK-NEXT: str x0, [x1]
1749 %ld4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4.v4f32.p0(ptr %A)
1750 %tmp = getelementptr float, ptr %A, i64 %inc
1751 store ptr %tmp, ptr %ptr
1752 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
1755 declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4.v4f32.p0(ptr)
1758 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld4(ptr %A, ptr %ptr) {
1759 ; CHECK-LABEL: test_v2f32_post_imm_ld4:
1761 ; CHECK-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0], #32
1762 ; CHECK-NEXT: str x0, [x1]
1764 %ld4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4.v2f32.p0(ptr %A)
1765 %tmp = getelementptr float, ptr %A, i32 8
1766 store ptr %tmp, ptr %ptr
1767 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
1770 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1771 ; CHECK-LABEL: test_v2f32_post_reg_ld4:
1773 ; CHECK-NEXT: lsl x8, x2, #2
1774 ; CHECK-NEXT: ld4.2s { v0, v1, v2, v3 }, [x0], x8
1775 ; CHECK-NEXT: str x0, [x1]
1777 %ld4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4.v2f32.p0(ptr %A)
1778 %tmp = getelementptr float, ptr %A, i64 %inc
1779 store ptr %tmp, ptr %ptr
1780 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
1783 declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4.v2f32.p0(ptr)
1786 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld4(ptr %A, ptr %ptr) {
1787 ; CHECK-LABEL: test_v2f64_post_imm_ld4:
1789 ; CHECK-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0], #64
1790 ; CHECK-NEXT: str x0, [x1]
1792 %ld4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4.v2f64.p0(ptr %A)
1793 %tmp = getelementptr double, ptr %A, i32 8
1794 store ptr %tmp, ptr %ptr
1795 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
1798 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1799 ; CHECK-LABEL: test_v2f64_post_reg_ld4:
1801 ; CHECK-NEXT: lsl x8, x2, #3
1802 ; CHECK-NEXT: ld4.2d { v0, v1, v2, v3 }, [x0], x8
1803 ; CHECK-NEXT: str x0, [x1]
1805 %ld4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4.v2f64.p0(ptr %A)
1806 %tmp = getelementptr double, ptr %A, i64 %inc
1807 store ptr %tmp, ptr %ptr
1808 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
1811 declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4.v2f64.p0(ptr)
1814 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld4(ptr %A, ptr %ptr) {
1815 ; CHECK-LABEL: test_v1f64_post_imm_ld4:
1817 ; CHECK-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], #32
1818 ; CHECK-NEXT: str x0, [x1]
1820 %ld4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4.v1f64.p0(ptr %A)
1821 %tmp = getelementptr double, ptr %A, i32 4
1822 store ptr %tmp, ptr %ptr
1823 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
1826 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld4(ptr %A, ptr %ptr, i64 %inc) {
1827 ; CHECK-LABEL: test_v1f64_post_reg_ld4:
1829 ; CHECK-NEXT: lsl x8, x2, #3
1830 ; CHECK-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], x8
1831 ; CHECK-NEXT: str x0, [x1]
1833 %ld4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4.v1f64.p0(ptr %A)
1834 %tmp = getelementptr double, ptr %A, i64 %inc
1835 store ptr %tmp, ptr %ptr
1836 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
1839 declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4.v1f64.p0(ptr)
1841 define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld1x2(ptr %A, ptr %ptr) {
1842 ; CHECK-LABEL: test_v16i8_post_imm_ld1x2:
1844 ; CHECK-NEXT: ld1.16b { v0, v1 }, [x0], #32
1845 ; CHECK-NEXT: str x0, [x1]
1847 %ld1x2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr %A)
1848 %tmp = getelementptr i8, ptr %A, i32 32
1849 store ptr %tmp, ptr %ptr
1850 ret { <16 x i8>, <16 x i8> } %ld1x2
1853 define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
1854 ; CHECK-LABEL: test_v16i8_post_reg_ld1x2:
1856 ; CHECK-NEXT: ld1.16b { v0, v1 }, [x0], x2
1857 ; CHECK-NEXT: str x0, [x1]
1859 %ld1x2 = tail call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr %A)
1860 %tmp = getelementptr i8, ptr %A, i64 %inc
1861 store ptr %tmp, ptr %ptr
1862 ret { <16 x i8>, <16 x i8> } %ld1x2
1865 declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr)
1868 define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld1x2(ptr %A, ptr %ptr) {
1869 ; CHECK-LABEL: test_v8i8_post_imm_ld1x2:
1871 ; CHECK-NEXT: ld1.8b { v0, v1 }, [x0], #16
1872 ; CHECK-NEXT: str x0, [x1]
1874 %ld1x2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr %A)
1875 %tmp = getelementptr i8, ptr %A, i32 16
1876 store ptr %tmp, ptr %ptr
1877 ret { <8 x i8>, <8 x i8> } %ld1x2
1880 define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
1881 ; CHECK-LABEL: test_v8i8_post_reg_ld1x2:
1883 ; CHECK-NEXT: ld1.8b { v0, v1 }, [x0], x2
1884 ; CHECK-NEXT: str x0, [x1]
1886 %ld1x2 = tail call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr %A)
1887 %tmp = getelementptr i8, ptr %A, i64 %inc
1888 store ptr %tmp, ptr %ptr
1889 ret { <8 x i8>, <8 x i8> } %ld1x2
1892 declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr)
1895 define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld1x2(ptr %A, ptr %ptr) {
1896 ; CHECK-LABEL: test_v8i16_post_imm_ld1x2:
1898 ; CHECK-NEXT: ld1.8h { v0, v1 }, [x0], #32
1899 ; CHECK-NEXT: str x0, [x1]
1901 %ld1x2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr %A)
1902 %tmp = getelementptr i16, ptr %A, i32 16
1903 store ptr %tmp, ptr %ptr
1904 ret { <8 x i16>, <8 x i16> } %ld1x2
1907 define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
1908 ; CHECK-LABEL: test_v8i16_post_reg_ld1x2:
1910 ; CHECK-NEXT: lsl x8, x2, #1
1911 ; CHECK-NEXT: ld1.8h { v0, v1 }, [x0], x8
1912 ; CHECK-NEXT: str x0, [x1]
1914 %ld1x2 = tail call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr %A)
1915 %tmp = getelementptr i16, ptr %A, i64 %inc
1916 store ptr %tmp, ptr %ptr
1917 ret { <8 x i16>, <8 x i16> } %ld1x2
1920 declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr)
1923 define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld1x2(ptr %A, ptr %ptr) {
1924 ; CHECK-LABEL: test_v4i16_post_imm_ld1x2:
1926 ; CHECK-NEXT: ld1.4h { v0, v1 }, [x0], #16
1927 ; CHECK-NEXT: str x0, [x1]
1929 %ld1x2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr %A)
1930 %tmp = getelementptr i16, ptr %A, i32 8
1931 store ptr %tmp, ptr %ptr
1932 ret { <4 x i16>, <4 x i16> } %ld1x2
1935 define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
1936 ; CHECK-LABEL: test_v4i16_post_reg_ld1x2:
1938 ; CHECK-NEXT: lsl x8, x2, #1
1939 ; CHECK-NEXT: ld1.4h { v0, v1 }, [x0], x8
1940 ; CHECK-NEXT: str x0, [x1]
1942 %ld1x2 = tail call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr %A)
1943 %tmp = getelementptr i16, ptr %A, i64 %inc
1944 store ptr %tmp, ptr %ptr
1945 ret { <4 x i16>, <4 x i16> } %ld1x2
1948 declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr)
1951 define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld1x2(ptr %A, ptr %ptr) {
1952 ; CHECK-LABEL: test_v4i32_post_imm_ld1x2:
1954 ; CHECK-NEXT: ld1.4s { v0, v1 }, [x0], #32
1955 ; CHECK-NEXT: str x0, [x1]
1957 %ld1x2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr %A)
1958 %tmp = getelementptr i32, ptr %A, i32 8
1959 store ptr %tmp, ptr %ptr
1960 ret { <4 x i32>, <4 x i32> } %ld1x2
1963 define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
1964 ; CHECK-LABEL: test_v4i32_post_reg_ld1x2:
1966 ; CHECK-NEXT: lsl x8, x2, #2
1967 ; CHECK-NEXT: ld1.4s { v0, v1 }, [x0], x8
1968 ; CHECK-NEXT: str x0, [x1]
1970 %ld1x2 = tail call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr %A)
1971 %tmp = getelementptr i32, ptr %A, i64 %inc
1972 store ptr %tmp, ptr %ptr
1973 ret { <4 x i32>, <4 x i32> } %ld1x2
1976 declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr)
1979 define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld1x2(ptr %A, ptr %ptr) {
1980 ; CHECK-LABEL: test_v2i32_post_imm_ld1x2:
1982 ; CHECK-NEXT: ld1.2s { v0, v1 }, [x0], #16
1983 ; CHECK-NEXT: str x0, [x1]
1985 %ld1x2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr %A)
1986 %tmp = getelementptr i32, ptr %A, i32 4
1987 store ptr %tmp, ptr %ptr
1988 ret { <2 x i32>, <2 x i32> } %ld1x2
1991 define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
1992 ; CHECK-LABEL: test_v2i32_post_reg_ld1x2:
1994 ; CHECK-NEXT: lsl x8, x2, #2
1995 ; CHECK-NEXT: ld1.2s { v0, v1 }, [x0], x8
1996 ; CHECK-NEXT: str x0, [x1]
1998 %ld1x2 = tail call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr %A)
1999 %tmp = getelementptr i32, ptr %A, i64 %inc
2000 store ptr %tmp, ptr %ptr
2001 ret { <2 x i32>, <2 x i32> } %ld1x2
2004 declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr)
2007 define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld1x2(ptr %A, ptr %ptr) {
2008 ; CHECK-LABEL: test_v2i64_post_imm_ld1x2:
2010 ; CHECK-NEXT: ld1.2d { v0, v1 }, [x0], #32
2011 ; CHECK-NEXT: str x0, [x1]
2013 %ld1x2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr %A)
2014 %tmp = getelementptr i64, ptr %A, i32 4
2015 store ptr %tmp, ptr %ptr
2016 ret { <2 x i64>, <2 x i64> } %ld1x2
2019 define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
2020 ; CHECK-LABEL: test_v2i64_post_reg_ld1x2:
2022 ; CHECK-NEXT: lsl x8, x2, #3
2023 ; CHECK-NEXT: ld1.2d { v0, v1 }, [x0], x8
2024 ; CHECK-NEXT: str x0, [x1]
2026 %ld1x2 = tail call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr %A)
2027 %tmp = getelementptr i64, ptr %A, i64 %inc
2028 store ptr %tmp, ptr %ptr
2029 ret { <2 x i64>, <2 x i64> } %ld1x2
2032 declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr)
2035 define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld1x2(ptr %A, ptr %ptr) {
2036 ; CHECK-LABEL: test_v1i64_post_imm_ld1x2:
2038 ; CHECK-NEXT: ld1.1d { v0, v1 }, [x0], #16
2039 ; CHECK-NEXT: str x0, [x1]
2041 %ld1x2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr %A)
2042 %tmp = getelementptr i64, ptr %A, i32 2
2043 store ptr %tmp, ptr %ptr
2044 ret { <1 x i64>, <1 x i64> } %ld1x2
2047 define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
2048 ; CHECK-LABEL: test_v1i64_post_reg_ld1x2:
2050 ; CHECK-NEXT: lsl x8, x2, #3
2051 ; CHECK-NEXT: ld1.1d { v0, v1 }, [x0], x8
2052 ; CHECK-NEXT: str x0, [x1]
2054 %ld1x2 = tail call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr %A)
2055 %tmp = getelementptr i64, ptr %A, i64 %inc
2056 store ptr %tmp, ptr %ptr
2057 ret { <1 x i64>, <1 x i64> } %ld1x2
2060 declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr)
2063 define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld1x2(ptr %A, ptr %ptr) {
2064 ; CHECK-LABEL: test_v4f32_post_imm_ld1x2:
2066 ; CHECK-NEXT: ld1.4s { v0, v1 }, [x0], #32
2067 ; CHECK-NEXT: str x0, [x1]
2069 %ld1x2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x2.v4f32.p0(ptr %A)
2070 %tmp = getelementptr float, ptr %A, i32 8
2071 store ptr %tmp, ptr %ptr
2072 ret { <4 x float>, <4 x float> } %ld1x2
2075 define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
2076 ; CHECK-LABEL: test_v4f32_post_reg_ld1x2:
2078 ; CHECK-NEXT: lsl x8, x2, #2
2079 ; CHECK-NEXT: ld1.4s { v0, v1 }, [x0], x8
2080 ; CHECK-NEXT: str x0, [x1]
2082 %ld1x2 = tail call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x2.v4f32.p0(ptr %A)
2083 %tmp = getelementptr float, ptr %A, i64 %inc
2084 store ptr %tmp, ptr %ptr
2085 ret { <4 x float>, <4 x float> } %ld1x2
2088 declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x2.v4f32.p0(ptr)
2091 define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld1x2(ptr %A, ptr %ptr) {
2092 ; CHECK-LABEL: test_v2f32_post_imm_ld1x2:
2094 ; CHECK-NEXT: ld1.2s { v0, v1 }, [x0], #16
2095 ; CHECK-NEXT: str x0, [x1]
2097 %ld1x2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x2.v2f32.p0(ptr %A)
2098 %tmp = getelementptr float, ptr %A, i32 4
2099 store ptr %tmp, ptr %ptr
2100 ret { <2 x float>, <2 x float> } %ld1x2
2103 define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
2104 ; CHECK-LABEL: test_v2f32_post_reg_ld1x2:
2106 ; CHECK-NEXT: lsl x8, x2, #2
2107 ; CHECK-NEXT: ld1.2s { v0, v1 }, [x0], x8
2108 ; CHECK-NEXT: str x0, [x1]
2110 %ld1x2 = tail call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x2.v2f32.p0(ptr %A)
2111 %tmp = getelementptr float, ptr %A, i64 %inc
2112 store ptr %tmp, ptr %ptr
2113 ret { <2 x float>, <2 x float> } %ld1x2
2116 declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x2.v2f32.p0(ptr)
2119 define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld1x2(ptr %A, ptr %ptr) {
2120 ; CHECK-LABEL: test_v2f64_post_imm_ld1x2:
2122 ; CHECK-NEXT: ld1.2d { v0, v1 }, [x0], #32
2123 ; CHECK-NEXT: str x0, [x1]
2125 %ld1x2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x2.v2f64.p0(ptr %A)
2126 %tmp = getelementptr double, ptr %A, i32 4
2127 store ptr %tmp, ptr %ptr
2128 ret { <2 x double>, <2 x double> } %ld1x2
2131 define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
2132 ; CHECK-LABEL: test_v2f64_post_reg_ld1x2:
2134 ; CHECK-NEXT: lsl x8, x2, #3
2135 ; CHECK-NEXT: ld1.2d { v0, v1 }, [x0], x8
2136 ; CHECK-NEXT: str x0, [x1]
2138 %ld1x2 = tail call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x2.v2f64.p0(ptr %A)
2139 %tmp = getelementptr double, ptr %A, i64 %inc
2140 store ptr %tmp, ptr %ptr
2141 ret { <2 x double>, <2 x double> } %ld1x2
2144 declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x2.v2f64.p0(ptr)
2147 define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld1x2(ptr %A, ptr %ptr) {
2148 ; CHECK-LABEL: test_v1f64_post_imm_ld1x2:
2150 ; CHECK-NEXT: ld1.1d { v0, v1 }, [x0], #16
2151 ; CHECK-NEXT: str x0, [x1]
2153 %ld1x2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x2.v1f64.p0(ptr %A)
2154 %tmp = getelementptr double, ptr %A, i32 2
2155 store ptr %tmp, ptr %ptr
2156 ret { <1 x double>, <1 x double> } %ld1x2
2159 define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld1x2(ptr %A, ptr %ptr, i64 %inc) {
2160 ; CHECK-LABEL: test_v1f64_post_reg_ld1x2:
2162 ; CHECK-NEXT: lsl x8, x2, #3
2163 ; CHECK-NEXT: ld1.1d { v0, v1 }, [x0], x8
2164 ; CHECK-NEXT: str x0, [x1]
2166 %ld1x2 = tail call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x2.v1f64.p0(ptr %A)
2167 %tmp = getelementptr double, ptr %A, i64 %inc
2168 store ptr %tmp, ptr %ptr
2169 ret { <1 x double>, <1 x double> } %ld1x2
2172 declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x2.v1f64.p0(ptr)
2175 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld1x3(ptr %A, ptr %ptr) {
2176 ; CHECK-LABEL: test_v16i8_post_imm_ld1x3:
2178 ; CHECK-NEXT: ld1.16b { v0, v1, v2 }, [x0], #48
2179 ; CHECK-NEXT: str x0, [x1]
2181 %ld1x3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr %A)
2182 %tmp = getelementptr i8, ptr %A, i32 48
2183 store ptr %tmp, ptr %ptr
2184 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld1x3
2187 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2188 ; CHECK-LABEL: test_v16i8_post_reg_ld1x3:
2190 ; CHECK-NEXT: ld1.16b { v0, v1, v2 }, [x0], x2
2191 ; CHECK-NEXT: str x0, [x1]
2193 %ld1x3 = tail call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr %A)
2194 %tmp = getelementptr i8, ptr %A, i64 %inc
2195 store ptr %tmp, ptr %ptr
2196 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld1x3
2199 declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr)
2202 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld1x3(ptr %A, ptr %ptr) {
2203 ; CHECK-LABEL: test_v8i8_post_imm_ld1x3:
2205 ; CHECK-NEXT: ld1.8b { v0, v1, v2 }, [x0], #24
2206 ; CHECK-NEXT: str x0, [x1]
2208 %ld1x3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr %A)
2209 %tmp = getelementptr i8, ptr %A, i32 24
2210 store ptr %tmp, ptr %ptr
2211 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld1x3
2214 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2215 ; CHECK-LABEL: test_v8i8_post_reg_ld1x3:
2217 ; CHECK-NEXT: ld1.8b { v0, v1, v2 }, [x0], x2
2218 ; CHECK-NEXT: str x0, [x1]
2220 %ld1x3 = tail call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr %A)
2221 %tmp = getelementptr i8, ptr %A, i64 %inc
2222 store ptr %tmp, ptr %ptr
2223 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld1x3
2226 declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr)
2229 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld1x3(ptr %A, ptr %ptr) {
2230 ; CHECK-LABEL: test_v8i16_post_imm_ld1x3:
2232 ; CHECK-NEXT: ld1.8h { v0, v1, v2 }, [x0], #48
2233 ; CHECK-NEXT: str x0, [x1]
2235 %ld1x3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr %A)
2236 %tmp = getelementptr i16, ptr %A, i32 24
2237 store ptr %tmp, ptr %ptr
2238 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld1x3
2241 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2242 ; CHECK-LABEL: test_v8i16_post_reg_ld1x3:
2244 ; CHECK-NEXT: lsl x8, x2, #1
2245 ; CHECK-NEXT: ld1.8h { v0, v1, v2 }, [x0], x8
2246 ; CHECK-NEXT: str x0, [x1]
2248 %ld1x3 = tail call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr %A)
2249 %tmp = getelementptr i16, ptr %A, i64 %inc
2250 store ptr %tmp, ptr %ptr
2251 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld1x3
2254 declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr)
2257 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld1x3(ptr %A, ptr %ptr) {
2258 ; CHECK-LABEL: test_v4i16_post_imm_ld1x3:
2260 ; CHECK-NEXT: ld1.4h { v0, v1, v2 }, [x0], #24
2261 ; CHECK-NEXT: str x0, [x1]
2263 %ld1x3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr %A)
2264 %tmp = getelementptr i16, ptr %A, i32 12
2265 store ptr %tmp, ptr %ptr
2266 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld1x3
2269 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2270 ; CHECK-LABEL: test_v4i16_post_reg_ld1x3:
2272 ; CHECK-NEXT: lsl x8, x2, #1
2273 ; CHECK-NEXT: ld1.4h { v0, v1, v2 }, [x0], x8
2274 ; CHECK-NEXT: str x0, [x1]
2276 %ld1x3 = tail call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr %A)
2277 %tmp = getelementptr i16, ptr %A, i64 %inc
2278 store ptr %tmp, ptr %ptr
2279 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld1x3
2282 declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr)
2285 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld1x3(ptr %A, ptr %ptr) {
2286 ; CHECK-LABEL: test_v4i32_post_imm_ld1x3:
2288 ; CHECK-NEXT: ld1.4s { v0, v1, v2 }, [x0], #48
2289 ; CHECK-NEXT: str x0, [x1]
2291 %ld1x3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr %A)
2292 %tmp = getelementptr i32, ptr %A, i32 12
2293 store ptr %tmp, ptr %ptr
2294 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld1x3
2297 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2298 ; CHECK-LABEL: test_v4i32_post_reg_ld1x3:
2300 ; CHECK-NEXT: lsl x8, x2, #2
2301 ; CHECK-NEXT: ld1.4s { v0, v1, v2 }, [x0], x8
2302 ; CHECK-NEXT: str x0, [x1]
2304 %ld1x3 = tail call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr %A)
2305 %tmp = getelementptr i32, ptr %A, i64 %inc
2306 store ptr %tmp, ptr %ptr
2307 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld1x3
2310 declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr)
2313 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld1x3(ptr %A, ptr %ptr) {
2314 ; CHECK-LABEL: test_v2i32_post_imm_ld1x3:
2316 ; CHECK-NEXT: ld1.2s { v0, v1, v2 }, [x0], #24
2317 ; CHECK-NEXT: str x0, [x1]
2319 %ld1x3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr %A)
2320 %tmp = getelementptr i32, ptr %A, i32 6
2321 store ptr %tmp, ptr %ptr
2322 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld1x3
2325 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2326 ; CHECK-LABEL: test_v2i32_post_reg_ld1x3:
2328 ; CHECK-NEXT: lsl x8, x2, #2
2329 ; CHECK-NEXT: ld1.2s { v0, v1, v2 }, [x0], x8
2330 ; CHECK-NEXT: str x0, [x1]
2332 %ld1x3 = tail call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr %A)
2333 %tmp = getelementptr i32, ptr %A, i64 %inc
2334 store ptr %tmp, ptr %ptr
2335 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld1x3
2338 declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr)
2341 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld1x3(ptr %A, ptr %ptr) {
2342 ; CHECK-LABEL: test_v2i64_post_imm_ld1x3:
2344 ; CHECK-NEXT: ld1.2d { v0, v1, v2 }, [x0], #48
2345 ; CHECK-NEXT: str x0, [x1]
2347 %ld1x3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr %A)
2348 %tmp = getelementptr i64, ptr %A, i32 6
2349 store ptr %tmp, ptr %ptr
2350 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld1x3
2353 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2354 ; CHECK-LABEL: test_v2i64_post_reg_ld1x3:
2356 ; CHECK-NEXT: lsl x8, x2, #3
2357 ; CHECK-NEXT: ld1.2d { v0, v1, v2 }, [x0], x8
2358 ; CHECK-NEXT: str x0, [x1]
2360 %ld1x3 = tail call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr %A)
2361 %tmp = getelementptr i64, ptr %A, i64 %inc
2362 store ptr %tmp, ptr %ptr
2363 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld1x3
2366 declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr)
2369 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld1x3(ptr %A, ptr %ptr) {
2370 ; CHECK-LABEL: test_v1i64_post_imm_ld1x3:
2372 ; CHECK-NEXT: ld1.1d { v0, v1, v2 }, [x0], #24
2373 ; CHECK-NEXT: str x0, [x1]
2375 %ld1x3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr %A)
2376 %tmp = getelementptr i64, ptr %A, i32 3
2377 store ptr %tmp, ptr %ptr
2378 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld1x3
2381 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2382 ; CHECK-LABEL: test_v1i64_post_reg_ld1x3:
2384 ; CHECK-NEXT: lsl x8, x2, #3
2385 ; CHECK-NEXT: ld1.1d { v0, v1, v2 }, [x0], x8
2386 ; CHECK-NEXT: str x0, [x1]
2388 %ld1x3 = tail call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr %A)
2389 %tmp = getelementptr i64, ptr %A, i64 %inc
2390 store ptr %tmp, ptr %ptr
2391 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld1x3
2394 declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr)
2397 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld1x3(ptr %A, ptr %ptr) {
2398 ; CHECK-LABEL: test_v4f32_post_imm_ld1x3:
2400 ; CHECK-NEXT: ld1.4s { v0, v1, v2 }, [x0], #48
2401 ; CHECK-NEXT: str x0, [x1]
2403 %ld1x3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x3.v4f32.p0(ptr %A)
2404 %tmp = getelementptr float, ptr %A, i32 12
2405 store ptr %tmp, ptr %ptr
2406 ret { <4 x float>, <4 x float>, <4 x float> } %ld1x3
2409 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2410 ; CHECK-LABEL: test_v4f32_post_reg_ld1x3:
2412 ; CHECK-NEXT: lsl x8, x2, #2
2413 ; CHECK-NEXT: ld1.4s { v0, v1, v2 }, [x0], x8
2414 ; CHECK-NEXT: str x0, [x1]
2416 %ld1x3 = tail call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x3.v4f32.p0(ptr %A)
2417 %tmp = getelementptr float, ptr %A, i64 %inc
2418 store ptr %tmp, ptr %ptr
2419 ret { <4 x float>, <4 x float>, <4 x float> } %ld1x3
2422 declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x3.v4f32.p0(ptr)
2425 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld1x3(ptr %A, ptr %ptr) {
2426 ; CHECK-LABEL: test_v2f32_post_imm_ld1x3:
2428 ; CHECK-NEXT: ld1.2s { v0, v1, v2 }, [x0], #24
2429 ; CHECK-NEXT: str x0, [x1]
2431 %ld1x3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x3.v2f32.p0(ptr %A)
2432 %tmp = getelementptr float, ptr %A, i32 6
2433 store ptr %tmp, ptr %ptr
2434 ret { <2 x float>, <2 x float>, <2 x float> } %ld1x3
2437 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2438 ; CHECK-LABEL: test_v2f32_post_reg_ld1x3:
2440 ; CHECK-NEXT: lsl x8, x2, #2
2441 ; CHECK-NEXT: ld1.2s { v0, v1, v2 }, [x0], x8
2442 ; CHECK-NEXT: str x0, [x1]
2444 %ld1x3 = tail call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x3.v2f32.p0(ptr %A)
2445 %tmp = getelementptr float, ptr %A, i64 %inc
2446 store ptr %tmp, ptr %ptr
2447 ret { <2 x float>, <2 x float>, <2 x float> } %ld1x3
2450 declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x3.v2f32.p0(ptr)
2453 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld1x3(ptr %A, ptr %ptr) {
2454 ; CHECK-LABEL: test_v2f64_post_imm_ld1x3:
2456 ; CHECK-NEXT: ld1.2d { v0, v1, v2 }, [x0], #48
2457 ; CHECK-NEXT: str x0, [x1]
2459 %ld1x3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x3.v2f64.p0(ptr %A)
2460 %tmp = getelementptr double, ptr %A, i32 6
2461 store ptr %tmp, ptr %ptr
2462 ret { <2 x double>, <2 x double>, <2 x double> } %ld1x3
2465 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2466 ; CHECK-LABEL: test_v2f64_post_reg_ld1x3:
2468 ; CHECK-NEXT: lsl x8, x2, #3
2469 ; CHECK-NEXT: ld1.2d { v0, v1, v2 }, [x0], x8
2470 ; CHECK-NEXT: str x0, [x1]
2472 %ld1x3 = tail call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x3.v2f64.p0(ptr %A)
2473 %tmp = getelementptr double, ptr %A, i64 %inc
2474 store ptr %tmp, ptr %ptr
2475 ret { <2 x double>, <2 x double>, <2 x double> } %ld1x3
2478 declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x3.v2f64.p0(ptr)
2481 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld1x3(ptr %A, ptr %ptr) {
2482 ; CHECK-LABEL: test_v1f64_post_imm_ld1x3:
2484 ; CHECK-NEXT: ld1.1d { v0, v1, v2 }, [x0], #24
2485 ; CHECK-NEXT: str x0, [x1]
2487 %ld1x3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x3.v1f64.p0(ptr %A)
2488 %tmp = getelementptr double, ptr %A, i32 3
2489 store ptr %tmp, ptr %ptr
2490 ret { <1 x double>, <1 x double>, <1 x double> } %ld1x3
2493 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld1x3(ptr %A, ptr %ptr, i64 %inc) {
2494 ; CHECK-LABEL: test_v1f64_post_reg_ld1x3:
2496 ; CHECK-NEXT: lsl x8, x2, #3
2497 ; CHECK-NEXT: ld1.1d { v0, v1, v2 }, [x0], x8
2498 ; CHECK-NEXT: str x0, [x1]
2500 %ld1x3 = tail call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x3.v1f64.p0(ptr %A)
2501 %tmp = getelementptr double, ptr %A, i64 %inc
2502 store ptr %tmp, ptr %ptr
2503 ret { <1 x double>, <1 x double>, <1 x double> } %ld1x3
2506 declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x3.v1f64.p0(ptr)
2509 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld1x4(ptr %A, ptr %ptr) {
2510 ; CHECK-LABEL: test_v16i8_post_imm_ld1x4:
2512 ; CHECK-NEXT: ld1.16b { v0, v1, v2, v3 }, [x0], #64
2513 ; CHECK-NEXT: str x0, [x1]
2515 %ld1x4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr %A)
2516 %tmp = getelementptr i8, ptr %A, i32 64
2517 store ptr %tmp, ptr %ptr
2518 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld1x4
2521 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2522 ; CHECK-LABEL: test_v16i8_post_reg_ld1x4:
2524 ; CHECK-NEXT: ld1.16b { v0, v1, v2, v3 }, [x0], x2
2525 ; CHECK-NEXT: str x0, [x1]
2527 %ld1x4 = tail call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr %A)
2528 %tmp = getelementptr i8, ptr %A, i64 %inc
2529 store ptr %tmp, ptr %ptr
2530 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld1x4
2533 declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr)
2536 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld1x4(ptr %A, ptr %ptr) {
2537 ; CHECK-LABEL: test_v8i8_post_imm_ld1x4:
2539 ; CHECK-NEXT: ld1.8b { v0, v1, v2, v3 }, [x0], #32
2540 ; CHECK-NEXT: str x0, [x1]
2542 %ld1x4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr %A)
2543 %tmp = getelementptr i8, ptr %A, i32 32
2544 store ptr %tmp, ptr %ptr
2545 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld1x4
2548 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2549 ; CHECK-LABEL: test_v8i8_post_reg_ld1x4:
2551 ; CHECK-NEXT: ld1.8b { v0, v1, v2, v3 }, [x0], x2
2552 ; CHECK-NEXT: str x0, [x1]
2554 %ld1x4 = tail call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr %A)
2555 %tmp = getelementptr i8, ptr %A, i64 %inc
2556 store ptr %tmp, ptr %ptr
2557 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld1x4
2560 declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr)
2563 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld1x4(ptr %A, ptr %ptr) {
2564 ; CHECK-LABEL: test_v8i16_post_imm_ld1x4:
2566 ; CHECK-NEXT: ld1.8h { v0, v1, v2, v3 }, [x0], #64
2567 ; CHECK-NEXT: str x0, [x1]
2569 %ld1x4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr %A)
2570 %tmp = getelementptr i16, ptr %A, i32 32
2571 store ptr %tmp, ptr %ptr
2572 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld1x4
2575 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2576 ; CHECK-LABEL: test_v8i16_post_reg_ld1x4:
2578 ; CHECK-NEXT: lsl x8, x2, #1
2579 ; CHECK-NEXT: ld1.8h { v0, v1, v2, v3 }, [x0], x8
2580 ; CHECK-NEXT: str x0, [x1]
2582 %ld1x4 = tail call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr %A)
2583 %tmp = getelementptr i16, ptr %A, i64 %inc
2584 store ptr %tmp, ptr %ptr
2585 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld1x4
2588 declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr)
2591 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld1x4(ptr %A, ptr %ptr) {
2592 ; CHECK-LABEL: test_v4i16_post_imm_ld1x4:
2594 ; CHECK-NEXT: ld1.4h { v0, v1, v2, v3 }, [x0], #32
2595 ; CHECK-NEXT: str x0, [x1]
2597 %ld1x4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr %A)
2598 %tmp = getelementptr i16, ptr %A, i32 16
2599 store ptr %tmp, ptr %ptr
2600 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld1x4
2603 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2604 ; CHECK-LABEL: test_v4i16_post_reg_ld1x4:
2606 ; CHECK-NEXT: lsl x8, x2, #1
2607 ; CHECK-NEXT: ld1.4h { v0, v1, v2, v3 }, [x0], x8
2608 ; CHECK-NEXT: str x0, [x1]
2610 %ld1x4 = tail call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr %A)
2611 %tmp = getelementptr i16, ptr %A, i64 %inc
2612 store ptr %tmp, ptr %ptr
2613 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld1x4
2616 declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr)
2619 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld1x4(ptr %A, ptr %ptr) {
2620 ; CHECK-LABEL: test_v4i32_post_imm_ld1x4:
2622 ; CHECK-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0], #64
2623 ; CHECK-NEXT: str x0, [x1]
2625 %ld1x4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr %A)
2626 %tmp = getelementptr i32, ptr %A, i32 16
2627 store ptr %tmp, ptr %ptr
2628 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld1x4
2631 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2632 ; CHECK-LABEL: test_v4i32_post_reg_ld1x4:
2634 ; CHECK-NEXT: lsl x8, x2, #2
2635 ; CHECK-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0], x8
2636 ; CHECK-NEXT: str x0, [x1]
2638 %ld1x4 = tail call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr %A)
2639 %tmp = getelementptr i32, ptr %A, i64 %inc
2640 store ptr %tmp, ptr %ptr
2641 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld1x4
2644 declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr)
2647 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld1x4(ptr %A, ptr %ptr) {
2648 ; CHECK-LABEL: test_v2i32_post_imm_ld1x4:
2650 ; CHECK-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0], #32
2651 ; CHECK-NEXT: str x0, [x1]
2653 %ld1x4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr %A)
2654 %tmp = getelementptr i32, ptr %A, i32 8
2655 store ptr %tmp, ptr %ptr
2656 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld1x4
2659 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2660 ; CHECK-LABEL: test_v2i32_post_reg_ld1x4:
2662 ; CHECK-NEXT: lsl x8, x2, #2
2663 ; CHECK-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0], x8
2664 ; CHECK-NEXT: str x0, [x1]
2666 %ld1x4 = tail call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr %A)
2667 %tmp = getelementptr i32, ptr %A, i64 %inc
2668 store ptr %tmp, ptr %ptr
2669 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld1x4
2672 declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr)
2675 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld1x4(ptr %A, ptr %ptr) {
2676 ; CHECK-LABEL: test_v2i64_post_imm_ld1x4:
2678 ; CHECK-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0], #64
2679 ; CHECK-NEXT: str x0, [x1]
2681 %ld1x4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr %A)
2682 %tmp = getelementptr i64, ptr %A, i32 8
2683 store ptr %tmp, ptr %ptr
2684 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld1x4
2687 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2688 ; CHECK-LABEL: test_v2i64_post_reg_ld1x4:
2690 ; CHECK-NEXT: lsl x8, x2, #3
2691 ; CHECK-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0], x8
2692 ; CHECK-NEXT: str x0, [x1]
2694 %ld1x4 = tail call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr %A)
2695 %tmp = getelementptr i64, ptr %A, i64 %inc
2696 store ptr %tmp, ptr %ptr
2697 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld1x4
2700 declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr)
2703 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld1x4(ptr %A, ptr %ptr) {
2704 ; CHECK-LABEL: test_v1i64_post_imm_ld1x4:
2706 ; CHECK-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], #32
2707 ; CHECK-NEXT: str x0, [x1]
2709 %ld1x4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr %A)
2710 %tmp = getelementptr i64, ptr %A, i32 4
2711 store ptr %tmp, ptr %ptr
2712 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld1x4
2715 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2716 ; CHECK-LABEL: test_v1i64_post_reg_ld1x4:
2718 ; CHECK-NEXT: lsl x8, x2, #3
2719 ; CHECK-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], x8
2720 ; CHECK-NEXT: str x0, [x1]
2722 %ld1x4 = tail call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr %A)
2723 %tmp = getelementptr i64, ptr %A, i64 %inc
2724 store ptr %tmp, ptr %ptr
2725 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld1x4
2728 declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr)
2731 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld1x4(ptr %A, ptr %ptr) {
2732 ; CHECK-LABEL: test_v4f32_post_imm_ld1x4:
2734 ; CHECK-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0], #64
2735 ; CHECK-NEXT: str x0, [x1]
2737 %ld1x4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x4.v4f32.p0(ptr %A)
2738 %tmp = getelementptr float, ptr %A, i32 16
2739 store ptr %tmp, ptr %ptr
2740 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld1x4
2743 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2744 ; CHECK-LABEL: test_v4f32_post_reg_ld1x4:
2746 ; CHECK-NEXT: lsl x8, x2, #2
2747 ; CHECK-NEXT: ld1.4s { v0, v1, v2, v3 }, [x0], x8
2748 ; CHECK-NEXT: str x0, [x1]
2750 %ld1x4 = tail call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x4.v4f32.p0(ptr %A)
2751 %tmp = getelementptr float, ptr %A, i64 %inc
2752 store ptr %tmp, ptr %ptr
2753 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld1x4
2756 declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x4.v4f32.p0(ptr)
2759 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld1x4(ptr %A, ptr %ptr) {
2760 ; CHECK-LABEL: test_v2f32_post_imm_ld1x4:
2762 ; CHECK-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0], #32
2763 ; CHECK-NEXT: str x0, [x1]
2765 %ld1x4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x4.v2f32.p0(ptr %A)
2766 %tmp = getelementptr float, ptr %A, i32 8
2767 store ptr %tmp, ptr %ptr
2768 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld1x4
2771 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2772 ; CHECK-LABEL: test_v2f32_post_reg_ld1x4:
2774 ; CHECK-NEXT: lsl x8, x2, #2
2775 ; CHECK-NEXT: ld1.2s { v0, v1, v2, v3 }, [x0], x8
2776 ; CHECK-NEXT: str x0, [x1]
2778 %ld1x4 = tail call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x4.v2f32.p0(ptr %A)
2779 %tmp = getelementptr float, ptr %A, i64 %inc
2780 store ptr %tmp, ptr %ptr
2781 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld1x4
2784 declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x4.v2f32.p0(ptr)
2787 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld1x4(ptr %A, ptr %ptr) {
2788 ; CHECK-LABEL: test_v2f64_post_imm_ld1x4:
2790 ; CHECK-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0], #64
2791 ; CHECK-NEXT: str x0, [x1]
2793 %ld1x4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x4.v2f64.p0(ptr %A)
2794 %tmp = getelementptr double, ptr %A, i32 8
2795 store ptr %tmp, ptr %ptr
2796 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld1x4
2799 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2800 ; CHECK-LABEL: test_v2f64_post_reg_ld1x4:
2802 ; CHECK-NEXT: lsl x8, x2, #3
2803 ; CHECK-NEXT: ld1.2d { v0, v1, v2, v3 }, [x0], x8
2804 ; CHECK-NEXT: str x0, [x1]
2806 %ld1x4 = tail call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x4.v2f64.p0(ptr %A)
2807 %tmp = getelementptr double, ptr %A, i64 %inc
2808 store ptr %tmp, ptr %ptr
2809 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld1x4
2812 declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x4.v2f64.p0(ptr)
2815 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld1x4(ptr %A, ptr %ptr) {
2816 ; CHECK-LABEL: test_v1f64_post_imm_ld1x4:
2818 ; CHECK-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], #32
2819 ; CHECK-NEXT: str x0, [x1]
2821 %ld1x4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x4.v1f64.p0(ptr %A)
2822 %tmp = getelementptr double, ptr %A, i32 4
2823 store ptr %tmp, ptr %ptr
2824 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld1x4
2827 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld1x4(ptr %A, ptr %ptr, i64 %inc) {
2828 ; CHECK-LABEL: test_v1f64_post_reg_ld1x4:
2830 ; CHECK-NEXT: lsl x8, x2, #3
2831 ; CHECK-NEXT: ld1.1d { v0, v1, v2, v3 }, [x0], x8
2832 ; CHECK-NEXT: str x0, [x1]
2834 %ld1x4 = tail call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x4.v1f64.p0(ptr %A)
2835 %tmp = getelementptr double, ptr %A, i64 %inc
2836 store ptr %tmp, ptr %ptr
2837 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld1x4
2840 declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x4.v1f64.p0(ptr)
2843 define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
2844 ; CHECK-LABEL: test_v16i8_post_imm_ld2r:
2846 ; CHECK-NEXT: ld2r.16b { v0, v1 }, [x0], #2
2847 ; CHECK-NEXT: str x0, [x1]
2849 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2r.v16i8.p0(ptr %A)
2850 %tmp = getelementptr i8, ptr %A, i32 2
2851 store ptr %tmp, ptr %ptr
2852 ret { <16 x i8>, <16 x i8> } %ld2
2855 define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
2856 ; CHECK-LABEL: test_v16i8_post_reg_ld2r:
2858 ; CHECK-NEXT: ld2r.16b { v0, v1 }, [x0], x2
2859 ; CHECK-NEXT: str x0, [x1]
2861 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2r.v16i8.p0(ptr %A)
2862 %tmp = getelementptr i8, ptr %A, i64 %inc
2863 store ptr %tmp, ptr %ptr
2864 ret { <16 x i8>, <16 x i8> } %ld2
2867 declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2r.v16i8.p0(ptr) nounwind readonly
2870 define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
2871 ; CHECK-LABEL: test_v8i8_post_imm_ld2r:
2873 ; CHECK-NEXT: ld2r.8b { v0, v1 }, [x0], #2
2874 ; CHECK-NEXT: str x0, [x1]
2876 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2r.v8i8.p0(ptr %A)
2877 %tmp = getelementptr i8, ptr %A, i32 2
2878 store ptr %tmp, ptr %ptr
2879 ret { <8 x i8>, <8 x i8> } %ld2
2882 define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
2883 ; CHECK-LABEL: test_v8i8_post_reg_ld2r:
2885 ; CHECK-NEXT: ld2r.8b { v0, v1 }, [x0], x2
2886 ; CHECK-NEXT: str x0, [x1]
2888 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2r.v8i8.p0(ptr %A)
2889 %tmp = getelementptr i8, ptr %A, i64 %inc
2890 store ptr %tmp, ptr %ptr
2891 ret { <8 x i8>, <8 x i8> } %ld2
2894 declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2r.v8i8.p0(ptr) nounwind readonly
2897 define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
2898 ; CHECK-LABEL: test_v8i16_post_imm_ld2r:
2900 ; CHECK-NEXT: ld2r.8h { v0, v1 }, [x0], #4
2901 ; CHECK-NEXT: str x0, [x1]
2903 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2r.v8i16.p0(ptr %A)
2904 %tmp = getelementptr i16, ptr %A, i32 2
2905 store ptr %tmp, ptr %ptr
2906 ret { <8 x i16>, <8 x i16> } %ld2
2909 define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
2910 ; CHECK-LABEL: test_v8i16_post_reg_ld2r:
2912 ; CHECK-NEXT: lsl x8, x2, #1
2913 ; CHECK-NEXT: ld2r.8h { v0, v1 }, [x0], x8
2914 ; CHECK-NEXT: str x0, [x1]
2916 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2r.v8i16.p0(ptr %A)
2917 %tmp = getelementptr i16, ptr %A, i64 %inc
2918 store ptr %tmp, ptr %ptr
2919 ret { <8 x i16>, <8 x i16> } %ld2
2922 declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2r.v8i16.p0(ptr) nounwind readonly
2925 define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
2926 ; CHECK-LABEL: test_v4i16_post_imm_ld2r:
2928 ; CHECK-NEXT: ld2r.4h { v0, v1 }, [x0], #4
2929 ; CHECK-NEXT: str x0, [x1]
2931 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2r.v4i16.p0(ptr %A)
2932 %tmp = getelementptr i16, ptr %A, i32 2
2933 store ptr %tmp, ptr %ptr
2934 ret { <4 x i16>, <4 x i16> } %ld2
2937 define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
2938 ; CHECK-LABEL: test_v4i16_post_reg_ld2r:
2940 ; CHECK-NEXT: lsl x8, x2, #1
2941 ; CHECK-NEXT: ld2r.4h { v0, v1 }, [x0], x8
2942 ; CHECK-NEXT: str x0, [x1]
2944 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2r.v4i16.p0(ptr %A)
2945 %tmp = getelementptr i16, ptr %A, i64 %inc
2946 store ptr %tmp, ptr %ptr
2947 ret { <4 x i16>, <4 x i16> } %ld2
2950 declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2r.v4i16.p0(ptr) nounwind readonly
2953 define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
2954 ; CHECK-LABEL: test_v4i32_post_imm_ld2r:
2956 ; CHECK-NEXT: ld2r.4s { v0, v1 }, [x0], #8
2957 ; CHECK-NEXT: str x0, [x1]
2959 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2r.v4i32.p0(ptr %A)
2960 %tmp = getelementptr i32, ptr %A, i32 2
2961 store ptr %tmp, ptr %ptr
2962 ret { <4 x i32>, <4 x i32> } %ld2
2965 define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
2966 ; CHECK-LABEL: test_v4i32_post_reg_ld2r:
2968 ; CHECK-NEXT: lsl x8, x2, #2
2969 ; CHECK-NEXT: ld2r.4s { v0, v1 }, [x0], x8
2970 ; CHECK-NEXT: str x0, [x1]
2972 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2r.v4i32.p0(ptr %A)
2973 %tmp = getelementptr i32, ptr %A, i64 %inc
2974 store ptr %tmp, ptr %ptr
2975 ret { <4 x i32>, <4 x i32> } %ld2
2978 declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2r.v4i32.p0(ptr) nounwind readonly
2980 define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
2981 ; CHECK-LABEL: test_v2i32_post_imm_ld2r:
2983 ; CHECK-NEXT: ld2r.2s { v0, v1 }, [x0], #8
2984 ; CHECK-NEXT: str x0, [x1]
2986 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2r.v2i32.p0(ptr %A)
2987 %tmp = getelementptr i32, ptr %A, i32 2
2988 store ptr %tmp, ptr %ptr
2989 ret { <2 x i32>, <2 x i32> } %ld2
2992 define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
2993 ; CHECK-LABEL: test_v2i32_post_reg_ld2r:
2995 ; CHECK-NEXT: lsl x8, x2, #2
2996 ; CHECK-NEXT: ld2r.2s { v0, v1 }, [x0], x8
2997 ; CHECK-NEXT: str x0, [x1]
2999 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2r.v2i32.p0(ptr %A)
3000 %tmp = getelementptr i32, ptr %A, i64 %inc
3001 store ptr %tmp, ptr %ptr
3002 ret { <2 x i32>, <2 x i32> } %ld2
3005 declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2r.v2i32.p0(ptr) nounwind readonly
3008 define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
3009 ; CHECK-LABEL: test_v2i64_post_imm_ld2r:
3011 ; CHECK-NEXT: ld2r.2d { v0, v1 }, [x0], #16
3012 ; CHECK-NEXT: str x0, [x1]
3014 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2r.v2i64.p0(ptr %A)
3015 %tmp = getelementptr i64, ptr %A, i32 2
3016 store ptr %tmp, ptr %ptr
3017 ret { <2 x i64>, <2 x i64> } %ld2
3020 define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3021 ; CHECK-LABEL: test_v2i64_post_reg_ld2r:
3023 ; CHECK-NEXT: lsl x8, x2, #3
3024 ; CHECK-NEXT: ld2r.2d { v0, v1 }, [x0], x8
3025 ; CHECK-NEXT: str x0, [x1]
3027 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2r.v2i64.p0(ptr %A)
3028 %tmp = getelementptr i64, ptr %A, i64 %inc
3029 store ptr %tmp, ptr %ptr
3030 ret { <2 x i64>, <2 x i64> } %ld2
3033 declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2r.v2i64.p0(ptr) nounwind readonly
3035 define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
3036 ; CHECK-LABEL: test_v1i64_post_imm_ld2r:
3038 ; CHECK-NEXT: ld2r.1d { v0, v1 }, [x0], #16
3039 ; CHECK-NEXT: str x0, [x1]
3041 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2r.v1i64.p0(ptr %A)
3042 %tmp = getelementptr i64, ptr %A, i32 2
3043 store ptr %tmp, ptr %ptr
3044 ret { <1 x i64>, <1 x i64> } %ld2
3047 define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3048 ; CHECK-LABEL: test_v1i64_post_reg_ld2r:
3050 ; CHECK-NEXT: lsl x8, x2, #3
3051 ; CHECK-NEXT: ld2r.1d { v0, v1 }, [x0], x8
3052 ; CHECK-NEXT: str x0, [x1]
3054 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2r.v1i64.p0(ptr %A)
3055 %tmp = getelementptr i64, ptr %A, i64 %inc
3056 store ptr %tmp, ptr %ptr
3057 ret { <1 x i64>, <1 x i64> } %ld2
3060 declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2r.v1i64.p0(ptr) nounwind readonly
3063 define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
3064 ; CHECK-LABEL: test_v4f32_post_imm_ld2r:
3066 ; CHECK-NEXT: ld2r.4s { v0, v1 }, [x0], #8
3067 ; CHECK-NEXT: str x0, [x1]
3069 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2r.v4f32.p0(ptr %A)
3070 %tmp = getelementptr float, ptr %A, i32 2
3071 store ptr %tmp, ptr %ptr
3072 ret { <4 x float>, <4 x float> } %ld2
3075 define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3076 ; CHECK-LABEL: test_v4f32_post_reg_ld2r:
3078 ; CHECK-NEXT: lsl x8, x2, #2
3079 ; CHECK-NEXT: ld2r.4s { v0, v1 }, [x0], x8
3080 ; CHECK-NEXT: str x0, [x1]
3082 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2r.v4f32.p0(ptr %A)
3083 %tmp = getelementptr float, ptr %A, i64 %inc
3084 store ptr %tmp, ptr %ptr
3085 ret { <4 x float>, <4 x float> } %ld2
3088 declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2r.v4f32.p0(ptr) nounwind readonly
3090 define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
3091 ; CHECK-LABEL: test_v2f32_post_imm_ld2r:
3093 ; CHECK-NEXT: ld2r.2s { v0, v1 }, [x0], #8
3094 ; CHECK-NEXT: str x0, [x1]
3096 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2r.v2f32.p0(ptr %A)
3097 %tmp = getelementptr float, ptr %A, i32 2
3098 store ptr %tmp, ptr %ptr
3099 ret { <2 x float>, <2 x float> } %ld2
3102 define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3103 ; CHECK-LABEL: test_v2f32_post_reg_ld2r:
3105 ; CHECK-NEXT: lsl x8, x2, #2
3106 ; CHECK-NEXT: ld2r.2s { v0, v1 }, [x0], x8
3107 ; CHECK-NEXT: str x0, [x1]
3109 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2r.v2f32.p0(ptr %A)
3110 %tmp = getelementptr float, ptr %A, i64 %inc
3111 store ptr %tmp, ptr %ptr
3112 ret { <2 x float>, <2 x float> } %ld2
3115 declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2r.v2f32.p0(ptr) nounwind readonly
3118 define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
3119 ; CHECK-LABEL: test_v2f64_post_imm_ld2r:
3121 ; CHECK-NEXT: ld2r.2d { v0, v1 }, [x0], #16
3122 ; CHECK-NEXT: str x0, [x1]
3124 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2r.v2f64.p0(ptr %A)
3125 %tmp = getelementptr double, ptr %A, i32 2
3126 store ptr %tmp, ptr %ptr
3127 ret { <2 x double>, <2 x double> } %ld2
3130 define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3131 ; CHECK-LABEL: test_v2f64_post_reg_ld2r:
3133 ; CHECK-NEXT: lsl x8, x2, #3
3134 ; CHECK-NEXT: ld2r.2d { v0, v1 }, [x0], x8
3135 ; CHECK-NEXT: str x0, [x1]
3137 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2r.v2f64.p0(ptr %A)
3138 %tmp = getelementptr double, ptr %A, i64 %inc
3139 store ptr %tmp, ptr %ptr
3140 ret { <2 x double>, <2 x double> } %ld2
3143 declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2r.v2f64.p0(ptr) nounwind readonly
3145 define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld2r(ptr %A, ptr %ptr) nounwind {
3146 ; CHECK-LABEL: test_v1f64_post_imm_ld2r:
3148 ; CHECK-NEXT: ld2r.1d { v0, v1 }, [x0], #16
3149 ; CHECK-NEXT: str x0, [x1]
3151 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2r.v1f64.p0(ptr %A)
3152 %tmp = getelementptr double, ptr %A, i32 2
3153 store ptr %tmp, ptr %ptr
3154 ret { <1 x double>, <1 x double> } %ld2
3157 define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld2r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3158 ; CHECK-LABEL: test_v1f64_post_reg_ld2r:
3160 ; CHECK-NEXT: lsl x8, x2, #3
3161 ; CHECK-NEXT: ld2r.1d { v0, v1 }, [x0], x8
3162 ; CHECK-NEXT: str x0, [x1]
3164 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2r.v1f64.p0(ptr %A)
3165 %tmp = getelementptr double, ptr %A, i64 %inc
3166 store ptr %tmp, ptr %ptr
3167 ret { <1 x double>, <1 x double> } %ld2
3170 declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2r.v1f64.p0(ptr) nounwind readonly
3173 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3174 ; CHECK-LABEL: test_v16i8_post_imm_ld3r:
3176 ; CHECK-NEXT: ld3r.16b { v0, v1, v2 }, [x0], #3
3177 ; CHECK-NEXT: str x0, [x1]
3179 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3r.v16i8.p0(ptr %A)
3180 %tmp = getelementptr i8, ptr %A, i32 3
3181 store ptr %tmp, ptr %ptr
3182 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
3185 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3186 ; CHECK-LABEL: test_v16i8_post_reg_ld3r:
3188 ; CHECK-NEXT: ld3r.16b { v0, v1, v2 }, [x0], x2
3189 ; CHECK-NEXT: str x0, [x1]
3191 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3r.v16i8.p0(ptr %A)
3192 %tmp = getelementptr i8, ptr %A, i64 %inc
3193 store ptr %tmp, ptr %ptr
3194 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
3197 declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3r.v16i8.p0(ptr) nounwind readonly
3200 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3201 ; CHECK-LABEL: test_v8i8_post_imm_ld3r:
3203 ; CHECK-NEXT: ld3r.8b { v0, v1, v2 }, [x0], #3
3204 ; CHECK-NEXT: str x0, [x1]
3206 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3r.v8i8.p0(ptr %A)
3207 %tmp = getelementptr i8, ptr %A, i32 3
3208 store ptr %tmp, ptr %ptr
3209 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
3212 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3213 ; CHECK-LABEL: test_v8i8_post_reg_ld3r:
3215 ; CHECK-NEXT: ld3r.8b { v0, v1, v2 }, [x0], x2
3216 ; CHECK-NEXT: str x0, [x1]
3218 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3r.v8i8.p0(ptr %A)
3219 %tmp = getelementptr i8, ptr %A, i64 %inc
3220 store ptr %tmp, ptr %ptr
3221 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
3224 declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3r.v8i8.p0(ptr) nounwind readonly
3227 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3228 ; CHECK-LABEL: test_v8i16_post_imm_ld3r:
3230 ; CHECK-NEXT: ld3r.8h { v0, v1, v2 }, [x0], #6
3231 ; CHECK-NEXT: str x0, [x1]
3233 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3r.v8i16.p0(ptr %A)
3234 %tmp = getelementptr i16, ptr %A, i32 3
3235 store ptr %tmp, ptr %ptr
3236 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
3239 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3240 ; CHECK-LABEL: test_v8i16_post_reg_ld3r:
3242 ; CHECK-NEXT: lsl x8, x2, #1
3243 ; CHECK-NEXT: ld3r.8h { v0, v1, v2 }, [x0], x8
3244 ; CHECK-NEXT: str x0, [x1]
3246 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3r.v8i16.p0(ptr %A)
3247 %tmp = getelementptr i16, ptr %A, i64 %inc
3248 store ptr %tmp, ptr %ptr
3249 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
3252 declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3r.v8i16.p0(ptr) nounwind readonly
3255 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3256 ; CHECK-LABEL: test_v4i16_post_imm_ld3r:
3258 ; CHECK-NEXT: ld3r.4h { v0, v1, v2 }, [x0], #6
3259 ; CHECK-NEXT: str x0, [x1]
3261 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3r.v4i16.p0(ptr %A)
3262 %tmp = getelementptr i16, ptr %A, i32 3
3263 store ptr %tmp, ptr %ptr
3264 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
3267 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3268 ; CHECK-LABEL: test_v4i16_post_reg_ld3r:
3270 ; CHECK-NEXT: lsl x8, x2, #1
3271 ; CHECK-NEXT: ld3r.4h { v0, v1, v2 }, [x0], x8
3272 ; CHECK-NEXT: str x0, [x1]
3274 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3r.v4i16.p0(ptr %A)
3275 %tmp = getelementptr i16, ptr %A, i64 %inc
3276 store ptr %tmp, ptr %ptr
3277 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
3280 declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3r.v4i16.p0(ptr) nounwind readonly
3283 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3284 ; CHECK-LABEL: test_v4i32_post_imm_ld3r:
3286 ; CHECK-NEXT: ld3r.4s { v0, v1, v2 }, [x0], #12
3287 ; CHECK-NEXT: str x0, [x1]
3289 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3r.v4i32.p0(ptr %A)
3290 %tmp = getelementptr i32, ptr %A, i32 3
3291 store ptr %tmp, ptr %ptr
3292 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
3295 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3296 ; CHECK-LABEL: test_v4i32_post_reg_ld3r:
3298 ; CHECK-NEXT: lsl x8, x2, #2
3299 ; CHECK-NEXT: ld3r.4s { v0, v1, v2 }, [x0], x8
3300 ; CHECK-NEXT: str x0, [x1]
3302 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3r.v4i32.p0(ptr %A)
3303 %tmp = getelementptr i32, ptr %A, i64 %inc
3304 store ptr %tmp, ptr %ptr
3305 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
3308 declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3r.v4i32.p0(ptr) nounwind readonly
3310 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3311 ; CHECK-LABEL: test_v2i32_post_imm_ld3r:
3313 ; CHECK-NEXT: ld3r.2s { v0, v1, v2 }, [x0], #12
3314 ; CHECK-NEXT: str x0, [x1]
3316 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3r.v2i32.p0(ptr %A)
3317 %tmp = getelementptr i32, ptr %A, i32 3
3318 store ptr %tmp, ptr %ptr
3319 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
3322 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3323 ; CHECK-LABEL: test_v2i32_post_reg_ld3r:
3325 ; CHECK-NEXT: lsl x8, x2, #2
3326 ; CHECK-NEXT: ld3r.2s { v0, v1, v2 }, [x0], x8
3327 ; CHECK-NEXT: str x0, [x1]
3329 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3r.v2i32.p0(ptr %A)
3330 %tmp = getelementptr i32, ptr %A, i64 %inc
3331 store ptr %tmp, ptr %ptr
3332 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
3335 declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3r.v2i32.p0(ptr) nounwind readonly
3338 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3339 ; CHECK-LABEL: test_v2i64_post_imm_ld3r:
3341 ; CHECK-NEXT: ld3r.2d { v0, v1, v2 }, [x0], #24
3342 ; CHECK-NEXT: str x0, [x1]
3344 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3r.v2i64.p0(ptr %A)
3345 %tmp = getelementptr i64, ptr %A, i32 3
3346 store ptr %tmp, ptr %ptr
3347 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
3350 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3351 ; CHECK-LABEL: test_v2i64_post_reg_ld3r:
3353 ; CHECK-NEXT: lsl x8, x2, #3
3354 ; CHECK-NEXT: ld3r.2d { v0, v1, v2 }, [x0], x8
3355 ; CHECK-NEXT: str x0, [x1]
3357 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3r.v2i64.p0(ptr %A)
3358 %tmp = getelementptr i64, ptr %A, i64 %inc
3359 store ptr %tmp, ptr %ptr
3360 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
3363 declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3r.v2i64.p0(ptr) nounwind readonly
3365 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3366 ; CHECK-LABEL: test_v1i64_post_imm_ld3r:
3368 ; CHECK-NEXT: ld3r.1d { v0, v1, v2 }, [x0], #24
3369 ; CHECK-NEXT: str x0, [x1]
3371 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3r.v1i64.p0(ptr %A)
3372 %tmp = getelementptr i64, ptr %A, i32 3
3373 store ptr %tmp, ptr %ptr
3374 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
3377 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3378 ; CHECK-LABEL: test_v1i64_post_reg_ld3r:
3380 ; CHECK-NEXT: lsl x8, x2, #3
3381 ; CHECK-NEXT: ld3r.1d { v0, v1, v2 }, [x0], x8
3382 ; CHECK-NEXT: str x0, [x1]
3384 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3r.v1i64.p0(ptr %A)
3385 %tmp = getelementptr i64, ptr %A, i64 %inc
3386 store ptr %tmp, ptr %ptr
3387 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
3390 declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3r.v1i64.p0(ptr) nounwind readonly
3393 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3394 ; CHECK-LABEL: test_v4f32_post_imm_ld3r:
3396 ; CHECK-NEXT: ld3r.4s { v0, v1, v2 }, [x0], #12
3397 ; CHECK-NEXT: str x0, [x1]
3399 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3r.v4f32.p0(ptr %A)
3400 %tmp = getelementptr float, ptr %A, i32 3
3401 store ptr %tmp, ptr %ptr
3402 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
3405 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3406 ; CHECK-LABEL: test_v4f32_post_reg_ld3r:
3408 ; CHECK-NEXT: lsl x8, x2, #2
3409 ; CHECK-NEXT: ld3r.4s { v0, v1, v2 }, [x0], x8
3410 ; CHECK-NEXT: str x0, [x1]
3412 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3r.v4f32.p0(ptr %A)
3413 %tmp = getelementptr float, ptr %A, i64 %inc
3414 store ptr %tmp, ptr %ptr
3415 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
3418 declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3r.v4f32.p0(ptr) nounwind readonly
3420 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3421 ; CHECK-LABEL: test_v2f32_post_imm_ld3r:
3423 ; CHECK-NEXT: ld3r.2s { v0, v1, v2 }, [x0], #12
3424 ; CHECK-NEXT: str x0, [x1]
3426 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3r.v2f32.p0(ptr %A)
3427 %tmp = getelementptr float, ptr %A, i32 3
3428 store ptr %tmp, ptr %ptr
3429 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
3432 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3433 ; CHECK-LABEL: test_v2f32_post_reg_ld3r:
3435 ; CHECK-NEXT: lsl x8, x2, #2
3436 ; CHECK-NEXT: ld3r.2s { v0, v1, v2 }, [x0], x8
3437 ; CHECK-NEXT: str x0, [x1]
3439 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3r.v2f32.p0(ptr %A)
3440 %tmp = getelementptr float, ptr %A, i64 %inc
3441 store ptr %tmp, ptr %ptr
3442 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
3445 declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3r.v2f32.p0(ptr) nounwind readonly
3448 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3449 ; CHECK-LABEL: test_v2f64_post_imm_ld3r:
3451 ; CHECK-NEXT: ld3r.2d { v0, v1, v2 }, [x0], #24
3452 ; CHECK-NEXT: str x0, [x1]
3454 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3r.v2f64.p0(ptr %A)
3455 %tmp = getelementptr double, ptr %A, i32 3
3456 store ptr %tmp, ptr %ptr
3457 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
3460 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3461 ; CHECK-LABEL: test_v2f64_post_reg_ld3r:
3463 ; CHECK-NEXT: lsl x8, x2, #3
3464 ; CHECK-NEXT: ld3r.2d { v0, v1, v2 }, [x0], x8
3465 ; CHECK-NEXT: str x0, [x1]
3467 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3r.v2f64.p0(ptr %A)
3468 %tmp = getelementptr double, ptr %A, i64 %inc
3469 store ptr %tmp, ptr %ptr
3470 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
3473 declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3r.v2f64.p0(ptr) nounwind readonly
3475 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld3r(ptr %A, ptr %ptr) nounwind {
3476 ; CHECK-LABEL: test_v1f64_post_imm_ld3r:
3478 ; CHECK-NEXT: ld3r.1d { v0, v1, v2 }, [x0], #24
3479 ; CHECK-NEXT: str x0, [x1]
3481 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3r.v1f64.p0(ptr %A)
3482 %tmp = getelementptr double, ptr %A, i32 3
3483 store ptr %tmp, ptr %ptr
3484 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
3487 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld3r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3488 ; CHECK-LABEL: test_v1f64_post_reg_ld3r:
3490 ; CHECK-NEXT: lsl x8, x2, #3
3491 ; CHECK-NEXT: ld3r.1d { v0, v1, v2 }, [x0], x8
3492 ; CHECK-NEXT: str x0, [x1]
3494 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3r.v1f64.p0(ptr %A)
3495 %tmp = getelementptr double, ptr %A, i64 %inc
3496 store ptr %tmp, ptr %ptr
3497 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
3500 declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3r.v1f64.p0(ptr) nounwind readonly
3503 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3504 ; CHECK-LABEL: test_v16i8_post_imm_ld4r:
3506 ; CHECK-NEXT: ld4r.16b { v0, v1, v2, v3 }, [x0], #4
3507 ; CHECK-NEXT: str x0, [x1]
3509 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4r.v16i8.p0(ptr %A)
3510 %tmp = getelementptr i8, ptr %A, i32 4
3511 store ptr %tmp, ptr %ptr
3512 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
3515 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3516 ; CHECK-LABEL: test_v16i8_post_reg_ld4r:
3518 ; CHECK-NEXT: ld4r.16b { v0, v1, v2, v3 }, [x0], x2
3519 ; CHECK-NEXT: str x0, [x1]
3521 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4r.v16i8.p0(ptr %A)
3522 %tmp = getelementptr i8, ptr %A, i64 %inc
3523 store ptr %tmp, ptr %ptr
3524 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
3527 declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4r.v16i8.p0(ptr) nounwind readonly
3530 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3531 ; CHECK-LABEL: test_v8i8_post_imm_ld4r:
3533 ; CHECK-NEXT: ld4r.8b { v0, v1, v2, v3 }, [x0], #4
3534 ; CHECK-NEXT: str x0, [x1]
3536 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4r.v8i8.p0(ptr %A)
3537 %tmp = getelementptr i8, ptr %A, i32 4
3538 store ptr %tmp, ptr %ptr
3539 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
3542 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3543 ; CHECK-LABEL: test_v8i8_post_reg_ld4r:
3545 ; CHECK-NEXT: ld4r.8b { v0, v1, v2, v3 }, [x0], x2
3546 ; CHECK-NEXT: str x0, [x1]
3548 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4r.v8i8.p0(ptr %A)
3549 %tmp = getelementptr i8, ptr %A, i64 %inc
3550 store ptr %tmp, ptr %ptr
3551 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
3554 declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4r.v8i8.p0(ptr) nounwind readonly
3557 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3558 ; CHECK-LABEL: test_v8i16_post_imm_ld4r:
3560 ; CHECK-NEXT: ld4r.8h { v0, v1, v2, v3 }, [x0], #8
3561 ; CHECK-NEXT: str x0, [x1]
3563 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4r.v8i16.p0(ptr %A)
3564 %tmp = getelementptr i16, ptr %A, i32 4
3565 store ptr %tmp, ptr %ptr
3566 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
3569 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3570 ; CHECK-LABEL: test_v8i16_post_reg_ld4r:
3572 ; CHECK-NEXT: lsl x8, x2, #1
3573 ; CHECK-NEXT: ld4r.8h { v0, v1, v2, v3 }, [x0], x8
3574 ; CHECK-NEXT: str x0, [x1]
3576 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4r.v8i16.p0(ptr %A)
3577 %tmp = getelementptr i16, ptr %A, i64 %inc
3578 store ptr %tmp, ptr %ptr
3579 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
3582 declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4r.v8i16.p0(ptr) nounwind readonly
3585 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3586 ; CHECK-LABEL: test_v4i16_post_imm_ld4r:
3588 ; CHECK-NEXT: ld4r.4h { v0, v1, v2, v3 }, [x0], #8
3589 ; CHECK-NEXT: str x0, [x1]
3591 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4r.v4i16.p0(ptr %A)
3592 %tmp = getelementptr i16, ptr %A, i32 4
3593 store ptr %tmp, ptr %ptr
3594 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
3597 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3598 ; CHECK-LABEL: test_v4i16_post_reg_ld4r:
3600 ; CHECK-NEXT: lsl x8, x2, #1
3601 ; CHECK-NEXT: ld4r.4h { v0, v1, v2, v3 }, [x0], x8
3602 ; CHECK-NEXT: str x0, [x1]
3604 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4r.v4i16.p0(ptr %A)
3605 %tmp = getelementptr i16, ptr %A, i64 %inc
3606 store ptr %tmp, ptr %ptr
3607 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
3610 declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4r.v4i16.p0(ptr) nounwind readonly
3613 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3614 ; CHECK-LABEL: test_v4i32_post_imm_ld4r:
3616 ; CHECK-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0], #16
3617 ; CHECK-NEXT: str x0, [x1]
3619 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4r.v4i32.p0(ptr %A)
3620 %tmp = getelementptr i32, ptr %A, i32 4
3621 store ptr %tmp, ptr %ptr
3622 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
3625 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3626 ; CHECK-LABEL: test_v4i32_post_reg_ld4r:
3628 ; CHECK-NEXT: lsl x8, x2, #2
3629 ; CHECK-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0], x8
3630 ; CHECK-NEXT: str x0, [x1]
3632 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4r.v4i32.p0(ptr %A)
3633 %tmp = getelementptr i32, ptr %A, i64 %inc
3634 store ptr %tmp, ptr %ptr
3635 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
3638 declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4r.v4i32.p0(ptr) nounwind readonly
3640 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3641 ; CHECK-LABEL: test_v2i32_post_imm_ld4r:
3643 ; CHECK-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0], #16
3644 ; CHECK-NEXT: str x0, [x1]
3646 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4r.v2i32.p0(ptr %A)
3647 %tmp = getelementptr i32, ptr %A, i32 4
3648 store ptr %tmp, ptr %ptr
3649 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
3652 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3653 ; CHECK-LABEL: test_v2i32_post_reg_ld4r:
3655 ; CHECK-NEXT: lsl x8, x2, #2
3656 ; CHECK-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0], x8
3657 ; CHECK-NEXT: str x0, [x1]
3659 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4r.v2i32.p0(ptr %A)
3660 %tmp = getelementptr i32, ptr %A, i64 %inc
3661 store ptr %tmp, ptr %ptr
3662 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
3665 declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4r.v2i32.p0(ptr) nounwind readonly
3668 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3669 ; CHECK-LABEL: test_v2i64_post_imm_ld4r:
3671 ; CHECK-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0], #32
3672 ; CHECK-NEXT: str x0, [x1]
3674 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4r.v2i64.p0(ptr %A)
3675 %tmp = getelementptr i64, ptr %A, i32 4
3676 store ptr %tmp, ptr %ptr
3677 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
3680 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3681 ; CHECK-LABEL: test_v2i64_post_reg_ld4r:
3683 ; CHECK-NEXT: lsl x8, x2, #3
3684 ; CHECK-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0], x8
3685 ; CHECK-NEXT: str x0, [x1]
3687 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4r.v2i64.p0(ptr %A)
3688 %tmp = getelementptr i64, ptr %A, i64 %inc
3689 store ptr %tmp, ptr %ptr
3690 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
3693 declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4r.v2i64.p0(ptr) nounwind readonly
3695 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3696 ; CHECK-LABEL: test_v1i64_post_imm_ld4r:
3698 ; CHECK-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0], #32
3699 ; CHECK-NEXT: str x0, [x1]
3701 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4r.v1i64.p0(ptr %A)
3702 %tmp = getelementptr i64, ptr %A, i32 4
3703 store ptr %tmp, ptr %ptr
3704 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
3707 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3708 ; CHECK-LABEL: test_v1i64_post_reg_ld4r:
3710 ; CHECK-NEXT: lsl x8, x2, #3
3711 ; CHECK-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0], x8
3712 ; CHECK-NEXT: str x0, [x1]
3714 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4r.v1i64.p0(ptr %A)
3715 %tmp = getelementptr i64, ptr %A, i64 %inc
3716 store ptr %tmp, ptr %ptr
3717 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
3720 declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4r.v1i64.p0(ptr) nounwind readonly
3723 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3724 ; CHECK-LABEL: test_v4f32_post_imm_ld4r:
3726 ; CHECK-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0], #16
3727 ; CHECK-NEXT: str x0, [x1]
3729 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4r.v4f32.p0(ptr %A)
3730 %tmp = getelementptr float, ptr %A, i32 4
3731 store ptr %tmp, ptr %ptr
3732 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
3735 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3736 ; CHECK-LABEL: test_v4f32_post_reg_ld4r:
3738 ; CHECK-NEXT: lsl x8, x2, #2
3739 ; CHECK-NEXT: ld4r.4s { v0, v1, v2, v3 }, [x0], x8
3740 ; CHECK-NEXT: str x0, [x1]
3742 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4r.v4f32.p0(ptr %A)
3743 %tmp = getelementptr float, ptr %A, i64 %inc
3744 store ptr %tmp, ptr %ptr
3745 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
3748 declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4r.v4f32.p0(ptr) nounwind readonly
3750 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3751 ; CHECK-LABEL: test_v2f32_post_imm_ld4r:
3753 ; CHECK-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0], #16
3754 ; CHECK-NEXT: str x0, [x1]
3756 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4r.v2f32.p0(ptr %A)
3757 %tmp = getelementptr float, ptr %A, i32 4
3758 store ptr %tmp, ptr %ptr
3759 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
3762 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3763 ; CHECK-LABEL: test_v2f32_post_reg_ld4r:
3765 ; CHECK-NEXT: lsl x8, x2, #2
3766 ; CHECK-NEXT: ld4r.2s { v0, v1, v2, v3 }, [x0], x8
3767 ; CHECK-NEXT: str x0, [x1]
3769 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4r.v2f32.p0(ptr %A)
3770 %tmp = getelementptr float, ptr %A, i64 %inc
3771 store ptr %tmp, ptr %ptr
3772 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
3775 declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4r.v2f32.p0(ptr) nounwind readonly
3778 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3779 ; CHECK-LABEL: test_v2f64_post_imm_ld4r:
3781 ; CHECK-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0], #32
3782 ; CHECK-NEXT: str x0, [x1]
3784 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4r.v2f64.p0(ptr %A)
3785 %tmp = getelementptr double, ptr %A, i32 4
3786 store ptr %tmp, ptr %ptr
3787 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
3790 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3791 ; CHECK-LABEL: test_v2f64_post_reg_ld4r:
3793 ; CHECK-NEXT: lsl x8, x2, #3
3794 ; CHECK-NEXT: ld4r.2d { v0, v1, v2, v3 }, [x0], x8
3795 ; CHECK-NEXT: str x0, [x1]
3797 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4r.v2f64.p0(ptr %A)
3798 %tmp = getelementptr double, ptr %A, i64 %inc
3799 store ptr %tmp, ptr %ptr
3800 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
3803 declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4r.v2f64.p0(ptr) nounwind readonly
3805 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld4r(ptr %A, ptr %ptr) nounwind {
3806 ; CHECK-LABEL: test_v1f64_post_imm_ld4r:
3808 ; CHECK-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0], #32
3809 ; CHECK-NEXT: str x0, [x1]
3811 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4r.v1f64.p0(ptr %A)
3812 %tmp = getelementptr double, ptr %A, i32 4
3813 store ptr %tmp, ptr %ptr
3814 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
3817 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld4r(ptr %A, ptr %ptr, i64 %inc) nounwind {
3818 ; CHECK-LABEL: test_v1f64_post_reg_ld4r:
3820 ; CHECK-NEXT: lsl x8, x2, #3
3821 ; CHECK-NEXT: ld4r.1d { v0, v1, v2, v3 }, [x0], x8
3822 ; CHECK-NEXT: str x0, [x1]
3824 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4r.v1f64.p0(ptr %A)
3825 %tmp = getelementptr double, ptr %A, i64 %inc
3826 store ptr %tmp, ptr %ptr
3827 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
3830 declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4r.v1f64.p0(ptr) nounwind readonly
3833 define { <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld2lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
3834 ; CHECK-LABEL: test_v16i8_post_imm_ld2lane:
3836 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
3837 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
3838 ; CHECK-NEXT: ld2.b { v0, v1 }[0], [x0], #2
3839 ; CHECK-NEXT: str x0, [x1]
3841 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, i64 0, ptr %A)
3842 %tmp = getelementptr i8, ptr %A, i32 2
3843 store ptr %tmp, ptr %ptr
3844 ret { <16 x i8>, <16 x i8> } %ld2
3847 define { <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <16 x i8> %B, <16 x i8> %C) nounwind {
3848 ; CHECK-LABEL: test_v16i8_post_reg_ld2lane:
3850 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
3851 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
3852 ; CHECK-NEXT: ld2.b { v0, v1 }[0], [x0], x2
3853 ; CHECK-NEXT: str x0, [x1]
3855 %ld2 = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, i64 0, ptr %A)
3856 %tmp = getelementptr i8, ptr %A, i64 %inc
3857 store ptr %tmp, ptr %ptr
3858 ret { <16 x i8>, <16 x i8> } %ld2
3861 declare { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8>, <16 x i8>, i64, ptr) nounwind readonly
3864 define { <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld2lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
3865 ; CHECK-LABEL: test_v8i8_post_imm_ld2lane:
3867 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
3868 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
3869 ; CHECK-NEXT: ld2.b { v0, v1 }[0], [x0], #2
3870 ; CHECK-NEXT: str x0, [x1]
3872 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, i64 0, ptr %A)
3873 %tmp = getelementptr i8, ptr %A, i32 2
3874 store ptr %tmp, ptr %ptr
3875 ret { <8 x i8>, <8 x i8> } %ld2
3878 define { <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <8 x i8> %B, <8 x i8> %C) nounwind {
3879 ; CHECK-LABEL: test_v8i8_post_reg_ld2lane:
3881 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
3882 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
3883 ; CHECK-NEXT: ld2.b { v0, v1 }[0], [x0], x2
3884 ; CHECK-NEXT: str x0, [x1]
3886 %ld2 = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, i64 0, ptr %A)
3887 %tmp = getelementptr i8, ptr %A, i64 %inc
3888 store ptr %tmp, ptr %ptr
3889 ret { <8 x i8>, <8 x i8> } %ld2
3892 declare { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2lane.v8i8.p0(<8 x i8>, <8 x i8>, i64, ptr) nounwind readonly
3895 define { <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld2lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
3896 ; CHECK-LABEL: test_v8i16_post_imm_ld2lane:
3898 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
3899 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
3900 ; CHECK-NEXT: ld2.h { v0, v1 }[0], [x0], #4
3901 ; CHECK-NEXT: str x0, [x1]
3903 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, i64 0, ptr %A)
3904 %tmp = getelementptr i16, ptr %A, i32 2
3905 store ptr %tmp, ptr %ptr
3906 ret { <8 x i16>, <8 x i16> } %ld2
3909 define { <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <8 x i16> %B, <8 x i16> %C) nounwind {
3910 ; CHECK-LABEL: test_v8i16_post_reg_ld2lane:
3912 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
3913 ; CHECK-NEXT: lsl x8, x2, #1
3914 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
3915 ; CHECK-NEXT: ld2.h { v0, v1 }[0], [x0], x8
3916 ; CHECK-NEXT: str x0, [x1]
3918 %ld2 = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, i64 0, ptr %A)
3919 %tmp = getelementptr i16, ptr %A, i64 %inc
3920 store ptr %tmp, ptr %ptr
3921 ret { <8 x i16>, <8 x i16> } %ld2
3924 declare { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16>, <8 x i16>, i64, ptr) nounwind readonly
3927 define { <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld2lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
3928 ; CHECK-LABEL: test_v4i16_post_imm_ld2lane:
3930 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
3931 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
3932 ; CHECK-NEXT: ld2.h { v0, v1 }[0], [x0], #4
3933 ; CHECK-NEXT: str x0, [x1]
3935 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, i64 0, ptr %A)
3936 %tmp = getelementptr i16, ptr %A, i32 2
3937 store ptr %tmp, ptr %ptr
3938 ret { <4 x i16>, <4 x i16> } %ld2
3941 define { <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <4 x i16> %B, <4 x i16> %C) nounwind {
3942 ; CHECK-LABEL: test_v4i16_post_reg_ld2lane:
3944 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
3945 ; CHECK-NEXT: lsl x8, x2, #1
3946 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
3947 ; CHECK-NEXT: ld2.h { v0, v1 }[0], [x0], x8
3948 ; CHECK-NEXT: str x0, [x1]
3950 %ld2 = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, i64 0, ptr %A)
3951 %tmp = getelementptr i16, ptr %A, i64 %inc
3952 store ptr %tmp, ptr %ptr
3953 ret { <4 x i16>, <4 x i16> } %ld2
3956 declare { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2lane.v4i16.p0(<4 x i16>, <4 x i16>, i64, ptr) nounwind readonly
3959 define { <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld2lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
3960 ; CHECK-LABEL: test_v4i32_post_imm_ld2lane:
3962 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
3963 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
3964 ; CHECK-NEXT: ld2.s { v0, v1 }[0], [x0], #8
3965 ; CHECK-NEXT: str x0, [x1]
3967 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, i64 0, ptr %A)
3968 %tmp = getelementptr i32, ptr %A, i32 2
3969 store ptr %tmp, ptr %ptr
3970 ret { <4 x i32>, <4 x i32> } %ld2
3973 define { <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <4 x i32> %B, <4 x i32> %C) nounwind {
3974 ; CHECK-LABEL: test_v4i32_post_reg_ld2lane:
3976 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
3977 ; CHECK-NEXT: lsl x8, x2, #2
3978 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
3979 ; CHECK-NEXT: ld2.s { v0, v1 }[0], [x0], x8
3980 ; CHECK-NEXT: str x0, [x1]
3982 %ld2 = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, i64 0, ptr %A)
3983 %tmp = getelementptr i32, ptr %A, i64 %inc
3984 store ptr %tmp, ptr %ptr
3985 ret { <4 x i32>, <4 x i32> } %ld2
3988 declare { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32>, <4 x i32>, i64, ptr) nounwind readonly
3991 define { <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld2lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
3992 ; CHECK-LABEL: test_v2i32_post_imm_ld2lane:
3994 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
3995 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
3996 ; CHECK-NEXT: ld2.s { v0, v1 }[0], [x0], #8
3997 ; CHECK-NEXT: str x0, [x1]
3999 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, i64 0, ptr %A)
4000 %tmp = getelementptr i32, ptr %A, i32 2
4001 store ptr %tmp, ptr %ptr
4002 ret { <2 x i32>, <2 x i32> } %ld2
4005 define { <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <2 x i32> %B, <2 x i32> %C) nounwind {
4006 ; CHECK-LABEL: test_v2i32_post_reg_ld2lane:
4008 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
4009 ; CHECK-NEXT: lsl x8, x2, #2
4010 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
4011 ; CHECK-NEXT: ld2.s { v0, v1 }[0], [x0], x8
4012 ; CHECK-NEXT: str x0, [x1]
4014 %ld2 = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, i64 0, ptr %A)
4015 %tmp = getelementptr i32, ptr %A, i64 %inc
4016 store ptr %tmp, ptr %ptr
4017 ret { <2 x i32>, <2 x i32> } %ld2
4020 declare { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2lane.v2i32.p0(<2 x i32>, <2 x i32>, i64, ptr) nounwind readonly
4023 define { <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld2lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
4024 ; CHECK-LABEL: test_v2i64_post_imm_ld2lane:
4026 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
4027 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
4028 ; CHECK-NEXT: ld2.d { v0, v1 }[0], [x0], #16
4029 ; CHECK-NEXT: str x0, [x1]
4031 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, i64 0, ptr %A)
4032 %tmp = getelementptr i64, ptr %A, i32 2
4033 store ptr %tmp, ptr %ptr
4034 ret { <2 x i64>, <2 x i64> } %ld2
4037 define { <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <2 x i64> %B, <2 x i64> %C) nounwind {
4038 ; CHECK-LABEL: test_v2i64_post_reg_ld2lane:
4040 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
4041 ; CHECK-NEXT: lsl x8, x2, #3
4042 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
4043 ; CHECK-NEXT: ld2.d { v0, v1 }[0], [x0], x8
4044 ; CHECK-NEXT: str x0, [x1]
4046 %ld2 = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, i64 0, ptr %A)
4047 %tmp = getelementptr i64, ptr %A, i64 %inc
4048 store ptr %tmp, ptr %ptr
4049 ret { <2 x i64>, <2 x i64> } %ld2
4052 declare { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64>, <2 x i64>, i64, ptr) nounwind readonly
4055 define { <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld2lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
4056 ; CHECK-LABEL: test_v1i64_post_imm_ld2lane:
4058 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
4059 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
4060 ; CHECK-NEXT: ld2.d { v0, v1 }[0], [x0], #16
4061 ; CHECK-NEXT: str x0, [x1]
4063 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, i64 0, ptr %A)
4064 %tmp = getelementptr i64, ptr %A, i32 2
4065 store ptr %tmp, ptr %ptr
4066 ret { <1 x i64>, <1 x i64> } %ld2
4069 define { <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <1 x i64> %B, <1 x i64> %C) nounwind {
4070 ; CHECK-LABEL: test_v1i64_post_reg_ld2lane:
4072 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
4073 ; CHECK-NEXT: lsl x8, x2, #3
4074 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
4075 ; CHECK-NEXT: ld2.d { v0, v1 }[0], [x0], x8
4076 ; CHECK-NEXT: str x0, [x1]
4078 %ld2 = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, i64 0, ptr %A)
4079 %tmp = getelementptr i64, ptr %A, i64 %inc
4080 store ptr %tmp, ptr %ptr
4081 ret { <1 x i64>, <1 x i64> } %ld2
4084 declare { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2lane.v1i64.p0(<1 x i64>, <1 x i64>, i64, ptr) nounwind readonly
4087 define { <4 x float>, <4 x float> } @test_v4f32_post_imm_ld2lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C) nounwind {
4088 ; CHECK-LABEL: test_v4f32_post_imm_ld2lane:
4090 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
4091 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
4092 ; CHECK-NEXT: ld2.s { v0, v1 }[0], [x0], #8
4093 ; CHECK-NEXT: str x0, [x1]
4095 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2lane.v4f32.p0(<4 x float> %B, <4 x float> %C, i64 0, ptr %A)
4096 %tmp = getelementptr float, ptr %A, i32 2
4097 store ptr %tmp, ptr %ptr
4098 ret { <4 x float>, <4 x float> } %ld2
4101 define { <4 x float>, <4 x float> } @test_v4f32_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <4 x float> %B, <4 x float> %C) nounwind {
4102 ; CHECK-LABEL: test_v4f32_post_reg_ld2lane:
4104 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
4105 ; CHECK-NEXT: lsl x8, x2, #2
4106 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
4107 ; CHECK-NEXT: ld2.s { v0, v1 }[0], [x0], x8
4108 ; CHECK-NEXT: str x0, [x1]
4110 %ld2 = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2lane.v4f32.p0(<4 x float> %B, <4 x float> %C, i64 0, ptr %A)
4111 %tmp = getelementptr float, ptr %A, i64 %inc
4112 store ptr %tmp, ptr %ptr
4113 ret { <4 x float>, <4 x float> } %ld2
4116 declare { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld2lane.v4f32.p0(<4 x float>, <4 x float>, i64, ptr) nounwind readonly
4119 define { <2 x float>, <2 x float> } @test_v2f32_post_imm_ld2lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C) nounwind {
4120 ; CHECK-LABEL: test_v2f32_post_imm_ld2lane:
4122 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
4123 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
4124 ; CHECK-NEXT: ld2.s { v0, v1 }[0], [x0], #8
4125 ; CHECK-NEXT: str x0, [x1]
4127 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2lane.v2f32.p0(<2 x float> %B, <2 x float> %C, i64 0, ptr %A)
4128 %tmp = getelementptr float, ptr %A, i32 2
4129 store ptr %tmp, ptr %ptr
4130 ret { <2 x float>, <2 x float> } %ld2
4133 define { <2 x float>, <2 x float> } @test_v2f32_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <2 x float> %B, <2 x float> %C) nounwind {
4134 ; CHECK-LABEL: test_v2f32_post_reg_ld2lane:
4136 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
4137 ; CHECK-NEXT: lsl x8, x2, #2
4138 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
4139 ; CHECK-NEXT: ld2.s { v0, v1 }[0], [x0], x8
4140 ; CHECK-NEXT: str x0, [x1]
4142 %ld2 = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2lane.v2f32.p0(<2 x float> %B, <2 x float> %C, i64 0, ptr %A)
4143 %tmp = getelementptr float, ptr %A, i64 %inc
4144 store ptr %tmp, ptr %ptr
4145 ret { <2 x float>, <2 x float> } %ld2
4148 declare { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld2lane.v2f32.p0(<2 x float>, <2 x float>, i64, ptr) nounwind readonly
4151 define { <2 x double>, <2 x double> } @test_v2f64_post_imm_ld2lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C) nounwind {
4152 ; CHECK-LABEL: test_v2f64_post_imm_ld2lane:
4154 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
4155 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
4156 ; CHECK-NEXT: ld2.d { v0, v1 }[0], [x0], #16
4157 ; CHECK-NEXT: str x0, [x1]
4159 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2lane.v2f64.p0(<2 x double> %B, <2 x double> %C, i64 0, ptr %A)
4160 %tmp = getelementptr double, ptr %A, i32 2
4161 store ptr %tmp, ptr %ptr
4162 ret { <2 x double>, <2 x double> } %ld2
4165 define { <2 x double>, <2 x double> } @test_v2f64_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <2 x double> %B, <2 x double> %C) nounwind {
4166 ; CHECK-LABEL: test_v2f64_post_reg_ld2lane:
4168 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
4169 ; CHECK-NEXT: lsl x8, x2, #3
4170 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
4171 ; CHECK-NEXT: ld2.d { v0, v1 }[0], [x0], x8
4172 ; CHECK-NEXT: str x0, [x1]
4174 %ld2 = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2lane.v2f64.p0(<2 x double> %B, <2 x double> %C, i64 0, ptr %A)
4175 %tmp = getelementptr double, ptr %A, i64 %inc
4176 store ptr %tmp, ptr %ptr
4177 ret { <2 x double>, <2 x double> } %ld2
4180 declare { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld2lane.v2f64.p0(<2 x double>, <2 x double>, i64, ptr) nounwind readonly
4183 define { <1 x double>, <1 x double> } @test_v1f64_post_imm_ld2lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C) nounwind {
4184 ; CHECK-LABEL: test_v1f64_post_imm_ld2lane:
4186 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
4187 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
4188 ; CHECK-NEXT: ld2.d { v0, v1 }[0], [x0], #16
4189 ; CHECK-NEXT: str x0, [x1]
4191 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2lane.v1f64.p0(<1 x double> %B, <1 x double> %C, i64 0, ptr %A)
4192 %tmp = getelementptr double, ptr %A, i32 2
4193 store ptr %tmp, ptr %ptr
4194 ret { <1 x double>, <1 x double> } %ld2
4197 define { <1 x double>, <1 x double> } @test_v1f64_post_reg_ld2lane(ptr %A, ptr %ptr, i64 %inc, <1 x double> %B, <1 x double> %C) nounwind {
4198 ; CHECK-LABEL: test_v1f64_post_reg_ld2lane:
4200 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
4201 ; CHECK-NEXT: lsl x8, x2, #3
4202 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
4203 ; CHECK-NEXT: ld2.d { v0, v1 }[0], [x0], x8
4204 ; CHECK-NEXT: str x0, [x1]
4206 %ld2 = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2lane.v1f64.p0(<1 x double> %B, <1 x double> %C, i64 0, ptr %A)
4207 %tmp = getelementptr double, ptr %A, i64 %inc
4208 store ptr %tmp, ptr %ptr
4209 ret { <1 x double>, <1 x double> } %ld2
4212 declare { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2lane.v1f64.p0(<1 x double>, <1 x double>, i64, ptr) nounwind readonly
4215 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld3lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
4216 ; CHECK-LABEL: test_v16i8_post_imm_ld3lane:
4218 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4219 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4220 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4221 ; CHECK-NEXT: ld3.b { v0, v1, v2 }[0], [x0], #3
4222 ; CHECK-NEXT: str x0, [x1]
4224 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, ptr %A)
4225 %tmp = getelementptr i8, ptr %A, i32 3
4226 store ptr %tmp, ptr %ptr
4227 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
4230 define { <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
4231 ; CHECK-LABEL: test_v16i8_post_reg_ld3lane:
4233 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4234 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4235 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4236 ; CHECK-NEXT: ld3.b { v0, v1, v2 }[0], [x0], x2
4237 ; CHECK-NEXT: str x0, [x1]
4239 %ld3 = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, ptr %A)
4240 %tmp = getelementptr i8, ptr %A, i64 %inc
4241 store ptr %tmp, ptr %ptr
4242 ret { <16 x i8>, <16 x i8>, <16 x i8> } %ld3
4245 declare { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, i64, ptr) nounwind readonly
4248 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld3lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
4249 ; CHECK-LABEL: test_v8i8_post_imm_ld3lane:
4251 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4252 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4253 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4254 ; CHECK-NEXT: ld3.b { v0, v1, v2 }[0], [x0], #3
4255 ; CHECK-NEXT: str x0, [x1]
4257 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, ptr %A)
4258 %tmp = getelementptr i8, ptr %A, i32 3
4259 store ptr %tmp, ptr %ptr
4260 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
4263 define { <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
4264 ; CHECK-LABEL: test_v8i8_post_reg_ld3lane:
4266 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4267 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4268 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4269 ; CHECK-NEXT: ld3.b { v0, v1, v2 }[0], [x0], x2
4270 ; CHECK-NEXT: str x0, [x1]
4272 %ld3 = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, ptr %A)
4273 %tmp = getelementptr i8, ptr %A, i64 %inc
4274 store ptr %tmp, ptr %ptr
4275 ret { <8 x i8>, <8 x i8>, <8 x i8> } %ld3
4278 declare { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3lane.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, i64, ptr) nounwind readonly
4281 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld3lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
4282 ; CHECK-LABEL: test_v8i16_post_imm_ld3lane:
4284 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4285 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4286 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4287 ; CHECK-NEXT: ld3.h { v0, v1, v2 }[0], [x0], #6
4288 ; CHECK-NEXT: str x0, [x1]
4290 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, ptr %A)
4291 %tmp = getelementptr i16, ptr %A, i32 3
4292 store ptr %tmp, ptr %ptr
4293 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
4296 define { <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
4297 ; CHECK-LABEL: test_v8i16_post_reg_ld3lane:
4299 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4300 ; CHECK-NEXT: lsl x8, x2, #1
4301 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4302 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4303 ; CHECK-NEXT: ld3.h { v0, v1, v2 }[0], [x0], x8
4304 ; CHECK-NEXT: str x0, [x1]
4306 %ld3 = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, ptr %A)
4307 %tmp = getelementptr i16, ptr %A, i64 %inc
4308 store ptr %tmp, ptr %ptr
4309 ret { <8 x i16>, <8 x i16>, <8 x i16> } %ld3
4312 declare { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, i64, ptr) nounwind readonly
4315 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld3lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
4316 ; CHECK-LABEL: test_v4i16_post_imm_ld3lane:
4318 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4319 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4320 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4321 ; CHECK-NEXT: ld3.h { v0, v1, v2 }[0], [x0], #6
4322 ; CHECK-NEXT: str x0, [x1]
4324 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, ptr %A)
4325 %tmp = getelementptr i16, ptr %A, i32 3
4326 store ptr %tmp, ptr %ptr
4327 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
4330 define { <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
4331 ; CHECK-LABEL: test_v4i16_post_reg_ld3lane:
4333 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4334 ; CHECK-NEXT: lsl x8, x2, #1
4335 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4336 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4337 ; CHECK-NEXT: ld3.h { v0, v1, v2 }[0], [x0], x8
4338 ; CHECK-NEXT: str x0, [x1]
4340 %ld3 = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, ptr %A)
4341 %tmp = getelementptr i16, ptr %A, i64 %inc
4342 store ptr %tmp, ptr %ptr
4343 ret { <4 x i16>, <4 x i16>, <4 x i16> } %ld3
4346 declare { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3lane.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, i64, ptr) nounwind readonly
4349 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld3lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
4350 ; CHECK-LABEL: test_v4i32_post_imm_ld3lane:
4352 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4353 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4354 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4355 ; CHECK-NEXT: ld3.s { v0, v1, v2 }[0], [x0], #12
4356 ; CHECK-NEXT: str x0, [x1]
4358 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, ptr %A)
4359 %tmp = getelementptr i32, ptr %A, i32 3
4360 store ptr %tmp, ptr %ptr
4361 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
4364 define { <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
4365 ; CHECK-LABEL: test_v4i32_post_reg_ld3lane:
4367 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4368 ; CHECK-NEXT: lsl x8, x2, #2
4369 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4370 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4371 ; CHECK-NEXT: ld3.s { v0, v1, v2 }[0], [x0], x8
4372 ; CHECK-NEXT: str x0, [x1]
4374 %ld3 = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, ptr %A)
4375 %tmp = getelementptr i32, ptr %A, i64 %inc
4376 store ptr %tmp, ptr %ptr
4377 ret { <4 x i32>, <4 x i32>, <4 x i32> } %ld3
4380 declare { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, i64, ptr) nounwind readonly
4383 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld3lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
4384 ; CHECK-LABEL: test_v2i32_post_imm_ld3lane:
4386 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4387 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4388 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4389 ; CHECK-NEXT: ld3.s { v0, v1, v2 }[0], [x0], #12
4390 ; CHECK-NEXT: str x0, [x1]
4392 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, ptr %A)
4393 %tmp = getelementptr i32, ptr %A, i32 3
4394 store ptr %tmp, ptr %ptr
4395 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
4398 define { <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
4399 ; CHECK-LABEL: test_v2i32_post_reg_ld3lane:
4401 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4402 ; CHECK-NEXT: lsl x8, x2, #2
4403 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4404 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4405 ; CHECK-NEXT: ld3.s { v0, v1, v2 }[0], [x0], x8
4406 ; CHECK-NEXT: str x0, [x1]
4408 %ld3 = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, ptr %A)
4409 %tmp = getelementptr i32, ptr %A, i64 %inc
4410 store ptr %tmp, ptr %ptr
4411 ret { <2 x i32>, <2 x i32>, <2 x i32> } %ld3
4414 declare { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3lane.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, i64, ptr) nounwind readonly
4417 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld3lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
4418 ; CHECK-LABEL: test_v2i64_post_imm_ld3lane:
4420 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4421 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4422 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4423 ; CHECK-NEXT: ld3.d { v0, v1, v2 }[0], [x0], #24
4424 ; CHECK-NEXT: str x0, [x1]
4426 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, ptr %A)
4427 %tmp = getelementptr i64, ptr %A, i32 3
4428 store ptr %tmp, ptr %ptr
4429 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
4432 define { <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
4433 ; CHECK-LABEL: test_v2i64_post_reg_ld3lane:
4435 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4436 ; CHECK-NEXT: lsl x8, x2, #3
4437 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4438 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4439 ; CHECK-NEXT: ld3.d { v0, v1, v2 }[0], [x0], x8
4440 ; CHECK-NEXT: str x0, [x1]
4442 %ld3 = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, ptr %A)
4443 %tmp = getelementptr i64, ptr %A, i64 %inc
4444 store ptr %tmp, ptr %ptr
4445 ret { <2 x i64>, <2 x i64>, <2 x i64> } %ld3
4448 declare { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, i64, ptr) nounwind readonly
4451 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld3lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
4452 ; CHECK-LABEL: test_v1i64_post_imm_ld3lane:
4454 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4455 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4456 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4457 ; CHECK-NEXT: ld3.d { v0, v1, v2 }[0], [x0], #24
4458 ; CHECK-NEXT: str x0, [x1]
4460 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, ptr %A)
4461 %tmp = getelementptr i64, ptr %A, i32 3
4462 store ptr %tmp, ptr %ptr
4463 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
4466 define { <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
4467 ; CHECK-LABEL: test_v1i64_post_reg_ld3lane:
4469 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4470 ; CHECK-NEXT: lsl x8, x2, #3
4471 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4472 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4473 ; CHECK-NEXT: ld3.d { v0, v1, v2 }[0], [x0], x8
4474 ; CHECK-NEXT: str x0, [x1]
4476 %ld3 = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, ptr %A)
4477 %tmp = getelementptr i64, ptr %A, i64 %inc
4478 store ptr %tmp, ptr %ptr
4479 ret { <1 x i64>, <1 x i64>, <1 x i64> } %ld3
4482 declare { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3lane.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, i64, ptr) nounwind readonly
4485 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld3lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
4486 ; CHECK-LABEL: test_v4f32_post_imm_ld3lane:
4488 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4489 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4490 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4491 ; CHECK-NEXT: ld3.s { v0, v1, v2 }[0], [x0], #12
4492 ; CHECK-NEXT: str x0, [x1]
4494 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, ptr %A)
4495 %tmp = getelementptr float, ptr %A, i32 3
4496 store ptr %tmp, ptr %ptr
4497 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
4500 define { <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
4501 ; CHECK-LABEL: test_v4f32_post_reg_ld3lane:
4503 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4504 ; CHECK-NEXT: lsl x8, x2, #2
4505 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4506 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4507 ; CHECK-NEXT: ld3.s { v0, v1, v2 }[0], [x0], x8
4508 ; CHECK-NEXT: str x0, [x1]
4510 %ld3 = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, ptr %A)
4511 %tmp = getelementptr float, ptr %A, i64 %inc
4512 store ptr %tmp, ptr %ptr
4513 ret { <4 x float>, <4 x float>, <4 x float> } %ld3
4516 declare { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld3lane.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, i64, ptr) nounwind readonly
4519 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld3lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
4520 ; CHECK-LABEL: test_v2f32_post_imm_ld3lane:
4522 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4523 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4524 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4525 ; CHECK-NEXT: ld3.s { v0, v1, v2 }[0], [x0], #12
4526 ; CHECK-NEXT: str x0, [x1]
4528 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, ptr %A)
4529 %tmp = getelementptr float, ptr %A, i32 3
4530 store ptr %tmp, ptr %ptr
4531 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
4534 define { <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
4535 ; CHECK-LABEL: test_v2f32_post_reg_ld3lane:
4537 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4538 ; CHECK-NEXT: lsl x8, x2, #2
4539 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4540 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4541 ; CHECK-NEXT: ld3.s { v0, v1, v2 }[0], [x0], x8
4542 ; CHECK-NEXT: str x0, [x1]
4544 %ld3 = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, ptr %A)
4545 %tmp = getelementptr float, ptr %A, i64 %inc
4546 store ptr %tmp, ptr %ptr
4547 ret { <2 x float>, <2 x float>, <2 x float> } %ld3
4550 declare { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld3lane.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, i64, ptr) nounwind readonly
4553 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld3lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
4554 ; CHECK-LABEL: test_v2f64_post_imm_ld3lane:
4556 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4557 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4558 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4559 ; CHECK-NEXT: ld3.d { v0, v1, v2 }[0], [x0], #24
4560 ; CHECK-NEXT: str x0, [x1]
4562 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, ptr %A)
4563 %tmp = getelementptr double, ptr %A, i32 3
4564 store ptr %tmp, ptr %ptr
4565 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
4568 define { <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
4569 ; CHECK-LABEL: test_v2f64_post_reg_ld3lane:
4571 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
4572 ; CHECK-NEXT: lsl x8, x2, #3
4573 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
4574 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
4575 ; CHECK-NEXT: ld3.d { v0, v1, v2 }[0], [x0], x8
4576 ; CHECK-NEXT: str x0, [x1]
4578 %ld3 = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, ptr %A)
4579 %tmp = getelementptr double, ptr %A, i64 %inc
4580 store ptr %tmp, ptr %ptr
4581 ret { <2 x double>, <2 x double>, <2 x double> } %ld3
4584 declare { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld3lane.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, i64, ptr) nounwind readonly
4587 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld3lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
4588 ; CHECK-LABEL: test_v1f64_post_imm_ld3lane:
4590 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4591 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4592 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4593 ; CHECK-NEXT: ld3.d { v0, v1, v2 }[0], [x0], #24
4594 ; CHECK-NEXT: str x0, [x1]
4596 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, ptr %A)
4597 %tmp = getelementptr double, ptr %A, i32 3
4598 store ptr %tmp, ptr %ptr
4599 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
4602 define { <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld3lane(ptr %A, ptr %ptr, i64 %inc, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
4603 ; CHECK-LABEL: test_v1f64_post_reg_ld3lane:
4605 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
4606 ; CHECK-NEXT: lsl x8, x2, #3
4607 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
4608 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
4609 ; CHECK-NEXT: ld3.d { v0, v1, v2 }[0], [x0], x8
4610 ; CHECK-NEXT: str x0, [x1]
4612 %ld3 = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, ptr %A)
4613 %tmp = getelementptr double, ptr %A, i64 %inc
4614 store ptr %tmp, ptr %ptr
4615 ret { <1 x double>, <1 x double>, <1 x double> } %ld3
4618 declare { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3lane.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, i64, ptr) nounwind readonly
4621 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_imm_ld4lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
4622 ; CHECK-LABEL: test_v16i8_post_imm_ld4lane:
4624 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4625 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4626 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4627 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4628 ; CHECK-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0], #4
4629 ; CHECK-NEXT: str x0, [x1]
4631 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, ptr %A)
4632 %tmp = getelementptr i8, ptr %A, i32 4
4633 store ptr %tmp, ptr %ptr
4634 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
4637 define { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @test_v16i8_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
4638 ; CHECK-LABEL: test_v16i8_post_reg_ld4lane:
4640 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4641 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4642 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4643 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4644 ; CHECK-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0], x2
4645 ; CHECK-NEXT: str x0, [x1]
4647 %ld4 = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, ptr %A)
4648 %tmp = getelementptr i8, ptr %A, i64 %inc
4649 store ptr %tmp, ptr %ptr
4650 ret { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } %ld4
4653 declare { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i64, ptr) nounwind readonly
4656 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_imm_ld4lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
4657 ; CHECK-LABEL: test_v8i8_post_imm_ld4lane:
4659 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4660 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4661 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4662 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4663 ; CHECK-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0], #4
4664 ; CHECK-NEXT: str x0, [x1]
4666 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, ptr %A)
4667 %tmp = getelementptr i8, ptr %A, i32 4
4668 store ptr %tmp, ptr %ptr
4669 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
4672 define { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @test_v8i8_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
4673 ; CHECK-LABEL: test_v8i8_post_reg_ld4lane:
4675 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4676 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4677 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4678 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4679 ; CHECK-NEXT: ld4.b { v0, v1, v2, v3 }[0], [x0], x2
4680 ; CHECK-NEXT: str x0, [x1]
4682 %ld4 = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, ptr %A)
4683 %tmp = getelementptr i8, ptr %A, i64 %inc
4684 store ptr %tmp, ptr %ptr
4685 ret { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } %ld4
4688 declare { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4lane.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i64, ptr) nounwind readonly
4691 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_imm_ld4lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
4692 ; CHECK-LABEL: test_v8i16_post_imm_ld4lane:
4694 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4695 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4696 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4697 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4698 ; CHECK-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0], #8
4699 ; CHECK-NEXT: str x0, [x1]
4701 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, ptr %A)
4702 %tmp = getelementptr i16, ptr %A, i32 4
4703 store ptr %tmp, ptr %ptr
4704 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
4707 define { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @test_v8i16_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
4708 ; CHECK-LABEL: test_v8i16_post_reg_ld4lane:
4710 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4711 ; CHECK-NEXT: lsl x8, x2, #1
4712 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4713 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4714 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4715 ; CHECK-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0], x8
4716 ; CHECK-NEXT: str x0, [x1]
4718 %ld4 = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, ptr %A)
4719 %tmp = getelementptr i16, ptr %A, i64 %inc
4720 store ptr %tmp, ptr %ptr
4721 ret { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } %ld4
4724 declare { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i64, ptr) nounwind readonly
4727 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_imm_ld4lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
4728 ; CHECK-LABEL: test_v4i16_post_imm_ld4lane:
4730 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4731 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4732 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4733 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4734 ; CHECK-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0], #8
4735 ; CHECK-NEXT: str x0, [x1]
4737 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, ptr %A)
4738 %tmp = getelementptr i16, ptr %A, i32 4
4739 store ptr %tmp, ptr %ptr
4740 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
4743 define { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @test_v4i16_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
4744 ; CHECK-LABEL: test_v4i16_post_reg_ld4lane:
4746 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4747 ; CHECK-NEXT: lsl x8, x2, #1
4748 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4749 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4750 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4751 ; CHECK-NEXT: ld4.h { v0, v1, v2, v3 }[0], [x0], x8
4752 ; CHECK-NEXT: str x0, [x1]
4754 %ld4 = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, ptr %A)
4755 %tmp = getelementptr i16, ptr %A, i64 %inc
4756 store ptr %tmp, ptr %ptr
4757 ret { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } %ld4
4760 declare { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4lane.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i64, ptr) nounwind readonly
4763 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_imm_ld4lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
4764 ; CHECK-LABEL: test_v4i32_post_imm_ld4lane:
4766 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4767 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4768 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4769 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4770 ; CHECK-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
4771 ; CHECK-NEXT: str x0, [x1]
4773 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, ptr %A)
4774 %tmp = getelementptr i32, ptr %A, i32 4
4775 store ptr %tmp, ptr %ptr
4776 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
4779 define { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @test_v4i32_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
4780 ; CHECK-LABEL: test_v4i32_post_reg_ld4lane:
4782 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4783 ; CHECK-NEXT: lsl x8, x2, #2
4784 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4785 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4786 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4787 ; CHECK-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], x8
4788 ; CHECK-NEXT: str x0, [x1]
4790 %ld4 = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, ptr %A)
4791 %tmp = getelementptr i32, ptr %A, i64 %inc
4792 store ptr %tmp, ptr %ptr
4793 ret { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } %ld4
4796 declare { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i64, ptr) nounwind readonly
4799 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_imm_ld4lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
4800 ; CHECK-LABEL: test_v2i32_post_imm_ld4lane:
4802 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4803 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4804 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4805 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4806 ; CHECK-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
4807 ; CHECK-NEXT: str x0, [x1]
4809 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, ptr %A)
4810 %tmp = getelementptr i32, ptr %A, i32 4
4811 store ptr %tmp, ptr %ptr
4812 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
4815 define { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @test_v2i32_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
4816 ; CHECK-LABEL: test_v2i32_post_reg_ld4lane:
4818 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4819 ; CHECK-NEXT: lsl x8, x2, #2
4820 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4821 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4822 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4823 ; CHECK-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], x8
4824 ; CHECK-NEXT: str x0, [x1]
4826 %ld4 = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, ptr %A)
4827 %tmp = getelementptr i32, ptr %A, i64 %inc
4828 store ptr %tmp, ptr %ptr
4829 ret { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } %ld4
4832 declare { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4lane.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i64, ptr) nounwind readonly
4835 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_imm_ld4lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
4836 ; CHECK-LABEL: test_v2i64_post_imm_ld4lane:
4838 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4839 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4840 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4841 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4842 ; CHECK-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
4843 ; CHECK-NEXT: str x0, [x1]
4845 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, ptr %A)
4846 %tmp = getelementptr i64, ptr %A, i32 4
4847 store ptr %tmp, ptr %ptr
4848 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
4851 define { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @test_v2i64_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
4852 ; CHECK-LABEL: test_v2i64_post_reg_ld4lane:
4854 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4855 ; CHECK-NEXT: lsl x8, x2, #3
4856 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4857 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4858 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4859 ; CHECK-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], x8
4860 ; CHECK-NEXT: str x0, [x1]
4862 %ld4 = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, ptr %A)
4863 %tmp = getelementptr i64, ptr %A, i64 %inc
4864 store ptr %tmp, ptr %ptr
4865 ret { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } %ld4
4868 declare { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, ptr) nounwind readonly
4871 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_imm_ld4lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
4872 ; CHECK-LABEL: test_v1i64_post_imm_ld4lane:
4874 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4875 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4876 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4877 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4878 ; CHECK-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
4879 ; CHECK-NEXT: str x0, [x1]
4881 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, ptr %A)
4882 %tmp = getelementptr i64, ptr %A, i32 4
4883 store ptr %tmp, ptr %ptr
4884 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
4887 define { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @test_v1i64_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
4888 ; CHECK-LABEL: test_v1i64_post_reg_ld4lane:
4890 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4891 ; CHECK-NEXT: lsl x8, x2, #3
4892 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4893 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4894 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4895 ; CHECK-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], x8
4896 ; CHECK-NEXT: str x0, [x1]
4898 %ld4 = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, ptr %A)
4899 %tmp = getelementptr i64, ptr %A, i64 %inc
4900 store ptr %tmp, ptr %ptr
4901 ret { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } %ld4
4904 declare { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4lane.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>, i64, ptr) nounwind readonly
4907 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_imm_ld4lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
4908 ; CHECK-LABEL: test_v4f32_post_imm_ld4lane:
4910 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4911 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4912 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4913 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4914 ; CHECK-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
4915 ; CHECK-NEXT: str x0, [x1]
4917 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, ptr %A)
4918 %tmp = getelementptr float, ptr %A, i32 4
4919 store ptr %tmp, ptr %ptr
4920 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
4923 define { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @test_v4f32_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
4924 ; CHECK-LABEL: test_v4f32_post_reg_ld4lane:
4926 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4927 ; CHECK-NEXT: lsl x8, x2, #2
4928 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4929 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4930 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4931 ; CHECK-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], x8
4932 ; CHECK-NEXT: str x0, [x1]
4934 %ld4 = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, ptr %A)
4935 %tmp = getelementptr float, ptr %A, i64 %inc
4936 store ptr %tmp, ptr %ptr
4937 ret { <4 x float>, <4 x float>, <4 x float>, <4 x float> } %ld4
4940 declare { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld4lane.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, <4 x float>, i64, ptr) nounwind readonly
4943 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_imm_ld4lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
4944 ; CHECK-LABEL: test_v2f32_post_imm_ld4lane:
4946 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4947 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4948 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4949 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4950 ; CHECK-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], #16
4951 ; CHECK-NEXT: str x0, [x1]
4953 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, ptr %A)
4954 %tmp = getelementptr float, ptr %A, i32 4
4955 store ptr %tmp, ptr %ptr
4956 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
4959 define { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @test_v2f32_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
4960 ; CHECK-LABEL: test_v2f32_post_reg_ld4lane:
4962 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4963 ; CHECK-NEXT: lsl x8, x2, #2
4964 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4965 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4966 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4967 ; CHECK-NEXT: ld4.s { v0, v1, v2, v3 }[0], [x0], x8
4968 ; CHECK-NEXT: str x0, [x1]
4970 %ld4 = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, ptr %A)
4971 %tmp = getelementptr float, ptr %A, i64 %inc
4972 store ptr %tmp, ptr %ptr
4973 ret { <2 x float>, <2 x float>, <2 x float>, <2 x float> } %ld4
4976 declare { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld4lane.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, <2 x float>, i64, ptr) nounwind readonly
4979 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_imm_ld4lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
4980 ; CHECK-LABEL: test_v2f64_post_imm_ld4lane:
4982 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4983 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4984 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4985 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4986 ; CHECK-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
4987 ; CHECK-NEXT: str x0, [x1]
4989 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, ptr %A)
4990 %tmp = getelementptr double, ptr %A, i32 4
4991 store ptr %tmp, ptr %ptr
4992 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
4995 define { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @test_v2f64_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
4996 ; CHECK-LABEL: test_v2f64_post_reg_ld4lane:
4998 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
4999 ; CHECK-NEXT: lsl x8, x2, #3
5000 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5001 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5002 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5003 ; CHECK-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], x8
5004 ; CHECK-NEXT: str x0, [x1]
5006 %ld4 = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, ptr %A)
5007 %tmp = getelementptr double, ptr %A, i64 %inc
5008 store ptr %tmp, ptr %ptr
5009 ret { <2 x double>, <2 x double>, <2 x double>, <2 x double> } %ld4
5012 declare { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld4lane.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, <2 x double>, i64, ptr) nounwind readonly
5015 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_imm_ld4lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
5016 ; CHECK-LABEL: test_v1f64_post_imm_ld4lane:
5018 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5019 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5020 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5021 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5022 ; CHECK-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], #32
5023 ; CHECK-NEXT: str x0, [x1]
5025 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, ptr %A)
5026 %tmp = getelementptr double, ptr %A, i32 4
5027 store ptr %tmp, ptr %ptr
5028 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
5031 define { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @test_v1f64_post_reg_ld4lane(ptr %A, ptr %ptr, i64 %inc, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
5032 ; CHECK-LABEL: test_v1f64_post_reg_ld4lane:
5034 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5035 ; CHECK-NEXT: lsl x8, x2, #3
5036 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5037 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5038 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5039 ; CHECK-NEXT: ld4.d { v0, v1, v2, v3 }[0], [x0], x8
5040 ; CHECK-NEXT: str x0, [x1]
5042 %ld4 = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, ptr %A)
5043 %tmp = getelementptr double, ptr %A, i64 %inc
5044 store ptr %tmp, ptr %ptr
5045 ret { <1 x double>, <1 x double>, <1 x double>, <1 x double> } %ld4
5048 declare { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4lane.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, <1 x double>, i64, ptr) nounwind readonly
5051 define ptr @test_v16i8_post_imm_st2(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
5052 ; CHECK-LABEL: test_v16i8_post_imm_st2:
5054 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5055 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5056 ; CHECK-NEXT: st2.16b { v0, v1 }, [x0], #32
5058 call void @llvm.aarch64.neon.st2.v16i8.p0(<16 x i8> %B, <16 x i8> %C, ptr %A)
5059 %tmp = getelementptr i8, ptr %A, i32 32
5063 define ptr @test_v16i8_post_reg_st2(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, i64 %inc) nounwind {
5064 ; CHECK-LABEL: test_v16i8_post_reg_st2:
5066 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5067 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5068 ; CHECK-NEXT: st2.16b { v0, v1 }, [x0], x2
5070 call void @llvm.aarch64.neon.st2.v16i8.p0(<16 x i8> %B, <16 x i8> %C, ptr %A)
5071 %tmp = getelementptr i8, ptr %A, i64 %inc
5075 declare void @llvm.aarch64.neon.st2.v16i8.p0(<16 x i8>, <16 x i8>, ptr)
5078 define ptr @test_v8i8_post_imm_st2(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
5079 ; CHECK-LABEL: test_v8i8_post_imm_st2:
5081 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5082 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5083 ; CHECK-NEXT: st2.8b { v0, v1 }, [x0], #16
5085 call void @llvm.aarch64.neon.st2.v8i8.p0(<8 x i8> %B, <8 x i8> %C, ptr %A)
5086 %tmp = getelementptr i8, ptr %A, i32 16
5090 define ptr @test_v8i8_post_reg_st2(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, i64 %inc) nounwind {
5091 ; CHECK-LABEL: test_v8i8_post_reg_st2:
5093 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5094 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5095 ; CHECK-NEXT: st2.8b { v0, v1 }, [x0], x2
5097 call void @llvm.aarch64.neon.st2.v8i8.p0(<8 x i8> %B, <8 x i8> %C, ptr %A)
5098 %tmp = getelementptr i8, ptr %A, i64 %inc
5102 declare void @llvm.aarch64.neon.st2.v8i8.p0(<8 x i8>, <8 x i8>, ptr)
5105 define ptr @test_v8i16_post_imm_st2(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
5106 ; CHECK-LABEL: test_v8i16_post_imm_st2:
5108 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5109 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5110 ; CHECK-NEXT: st2.8h { v0, v1 }, [x0], #32
5112 call void @llvm.aarch64.neon.st2.v8i16.p0(<8 x i16> %B, <8 x i16> %C, ptr %A)
5113 %tmp = getelementptr i16, ptr %A, i32 16
5117 define ptr @test_v8i16_post_reg_st2(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, i64 %inc) nounwind {
5118 ; CHECK-LABEL: test_v8i16_post_reg_st2:
5120 ; CHECK-NEXT: lsl x8, x2, #1
5121 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5122 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5123 ; CHECK-NEXT: st2.8h { v0, v1 }, [x0], x8
5125 call void @llvm.aarch64.neon.st2.v8i16.p0(<8 x i16> %B, <8 x i16> %C, ptr %A)
5126 %tmp = getelementptr i16, ptr %A, i64 %inc
5130 declare void @llvm.aarch64.neon.st2.v8i16.p0(<8 x i16>, <8 x i16>, ptr)
5133 define ptr @test_v4i16_post_imm_st2(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
5134 ; CHECK-LABEL: test_v4i16_post_imm_st2:
5136 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5137 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5138 ; CHECK-NEXT: st2.4h { v0, v1 }, [x0], #16
5140 call void @llvm.aarch64.neon.st2.v4i16.p0(<4 x i16> %B, <4 x i16> %C, ptr %A)
5141 %tmp = getelementptr i16, ptr %A, i32 8
5145 define ptr @test_v4i16_post_reg_st2(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, i64 %inc) nounwind {
5146 ; CHECK-LABEL: test_v4i16_post_reg_st2:
5148 ; CHECK-NEXT: lsl x8, x2, #1
5149 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5150 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5151 ; CHECK-NEXT: st2.4h { v0, v1 }, [x0], x8
5153 call void @llvm.aarch64.neon.st2.v4i16.p0(<4 x i16> %B, <4 x i16> %C, ptr %A)
5154 %tmp = getelementptr i16, ptr %A, i64 %inc
5158 declare void @llvm.aarch64.neon.st2.v4i16.p0(<4 x i16>, <4 x i16>, ptr)
5161 define ptr @test_v4i32_post_imm_st2(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
5162 ; CHECK-LABEL: test_v4i32_post_imm_st2:
5164 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5165 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5166 ; CHECK-NEXT: st2.4s { v0, v1 }, [x0], #32
5168 call void @llvm.aarch64.neon.st2.v4i32.p0(<4 x i32> %B, <4 x i32> %C, ptr %A)
5169 %tmp = getelementptr i32, ptr %A, i32 8
5173 define ptr @test_v4i32_post_reg_st2(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, i64 %inc) nounwind {
5174 ; CHECK-LABEL: test_v4i32_post_reg_st2:
5176 ; CHECK-NEXT: lsl x8, x2, #2
5177 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5178 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5179 ; CHECK-NEXT: st2.4s { v0, v1 }, [x0], x8
5181 call void @llvm.aarch64.neon.st2.v4i32.p0(<4 x i32> %B, <4 x i32> %C, ptr %A)
5182 %tmp = getelementptr i32, ptr %A, i64 %inc
5186 declare void @llvm.aarch64.neon.st2.v4i32.p0(<4 x i32>, <4 x i32>, ptr)
5189 define ptr @test_v2i32_post_imm_st2(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
5190 ; CHECK-LABEL: test_v2i32_post_imm_st2:
5192 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5193 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5194 ; CHECK-NEXT: st2.2s { v0, v1 }, [x0], #16
5196 call void @llvm.aarch64.neon.st2.v2i32.p0(<2 x i32> %B, <2 x i32> %C, ptr %A)
5197 %tmp = getelementptr i32, ptr %A, i32 4
5201 define ptr @test_v2i32_post_reg_st2(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, i64 %inc) nounwind {
5202 ; CHECK-LABEL: test_v2i32_post_reg_st2:
5204 ; CHECK-NEXT: lsl x8, x2, #2
5205 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5206 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5207 ; CHECK-NEXT: st2.2s { v0, v1 }, [x0], x8
5209 call void @llvm.aarch64.neon.st2.v2i32.p0(<2 x i32> %B, <2 x i32> %C, ptr %A)
5210 %tmp = getelementptr i32, ptr %A, i64 %inc
5214 declare void @llvm.aarch64.neon.st2.v2i32.p0(<2 x i32>, <2 x i32>, ptr)
5217 define ptr @test_v2i64_post_imm_st2(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
5218 ; CHECK-LABEL: test_v2i64_post_imm_st2:
5220 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5221 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5222 ; CHECK-NEXT: st2.2d { v0, v1 }, [x0], #32
5224 call void @llvm.aarch64.neon.st2.v2i64.p0(<2 x i64> %B, <2 x i64> %C, ptr %A)
5225 %tmp = getelementptr i64, ptr %A, i64 4
5229 define ptr @test_v2i64_post_reg_st2(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, i64 %inc) nounwind {
5230 ; CHECK-LABEL: test_v2i64_post_reg_st2:
5232 ; CHECK-NEXT: lsl x8, x2, #3
5233 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5234 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5235 ; CHECK-NEXT: st2.2d { v0, v1 }, [x0], x8
5237 call void @llvm.aarch64.neon.st2.v2i64.p0(<2 x i64> %B, <2 x i64> %C, ptr %A)
5238 %tmp = getelementptr i64, ptr %A, i64 %inc
5242 declare void @llvm.aarch64.neon.st2.v2i64.p0(<2 x i64>, <2 x i64>, ptr)
5245 define ptr @test_v1i64_post_imm_st2(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
5246 ; CHECK-LABEL: test_v1i64_post_imm_st2:
5248 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5249 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5250 ; CHECK-NEXT: st1.1d { v0, v1 }, [x0], #16
5252 call void @llvm.aarch64.neon.st2.v1i64.p0(<1 x i64> %B, <1 x i64> %C, ptr %A)
5253 %tmp = getelementptr i64, ptr %A, i64 2
5257 define ptr @test_v1i64_post_reg_st2(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, i64 %inc) nounwind {
5258 ; CHECK-LABEL: test_v1i64_post_reg_st2:
5260 ; CHECK-NEXT: lsl x8, x2, #3
5261 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5262 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5263 ; CHECK-NEXT: st1.1d { v0, v1 }, [x0], x8
5265 call void @llvm.aarch64.neon.st2.v1i64.p0(<1 x i64> %B, <1 x i64> %C, ptr %A)
5266 %tmp = getelementptr i64, ptr %A, i64 %inc
5270 declare void @llvm.aarch64.neon.st2.v1i64.p0(<1 x i64>, <1 x i64>, ptr)
5273 define ptr @test_v4f32_post_imm_st2(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C) nounwind {
5274 ; CHECK-LABEL: test_v4f32_post_imm_st2:
5276 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5277 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5278 ; CHECK-NEXT: st2.4s { v0, v1 }, [x0], #32
5280 call void @llvm.aarch64.neon.st2.v4f32.p0(<4 x float> %B, <4 x float> %C, ptr %A)
5281 %tmp = getelementptr float, ptr %A, i32 8
5285 define ptr @test_v4f32_post_reg_st2(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, i64 %inc) nounwind {
5286 ; CHECK-LABEL: test_v4f32_post_reg_st2:
5288 ; CHECK-NEXT: lsl x8, x2, #2
5289 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5290 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5291 ; CHECK-NEXT: st2.4s { v0, v1 }, [x0], x8
5293 call void @llvm.aarch64.neon.st2.v4f32.p0(<4 x float> %B, <4 x float> %C, ptr %A)
5294 %tmp = getelementptr float, ptr %A, i64 %inc
5298 declare void @llvm.aarch64.neon.st2.v4f32.p0(<4 x float>, <4 x float>, ptr)
5301 define ptr @test_v2f32_post_imm_st2(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C) nounwind {
5302 ; CHECK-LABEL: test_v2f32_post_imm_st2:
5304 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5305 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5306 ; CHECK-NEXT: st2.2s { v0, v1 }, [x0], #16
5308 call void @llvm.aarch64.neon.st2.v2f32.p0(<2 x float> %B, <2 x float> %C, ptr %A)
5309 %tmp = getelementptr float, ptr %A, i32 4
5313 define ptr @test_v2f32_post_reg_st2(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, i64 %inc) nounwind {
5314 ; CHECK-LABEL: test_v2f32_post_reg_st2:
5316 ; CHECK-NEXT: lsl x8, x2, #2
5317 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5318 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5319 ; CHECK-NEXT: st2.2s { v0, v1 }, [x0], x8
5321 call void @llvm.aarch64.neon.st2.v2f32.p0(<2 x float> %B, <2 x float> %C, ptr %A)
5322 %tmp = getelementptr float, ptr %A, i64 %inc
5326 declare void @llvm.aarch64.neon.st2.v2f32.p0(<2 x float>, <2 x float>, ptr)
5329 define ptr @test_v2f64_post_imm_st2(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C) nounwind {
5330 ; CHECK-LABEL: test_v2f64_post_imm_st2:
5332 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5333 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5334 ; CHECK-NEXT: st2.2d { v0, v1 }, [x0], #32
5336 call void @llvm.aarch64.neon.st2.v2f64.p0(<2 x double> %B, <2 x double> %C, ptr %A)
5337 %tmp = getelementptr double, ptr %A, i64 4
5341 define ptr @test_v2f64_post_reg_st2(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, i64 %inc) nounwind {
5342 ; CHECK-LABEL: test_v2f64_post_reg_st2:
5344 ; CHECK-NEXT: lsl x8, x2, #3
5345 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
5346 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
5347 ; CHECK-NEXT: st2.2d { v0, v1 }, [x0], x8
5349 call void @llvm.aarch64.neon.st2.v2f64.p0(<2 x double> %B, <2 x double> %C, ptr %A)
5350 %tmp = getelementptr double, ptr %A, i64 %inc
5354 declare void @llvm.aarch64.neon.st2.v2f64.p0(<2 x double>, <2 x double>, ptr)
5357 define ptr @test_v1f64_post_imm_st2(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C) nounwind {
5358 ; CHECK-LABEL: test_v1f64_post_imm_st2:
5360 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5361 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5362 ; CHECK-NEXT: st1.1d { v0, v1 }, [x0], #16
5364 call void @llvm.aarch64.neon.st2.v1f64.p0(<1 x double> %B, <1 x double> %C, ptr %A)
5365 %tmp = getelementptr double, ptr %A, i64 2
5369 define ptr @test_v1f64_post_reg_st2(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, i64 %inc) nounwind {
5370 ; CHECK-LABEL: test_v1f64_post_reg_st2:
5372 ; CHECK-NEXT: lsl x8, x2, #3
5373 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
5374 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
5375 ; CHECK-NEXT: st1.1d { v0, v1 }, [x0], x8
5377 call void @llvm.aarch64.neon.st2.v1f64.p0(<1 x double> %B, <1 x double> %C, ptr %A)
5378 %tmp = getelementptr double, ptr %A, i64 %inc
5382 declare void @llvm.aarch64.neon.st2.v1f64.p0(<1 x double>, <1 x double>, ptr)
5385 define ptr @test_v16i8_post_imm_st3(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
5386 ; CHECK-LABEL: test_v16i8_post_imm_st3:
5388 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5389 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5390 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5391 ; CHECK-NEXT: st3.16b { v0, v1, v2 }, [x0], #48
5393 call void @llvm.aarch64.neon.st3.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, ptr %A)
5394 %tmp = getelementptr i8, ptr %A, i32 48
5398 define ptr @test_v16i8_post_reg_st3(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 %inc) nounwind {
5399 ; CHECK-LABEL: test_v16i8_post_reg_st3:
5401 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5402 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5403 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5404 ; CHECK-NEXT: st3.16b { v0, v1, v2 }, [x0], x2
5406 call void @llvm.aarch64.neon.st3.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, ptr %A)
5407 %tmp = getelementptr i8, ptr %A, i64 %inc
5411 declare void @llvm.aarch64.neon.st3.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, ptr)
5414 define ptr @test_v8i8_post_imm_st3(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
5415 ; CHECK-LABEL: test_v8i8_post_imm_st3:
5417 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5418 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5419 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5420 ; CHECK-NEXT: st3.8b { v0, v1, v2 }, [x0], #24
5422 call void @llvm.aarch64.neon.st3.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, ptr %A)
5423 %tmp = getelementptr i8, ptr %A, i32 24
5427 define ptr @test_v8i8_post_reg_st3(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 %inc) nounwind {
5428 ; CHECK-LABEL: test_v8i8_post_reg_st3:
5430 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5431 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5432 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5433 ; CHECK-NEXT: st3.8b { v0, v1, v2 }, [x0], x2
5435 call void @llvm.aarch64.neon.st3.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, ptr %A)
5436 %tmp = getelementptr i8, ptr %A, i64 %inc
5440 declare void @llvm.aarch64.neon.st3.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, ptr)
5443 define ptr @test_v8i16_post_imm_st3(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
5444 ; CHECK-LABEL: test_v8i16_post_imm_st3:
5446 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5447 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5448 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5449 ; CHECK-NEXT: st3.8h { v0, v1, v2 }, [x0], #48
5451 call void @llvm.aarch64.neon.st3.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, ptr %A)
5452 %tmp = getelementptr i16, ptr %A, i32 24
5456 define ptr @test_v8i16_post_reg_st3(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 %inc) nounwind {
5457 ; CHECK-LABEL: test_v8i16_post_reg_st3:
5459 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5460 ; CHECK-NEXT: lsl x8, x2, #1
5461 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5462 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5463 ; CHECK-NEXT: st3.8h { v0, v1, v2 }, [x0], x8
5465 call void @llvm.aarch64.neon.st3.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, ptr %A)
5466 %tmp = getelementptr i16, ptr %A, i64 %inc
5470 declare void @llvm.aarch64.neon.st3.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, ptr)
5473 define ptr @test_v4i16_post_imm_st3(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
5474 ; CHECK-LABEL: test_v4i16_post_imm_st3:
5476 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5477 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5478 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5479 ; CHECK-NEXT: st3.4h { v0, v1, v2 }, [x0], #24
5481 call void @llvm.aarch64.neon.st3.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, ptr %A)
5482 %tmp = getelementptr i16, ptr %A, i32 12
5486 define ptr @test_v4i16_post_reg_st3(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 %inc) nounwind {
5487 ; CHECK-LABEL: test_v4i16_post_reg_st3:
5489 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5490 ; CHECK-NEXT: lsl x8, x2, #1
5491 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5492 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5493 ; CHECK-NEXT: st3.4h { v0, v1, v2 }, [x0], x8
5495 call void @llvm.aarch64.neon.st3.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, ptr %A)
5496 %tmp = getelementptr i16, ptr %A, i64 %inc
5500 declare void @llvm.aarch64.neon.st3.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, ptr)
5503 define ptr @test_v4i32_post_imm_st3(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
5504 ; CHECK-LABEL: test_v4i32_post_imm_st3:
5506 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5507 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5508 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5509 ; CHECK-NEXT: st3.4s { v0, v1, v2 }, [x0], #48
5511 call void @llvm.aarch64.neon.st3.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, ptr %A)
5512 %tmp = getelementptr i32, ptr %A, i32 12
5516 define ptr @test_v4i32_post_reg_st3(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 %inc) nounwind {
5517 ; CHECK-LABEL: test_v4i32_post_reg_st3:
5519 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5520 ; CHECK-NEXT: lsl x8, x2, #2
5521 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5522 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5523 ; CHECK-NEXT: st3.4s { v0, v1, v2 }, [x0], x8
5525 call void @llvm.aarch64.neon.st3.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, ptr %A)
5526 %tmp = getelementptr i32, ptr %A, i64 %inc
5530 declare void @llvm.aarch64.neon.st3.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, ptr)
5533 define ptr @test_v2i32_post_imm_st3(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
5534 ; CHECK-LABEL: test_v2i32_post_imm_st3:
5536 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5537 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5538 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5539 ; CHECK-NEXT: st3.2s { v0, v1, v2 }, [x0], #24
5541 call void @llvm.aarch64.neon.st3.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, ptr %A)
5542 %tmp = getelementptr i32, ptr %A, i32 6
5546 define ptr @test_v2i32_post_reg_st3(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 %inc) nounwind {
5547 ; CHECK-LABEL: test_v2i32_post_reg_st3:
5549 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5550 ; CHECK-NEXT: lsl x8, x2, #2
5551 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5552 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5553 ; CHECK-NEXT: st3.2s { v0, v1, v2 }, [x0], x8
5555 call void @llvm.aarch64.neon.st3.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, ptr %A)
5556 %tmp = getelementptr i32, ptr %A, i64 %inc
5560 declare void @llvm.aarch64.neon.st3.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, ptr)
5563 define ptr @test_v2i64_post_imm_st3(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
5564 ; CHECK-LABEL: test_v2i64_post_imm_st3:
5566 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5567 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5568 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5569 ; CHECK-NEXT: st3.2d { v0, v1, v2 }, [x0], #48
5571 call void @llvm.aarch64.neon.st3.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %A)
5572 %tmp = getelementptr i64, ptr %A, i64 6
5576 define ptr @test_v2i64_post_reg_st3(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 %inc) nounwind {
5577 ; CHECK-LABEL: test_v2i64_post_reg_st3:
5579 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5580 ; CHECK-NEXT: lsl x8, x2, #3
5581 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5582 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5583 ; CHECK-NEXT: st3.2d { v0, v1, v2 }, [x0], x8
5585 call void @llvm.aarch64.neon.st3.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %A)
5586 %tmp = getelementptr i64, ptr %A, i64 %inc
5590 declare void @llvm.aarch64.neon.st3.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, ptr)
5593 define ptr @test_v1i64_post_imm_st3(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
5594 ; CHECK-LABEL: test_v1i64_post_imm_st3:
5596 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5597 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5598 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5599 ; CHECK-NEXT: st1.1d { v0, v1, v2 }, [x0], #24
5601 call void @llvm.aarch64.neon.st3.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %A)
5602 %tmp = getelementptr i64, ptr %A, i64 3
5606 define ptr @test_v1i64_post_reg_st3(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 %inc) nounwind {
5607 ; CHECK-LABEL: test_v1i64_post_reg_st3:
5609 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5610 ; CHECK-NEXT: lsl x8, x2, #3
5611 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5612 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5613 ; CHECK-NEXT: st1.1d { v0, v1, v2 }, [x0], x8
5615 call void @llvm.aarch64.neon.st3.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %A)
5616 %tmp = getelementptr i64, ptr %A, i64 %inc
5620 declare void @llvm.aarch64.neon.st3.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, ptr)
5623 define ptr @test_v4f32_post_imm_st3(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
5624 ; CHECK-LABEL: test_v4f32_post_imm_st3:
5626 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5627 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5628 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5629 ; CHECK-NEXT: st3.4s { v0, v1, v2 }, [x0], #48
5631 call void @llvm.aarch64.neon.st3.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, ptr %A)
5632 %tmp = getelementptr float, ptr %A, i32 12
5636 define ptr @test_v4f32_post_reg_st3(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, i64 %inc) nounwind {
5637 ; CHECK-LABEL: test_v4f32_post_reg_st3:
5639 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5640 ; CHECK-NEXT: lsl x8, x2, #2
5641 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5642 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5643 ; CHECK-NEXT: st3.4s { v0, v1, v2 }, [x0], x8
5645 call void @llvm.aarch64.neon.st3.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, ptr %A)
5646 %tmp = getelementptr float, ptr %A, i64 %inc
5650 declare void @llvm.aarch64.neon.st3.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, ptr)
5653 define ptr @test_v2f32_post_imm_st3(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
5654 ; CHECK-LABEL: test_v2f32_post_imm_st3:
5656 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5657 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5658 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5659 ; CHECK-NEXT: st3.2s { v0, v1, v2 }, [x0], #24
5661 call void @llvm.aarch64.neon.st3.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, ptr %A)
5662 %tmp = getelementptr float, ptr %A, i32 6
5666 define ptr @test_v2f32_post_reg_st3(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, i64 %inc) nounwind {
5667 ; CHECK-LABEL: test_v2f32_post_reg_st3:
5669 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5670 ; CHECK-NEXT: lsl x8, x2, #2
5671 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5672 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5673 ; CHECK-NEXT: st3.2s { v0, v1, v2 }, [x0], x8
5675 call void @llvm.aarch64.neon.st3.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, ptr %A)
5676 %tmp = getelementptr float, ptr %A, i64 %inc
5680 declare void @llvm.aarch64.neon.st3.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, ptr)
5683 define ptr @test_v2f64_post_imm_st3(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
5684 ; CHECK-LABEL: test_v2f64_post_imm_st3:
5686 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5687 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5688 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5689 ; CHECK-NEXT: st3.2d { v0, v1, v2 }, [x0], #48
5691 call void @llvm.aarch64.neon.st3.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %A)
5692 %tmp = getelementptr double, ptr %A, i64 6
5696 define ptr @test_v2f64_post_reg_st3(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, i64 %inc) nounwind {
5697 ; CHECK-LABEL: test_v2f64_post_reg_st3:
5699 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
5700 ; CHECK-NEXT: lsl x8, x2, #3
5701 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
5702 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
5703 ; CHECK-NEXT: st3.2d { v0, v1, v2 }, [x0], x8
5705 call void @llvm.aarch64.neon.st3.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %A)
5706 %tmp = getelementptr double, ptr %A, i64 %inc
5710 declare void @llvm.aarch64.neon.st3.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, ptr)
5713 define ptr @test_v1f64_post_imm_st3(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
5714 ; CHECK-LABEL: test_v1f64_post_imm_st3:
5716 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5717 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5718 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5719 ; CHECK-NEXT: st1.1d { v0, v1, v2 }, [x0], #24
5721 call void @llvm.aarch64.neon.st3.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %A)
5722 %tmp = getelementptr double, ptr %A, i64 3
5726 define ptr @test_v1f64_post_reg_st3(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, i64 %inc) nounwind {
5727 ; CHECK-LABEL: test_v1f64_post_reg_st3:
5729 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
5730 ; CHECK-NEXT: lsl x8, x2, #3
5731 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
5732 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
5733 ; CHECK-NEXT: st1.1d { v0, v1, v2 }, [x0], x8
5735 call void @llvm.aarch64.neon.st3.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %A)
5736 %tmp = getelementptr double, ptr %A, i64 %inc
5740 declare void @llvm.aarch64.neon.st3.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, ptr)
5743 define ptr @test_v16i8_post_imm_st4(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
5744 ; CHECK-LABEL: test_v16i8_post_imm_st4:
5746 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5747 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5748 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5749 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5750 ; CHECK-NEXT: st4.16b { v0, v1, v2, v3 }, [x0], #64
5752 call void @llvm.aarch64.neon.st4.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, ptr %A)
5753 %tmp = getelementptr i8, ptr %A, i32 64
5757 define ptr @test_v16i8_post_reg_st4(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 %inc) nounwind {
5758 ; CHECK-LABEL: test_v16i8_post_reg_st4:
5760 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5761 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5762 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5763 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5764 ; CHECK-NEXT: st4.16b { v0, v1, v2, v3 }, [x0], x2
5766 call void @llvm.aarch64.neon.st4.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, ptr %A)
5767 %tmp = getelementptr i8, ptr %A, i64 %inc
5771 declare void @llvm.aarch64.neon.st4.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, ptr)
5774 define ptr @test_v8i8_post_imm_st4(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
5775 ; CHECK-LABEL: test_v8i8_post_imm_st4:
5777 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5778 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5779 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5780 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5781 ; CHECK-NEXT: st4.8b { v0, v1, v2, v3 }, [x0], #32
5783 call void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, ptr %A)
5784 %tmp = getelementptr i8, ptr %A, i32 32
5788 define ptr @test_v8i8_post_reg_st4(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 %inc) nounwind {
5789 ; CHECK-LABEL: test_v8i8_post_reg_st4:
5791 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5792 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5793 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5794 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5795 ; CHECK-NEXT: st4.8b { v0, v1, v2, v3 }, [x0], x2
5797 call void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, ptr %A)
5798 %tmp = getelementptr i8, ptr %A, i64 %inc
5802 declare void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, ptr)
5805 define ptr @test_v8i16_post_imm_st4(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
5806 ; CHECK-LABEL: test_v8i16_post_imm_st4:
5808 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5809 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5810 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5811 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5812 ; CHECK-NEXT: st4.8h { v0, v1, v2, v3 }, [x0], #64
5814 call void @llvm.aarch64.neon.st4.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, ptr %A)
5815 %tmp = getelementptr i16, ptr %A, i32 32
5819 define ptr @test_v8i16_post_reg_st4(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 %inc) nounwind {
5820 ; CHECK-LABEL: test_v8i16_post_reg_st4:
5822 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5823 ; CHECK-NEXT: lsl x8, x2, #1
5824 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5825 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5826 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5827 ; CHECK-NEXT: st4.8h { v0, v1, v2, v3 }, [x0], x8
5829 call void @llvm.aarch64.neon.st4.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, ptr %A)
5830 %tmp = getelementptr i16, ptr %A, i64 %inc
5834 declare void @llvm.aarch64.neon.st4.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, ptr)
5837 define ptr @test_v4i16_post_imm_st4(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
5838 ; CHECK-LABEL: test_v4i16_post_imm_st4:
5840 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5841 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5842 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5843 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5844 ; CHECK-NEXT: st4.4h { v0, v1, v2, v3 }, [x0], #32
5846 call void @llvm.aarch64.neon.st4.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, ptr %A)
5847 %tmp = getelementptr i16, ptr %A, i32 16
5851 define ptr @test_v4i16_post_reg_st4(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 %inc) nounwind {
5852 ; CHECK-LABEL: test_v4i16_post_reg_st4:
5854 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5855 ; CHECK-NEXT: lsl x8, x2, #1
5856 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5857 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5858 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5859 ; CHECK-NEXT: st4.4h { v0, v1, v2, v3 }, [x0], x8
5861 call void @llvm.aarch64.neon.st4.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, ptr %A)
5862 %tmp = getelementptr i16, ptr %A, i64 %inc
5866 declare void @llvm.aarch64.neon.st4.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>,<4 x i16>, ptr)
5869 define ptr @test_v4i32_post_imm_st4(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
5870 ; CHECK-LABEL: test_v4i32_post_imm_st4:
5872 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5873 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5874 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5875 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5876 ; CHECK-NEXT: st4.4s { v0, v1, v2, v3 }, [x0], #64
5878 call void @llvm.aarch64.neon.st4.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, ptr %A)
5879 %tmp = getelementptr i32, ptr %A, i32 16
5883 define ptr @test_v4i32_post_reg_st4(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 %inc) nounwind {
5884 ; CHECK-LABEL: test_v4i32_post_reg_st4:
5886 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5887 ; CHECK-NEXT: lsl x8, x2, #2
5888 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5889 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5890 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5891 ; CHECK-NEXT: st4.4s { v0, v1, v2, v3 }, [x0], x8
5893 call void @llvm.aarch64.neon.st4.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, ptr %A)
5894 %tmp = getelementptr i32, ptr %A, i64 %inc
5898 declare void @llvm.aarch64.neon.st4.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>,<4 x i32>, ptr)
5901 define ptr @test_v2i32_post_imm_st4(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
5902 ; CHECK-LABEL: test_v2i32_post_imm_st4:
5904 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5905 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5906 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5907 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5908 ; CHECK-NEXT: st4.2s { v0, v1, v2, v3 }, [x0], #32
5910 call void @llvm.aarch64.neon.st4.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, ptr %A)
5911 %tmp = getelementptr i32, ptr %A, i32 8
5915 define ptr @test_v2i32_post_reg_st4(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 %inc) nounwind {
5916 ; CHECK-LABEL: test_v2i32_post_reg_st4:
5918 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5919 ; CHECK-NEXT: lsl x8, x2, #2
5920 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5921 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5922 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5923 ; CHECK-NEXT: st4.2s { v0, v1, v2, v3 }, [x0], x8
5925 call void @llvm.aarch64.neon.st4.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, ptr %A)
5926 %tmp = getelementptr i32, ptr %A, i64 %inc
5930 declare void @llvm.aarch64.neon.st4.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, ptr)
5933 define ptr @test_v2i64_post_imm_st4(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
5934 ; CHECK-LABEL: test_v2i64_post_imm_st4:
5936 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5937 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5938 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5939 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5940 ; CHECK-NEXT: st4.2d { v0, v1, v2, v3 }, [x0], #64
5942 call void @llvm.aarch64.neon.st4.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, ptr %A)
5943 %tmp = getelementptr i64, ptr %A, i64 8
5947 define ptr @test_v2i64_post_reg_st4(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 %inc) nounwind {
5948 ; CHECK-LABEL: test_v2i64_post_reg_st4:
5950 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5951 ; CHECK-NEXT: lsl x8, x2, #3
5952 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5953 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5954 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
5955 ; CHECK-NEXT: st4.2d { v0, v1, v2, v3 }, [x0], x8
5957 call void @llvm.aarch64.neon.st4.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, ptr %A)
5958 %tmp = getelementptr i64, ptr %A, i64 %inc
5962 declare void @llvm.aarch64.neon.st4.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>,<2 x i64>, ptr)
5965 define ptr @test_v1i64_post_imm_st4(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
5966 ; CHECK-LABEL: test_v1i64_post_imm_st4:
5968 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5969 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5970 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5971 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5972 ; CHECK-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], #32
5974 call void @llvm.aarch64.neon.st4.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, ptr %A)
5975 %tmp = getelementptr i64, ptr %A, i64 4
5979 define ptr @test_v1i64_post_reg_st4(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 %inc) nounwind {
5980 ; CHECK-LABEL: test_v1i64_post_reg_st4:
5982 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5983 ; CHECK-NEXT: lsl x8, x2, #3
5984 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5985 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5986 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
5987 ; CHECK-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], x8
5989 call void @llvm.aarch64.neon.st4.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, ptr %A)
5990 %tmp = getelementptr i64, ptr %A, i64 %inc
5994 declare void @llvm.aarch64.neon.st4.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>,<1 x i64>, ptr)
5997 define ptr @test_v4f32_post_imm_st4(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
5998 ; CHECK-LABEL: test_v4f32_post_imm_st4:
6000 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6001 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6002 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6003 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6004 ; CHECK-NEXT: st4.4s { v0, v1, v2, v3 }, [x0], #64
6006 call void @llvm.aarch64.neon.st4.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, ptr %A)
6007 %tmp = getelementptr float, ptr %A, i32 16
6011 define ptr @test_v4f32_post_reg_st4(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 %inc) nounwind {
6012 ; CHECK-LABEL: test_v4f32_post_reg_st4:
6014 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6015 ; CHECK-NEXT: lsl x8, x2, #2
6016 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6017 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6018 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6019 ; CHECK-NEXT: st4.4s { v0, v1, v2, v3 }, [x0], x8
6021 call void @llvm.aarch64.neon.st4.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, ptr %A)
6022 %tmp = getelementptr float, ptr %A, i64 %inc
6026 declare void @llvm.aarch64.neon.st4.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, <4 x float>, ptr)
6029 define ptr @test_v2f32_post_imm_st4(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
6030 ; CHECK-LABEL: test_v2f32_post_imm_st4:
6032 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6033 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6034 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6035 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6036 ; CHECK-NEXT: st4.2s { v0, v1, v2, v3 }, [x0], #32
6038 call void @llvm.aarch64.neon.st4.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, ptr %A)
6039 %tmp = getelementptr float, ptr %A, i32 8
6043 define ptr @test_v2f32_post_reg_st4(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 %inc) nounwind {
6044 ; CHECK-LABEL: test_v2f32_post_reg_st4:
6046 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6047 ; CHECK-NEXT: lsl x8, x2, #2
6048 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6049 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6050 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6051 ; CHECK-NEXT: st4.2s { v0, v1, v2, v3 }, [x0], x8
6053 call void @llvm.aarch64.neon.st4.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, ptr %A)
6054 %tmp = getelementptr float, ptr %A, i64 %inc
6058 declare void @llvm.aarch64.neon.st4.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, <2 x float>, ptr)
6061 define ptr @test_v2f64_post_imm_st4(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
6062 ; CHECK-LABEL: test_v2f64_post_imm_st4:
6064 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6065 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6066 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6067 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6068 ; CHECK-NEXT: st4.2d { v0, v1, v2, v3 }, [x0], #64
6070 call void @llvm.aarch64.neon.st4.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, ptr %A)
6071 %tmp = getelementptr double, ptr %A, i64 8
6075 define ptr @test_v2f64_post_reg_st4(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 %inc) nounwind {
6076 ; CHECK-LABEL: test_v2f64_post_reg_st4:
6078 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6079 ; CHECK-NEXT: lsl x8, x2, #3
6080 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6081 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6082 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6083 ; CHECK-NEXT: st4.2d { v0, v1, v2, v3 }, [x0], x8
6085 call void @llvm.aarch64.neon.st4.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, ptr %A)
6086 %tmp = getelementptr double, ptr %A, i64 %inc
6090 declare void @llvm.aarch64.neon.st4.v2f64.p0(<2 x double>, <2 x double>, <2 x double>,<2 x double>, ptr)
6093 define ptr @test_v1f64_post_imm_st4(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
6094 ; CHECK-LABEL: test_v1f64_post_imm_st4:
6096 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6097 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6098 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6099 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6100 ; CHECK-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], #32
6102 call void @llvm.aarch64.neon.st4.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, ptr %A)
6103 %tmp = getelementptr double, ptr %A, i64 4
6107 define ptr @test_v1f64_post_reg_st4(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 %inc) nounwind {
6108 ; CHECK-LABEL: test_v1f64_post_reg_st4:
6110 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6111 ; CHECK-NEXT: lsl x8, x2, #3
6112 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6113 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6114 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6115 ; CHECK-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], x8
6117 call void @llvm.aarch64.neon.st4.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, ptr %A)
6118 %tmp = getelementptr double, ptr %A, i64 %inc
6122 declare void @llvm.aarch64.neon.st4.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, <1 x double>, ptr)
6125 define ptr @test_v16i8_post_imm_st1x2(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
6126 ; CHECK-LABEL: test_v16i8_post_imm_st1x2:
6128 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6129 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6130 ; CHECK-NEXT: st1.16b { v0, v1 }, [x0], #32
6132 call void @llvm.aarch64.neon.st1x2.v16i8.p0(<16 x i8> %B, <16 x i8> %C, ptr %A)
6133 %tmp = getelementptr i8, ptr %A, i32 32
6137 define ptr @test_v16i8_post_reg_st1x2(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, i64 %inc) nounwind {
6138 ; CHECK-LABEL: test_v16i8_post_reg_st1x2:
6140 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6141 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6142 ; CHECK-NEXT: st1.16b { v0, v1 }, [x0], x2
6144 call void @llvm.aarch64.neon.st1x2.v16i8.p0(<16 x i8> %B, <16 x i8> %C, ptr %A)
6145 %tmp = getelementptr i8, ptr %A, i64 %inc
6149 declare void @llvm.aarch64.neon.st1x2.v16i8.p0(<16 x i8>, <16 x i8>, ptr)
6152 define ptr @test_v8i8_post_imm_st1x2(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
6153 ; CHECK-LABEL: test_v8i8_post_imm_st1x2:
6155 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6156 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6157 ; CHECK-NEXT: st1.8b { v0, v1 }, [x0], #16
6159 call void @llvm.aarch64.neon.st1x2.v8i8.p0(<8 x i8> %B, <8 x i8> %C, ptr %A)
6160 %tmp = getelementptr i8, ptr %A, i32 16
6164 define ptr @test_v8i8_post_reg_st1x2(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, i64 %inc) nounwind {
6165 ; CHECK-LABEL: test_v8i8_post_reg_st1x2:
6167 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6168 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6169 ; CHECK-NEXT: st1.8b { v0, v1 }, [x0], x2
6171 call void @llvm.aarch64.neon.st1x2.v8i8.p0(<8 x i8> %B, <8 x i8> %C, ptr %A)
6172 %tmp = getelementptr i8, ptr %A, i64 %inc
6176 declare void @llvm.aarch64.neon.st1x2.v8i8.p0(<8 x i8>, <8 x i8>, ptr)
6179 define ptr @test_v8i16_post_imm_st1x2(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
6180 ; CHECK-LABEL: test_v8i16_post_imm_st1x2:
6182 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6183 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6184 ; CHECK-NEXT: st1.8h { v0, v1 }, [x0], #32
6186 call void @llvm.aarch64.neon.st1x2.v8i16.p0(<8 x i16> %B, <8 x i16> %C, ptr %A)
6187 %tmp = getelementptr i16, ptr %A, i32 16
6191 define ptr @test_v8i16_post_reg_st1x2(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, i64 %inc) nounwind {
6192 ; CHECK-LABEL: test_v8i16_post_reg_st1x2:
6194 ; CHECK-NEXT: lsl x8, x2, #1
6195 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6196 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6197 ; CHECK-NEXT: st1.8h { v0, v1 }, [x0], x8
6199 call void @llvm.aarch64.neon.st1x2.v8i16.p0(<8 x i16> %B, <8 x i16> %C, ptr %A)
6200 %tmp = getelementptr i16, ptr %A, i64 %inc
6204 declare void @llvm.aarch64.neon.st1x2.v8i16.p0(<8 x i16>, <8 x i16>, ptr)
6207 define ptr @test_v4i16_post_imm_st1x2(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
6208 ; CHECK-LABEL: test_v4i16_post_imm_st1x2:
6210 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6211 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6212 ; CHECK-NEXT: st1.4h { v0, v1 }, [x0], #16
6214 call void @llvm.aarch64.neon.st1x2.v4i16.p0(<4 x i16> %B, <4 x i16> %C, ptr %A)
6215 %tmp = getelementptr i16, ptr %A, i32 8
6219 define ptr @test_v4i16_post_reg_st1x2(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, i64 %inc) nounwind {
6220 ; CHECK-LABEL: test_v4i16_post_reg_st1x2:
6222 ; CHECK-NEXT: lsl x8, x2, #1
6223 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6224 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6225 ; CHECK-NEXT: st1.4h { v0, v1 }, [x0], x8
6227 call void @llvm.aarch64.neon.st1x2.v4i16.p0(<4 x i16> %B, <4 x i16> %C, ptr %A)
6228 %tmp = getelementptr i16, ptr %A, i64 %inc
6232 declare void @llvm.aarch64.neon.st1x2.v4i16.p0(<4 x i16>, <4 x i16>, ptr)
6235 define ptr @test_v4i32_post_imm_st1x2(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
6236 ; CHECK-LABEL: test_v4i32_post_imm_st1x2:
6238 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6239 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6240 ; CHECK-NEXT: st1.4s { v0, v1 }, [x0], #32
6242 call void @llvm.aarch64.neon.st1x2.v4i32.p0(<4 x i32> %B, <4 x i32> %C, ptr %A)
6243 %tmp = getelementptr i32, ptr %A, i32 8
6247 define ptr @test_v4i32_post_reg_st1x2(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, i64 %inc) nounwind {
6248 ; CHECK-LABEL: test_v4i32_post_reg_st1x2:
6250 ; CHECK-NEXT: lsl x8, x2, #2
6251 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6252 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6253 ; CHECK-NEXT: st1.4s { v0, v1 }, [x0], x8
6255 call void @llvm.aarch64.neon.st1x2.v4i32.p0(<4 x i32> %B, <4 x i32> %C, ptr %A)
6256 %tmp = getelementptr i32, ptr %A, i64 %inc
6260 declare void @llvm.aarch64.neon.st1x2.v4i32.p0(<4 x i32>, <4 x i32>, ptr)
6263 define ptr @test_v2i32_post_imm_st1x2(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
6264 ; CHECK-LABEL: test_v2i32_post_imm_st1x2:
6266 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6267 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6268 ; CHECK-NEXT: st1.2s { v0, v1 }, [x0], #16
6270 call void @llvm.aarch64.neon.st1x2.v2i32.p0(<2 x i32> %B, <2 x i32> %C, ptr %A)
6271 %tmp = getelementptr i32, ptr %A, i32 4
6275 define ptr @test_v2i32_post_reg_st1x2(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, i64 %inc) nounwind {
6276 ; CHECK-LABEL: test_v2i32_post_reg_st1x2:
6278 ; CHECK-NEXT: lsl x8, x2, #2
6279 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6280 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6281 ; CHECK-NEXT: st1.2s { v0, v1 }, [x0], x8
6283 call void @llvm.aarch64.neon.st1x2.v2i32.p0(<2 x i32> %B, <2 x i32> %C, ptr %A)
6284 %tmp = getelementptr i32, ptr %A, i64 %inc
6288 declare void @llvm.aarch64.neon.st1x2.v2i32.p0(<2 x i32>, <2 x i32>, ptr)
6291 define ptr @test_v2i64_post_imm_st1x2(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
6292 ; CHECK-LABEL: test_v2i64_post_imm_st1x2:
6294 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6295 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6296 ; CHECK-NEXT: st1.2d { v0, v1 }, [x0], #32
6298 call void @llvm.aarch64.neon.st1x2.v2i64.p0(<2 x i64> %B, <2 x i64> %C, ptr %A)
6299 %tmp = getelementptr i64, ptr %A, i64 4
6303 define ptr @test_v2i64_post_reg_st1x2(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, i64 %inc) nounwind {
6304 ; CHECK-LABEL: test_v2i64_post_reg_st1x2:
6306 ; CHECK-NEXT: lsl x8, x2, #3
6307 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6308 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6309 ; CHECK-NEXT: st1.2d { v0, v1 }, [x0], x8
6311 call void @llvm.aarch64.neon.st1x2.v2i64.p0(<2 x i64> %B, <2 x i64> %C, ptr %A)
6312 %tmp = getelementptr i64, ptr %A, i64 %inc
6316 declare void @llvm.aarch64.neon.st1x2.v2i64.p0(<2 x i64>, <2 x i64>, ptr)
6319 define ptr @test_v1i64_post_imm_st1x2(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
6320 ; CHECK-LABEL: test_v1i64_post_imm_st1x2:
6322 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6323 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6324 ; CHECK-NEXT: st1.1d { v0, v1 }, [x0], #16
6326 call void @llvm.aarch64.neon.st1x2.v1i64.p0(<1 x i64> %B, <1 x i64> %C, ptr %A)
6327 %tmp = getelementptr i64, ptr %A, i64 2
6331 define ptr @test_v1i64_post_reg_st1x2(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, i64 %inc) nounwind {
6332 ; CHECK-LABEL: test_v1i64_post_reg_st1x2:
6334 ; CHECK-NEXT: lsl x8, x2, #3
6335 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6336 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6337 ; CHECK-NEXT: st1.1d { v0, v1 }, [x0], x8
6339 call void @llvm.aarch64.neon.st1x2.v1i64.p0(<1 x i64> %B, <1 x i64> %C, ptr %A)
6340 %tmp = getelementptr i64, ptr %A, i64 %inc
6344 declare void @llvm.aarch64.neon.st1x2.v1i64.p0(<1 x i64>, <1 x i64>, ptr)
6347 define ptr @test_v4f32_post_imm_st1x2(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C) nounwind {
6348 ; CHECK-LABEL: test_v4f32_post_imm_st1x2:
6350 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6351 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6352 ; CHECK-NEXT: st1.4s { v0, v1 }, [x0], #32
6354 call void @llvm.aarch64.neon.st1x2.v4f32.p0(<4 x float> %B, <4 x float> %C, ptr %A)
6355 %tmp = getelementptr float, ptr %A, i32 8
6359 define ptr @test_v4f32_post_reg_st1x2(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, i64 %inc) nounwind {
6360 ; CHECK-LABEL: test_v4f32_post_reg_st1x2:
6362 ; CHECK-NEXT: lsl x8, x2, #2
6363 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6364 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6365 ; CHECK-NEXT: st1.4s { v0, v1 }, [x0], x8
6367 call void @llvm.aarch64.neon.st1x2.v4f32.p0(<4 x float> %B, <4 x float> %C, ptr %A)
6368 %tmp = getelementptr float, ptr %A, i64 %inc
6372 declare void @llvm.aarch64.neon.st1x2.v4f32.p0(<4 x float>, <4 x float>, ptr)
6375 define ptr @test_v2f32_post_imm_st1x2(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C) nounwind {
6376 ; CHECK-LABEL: test_v2f32_post_imm_st1x2:
6378 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6379 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6380 ; CHECK-NEXT: st1.2s { v0, v1 }, [x0], #16
6382 call void @llvm.aarch64.neon.st1x2.v2f32.p0(<2 x float> %B, <2 x float> %C, ptr %A)
6383 %tmp = getelementptr float, ptr %A, i32 4
6387 define ptr @test_v2f32_post_reg_st1x2(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, i64 %inc) nounwind {
6388 ; CHECK-LABEL: test_v2f32_post_reg_st1x2:
6390 ; CHECK-NEXT: lsl x8, x2, #2
6391 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6392 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6393 ; CHECK-NEXT: st1.2s { v0, v1 }, [x0], x8
6395 call void @llvm.aarch64.neon.st1x2.v2f32.p0(<2 x float> %B, <2 x float> %C, ptr %A)
6396 %tmp = getelementptr float, ptr %A, i64 %inc
6400 declare void @llvm.aarch64.neon.st1x2.v2f32.p0(<2 x float>, <2 x float>, ptr)
6403 define ptr @test_v2f64_post_imm_st1x2(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C) nounwind {
6404 ; CHECK-LABEL: test_v2f64_post_imm_st1x2:
6406 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6407 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6408 ; CHECK-NEXT: st1.2d { v0, v1 }, [x0], #32
6410 call void @llvm.aarch64.neon.st1x2.v2f64.p0(<2 x double> %B, <2 x double> %C, ptr %A)
6411 %tmp = getelementptr double, ptr %A, i64 4
6415 define ptr @test_v2f64_post_reg_st1x2(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, i64 %inc) nounwind {
6416 ; CHECK-LABEL: test_v2f64_post_reg_st1x2:
6418 ; CHECK-NEXT: lsl x8, x2, #3
6419 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
6420 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
6421 ; CHECK-NEXT: st1.2d { v0, v1 }, [x0], x8
6423 call void @llvm.aarch64.neon.st1x2.v2f64.p0(<2 x double> %B, <2 x double> %C, ptr %A)
6424 %tmp = getelementptr double, ptr %A, i64 %inc
6428 declare void @llvm.aarch64.neon.st1x2.v2f64.p0(<2 x double>, <2 x double>, ptr)
6431 define ptr @test_v1f64_post_imm_st1x2(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C) nounwind {
6432 ; CHECK-LABEL: test_v1f64_post_imm_st1x2:
6434 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6435 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6436 ; CHECK-NEXT: st1.1d { v0, v1 }, [x0], #16
6438 call void @llvm.aarch64.neon.st1x2.v1f64.p0(<1 x double> %B, <1 x double> %C, ptr %A)
6439 %tmp = getelementptr double, ptr %A, i64 2
6443 define ptr @test_v1f64_post_reg_st1x2(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, i64 %inc) nounwind {
6444 ; CHECK-LABEL: test_v1f64_post_reg_st1x2:
6446 ; CHECK-NEXT: lsl x8, x2, #3
6447 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1 def $d0_d1
6448 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1 def $d0_d1
6449 ; CHECK-NEXT: st1.1d { v0, v1 }, [x0], x8
6451 call void @llvm.aarch64.neon.st1x2.v1f64.p0(<1 x double> %B, <1 x double> %C, ptr %A)
6452 %tmp = getelementptr double, ptr %A, i64 %inc
6456 declare void @llvm.aarch64.neon.st1x2.v1f64.p0(<1 x double>, <1 x double>, ptr)
6459 define ptr @test_v16i8_post_imm_st1x3(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
6460 ; CHECK-LABEL: test_v16i8_post_imm_st1x3:
6462 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6463 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6464 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6465 ; CHECK-NEXT: st1.16b { v0, v1, v2 }, [x0], #48
6467 call void @llvm.aarch64.neon.st1x3.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, ptr %A)
6468 %tmp = getelementptr i8, ptr %A, i32 48
6472 define ptr @test_v16i8_post_reg_st1x3(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 %inc) nounwind {
6473 ; CHECK-LABEL: test_v16i8_post_reg_st1x3:
6475 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6476 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6477 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6478 ; CHECK-NEXT: st1.16b { v0, v1, v2 }, [x0], x2
6480 call void @llvm.aarch64.neon.st1x3.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, ptr %A)
6481 %tmp = getelementptr i8, ptr %A, i64 %inc
6485 declare void @llvm.aarch64.neon.st1x3.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, ptr)
6488 define ptr @test_v8i8_post_imm_st1x3(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
6489 ; CHECK-LABEL: test_v8i8_post_imm_st1x3:
6491 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6492 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6493 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6494 ; CHECK-NEXT: st1.8b { v0, v1, v2 }, [x0], #24
6496 call void @llvm.aarch64.neon.st1x3.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, ptr %A)
6497 %tmp = getelementptr i8, ptr %A, i32 24
6501 define ptr @test_v8i8_post_reg_st1x3(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 %inc) nounwind {
6502 ; CHECK-LABEL: test_v8i8_post_reg_st1x3:
6504 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6505 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6506 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6507 ; CHECK-NEXT: st1.8b { v0, v1, v2 }, [x0], x2
6509 call void @llvm.aarch64.neon.st1x3.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, ptr %A)
6510 %tmp = getelementptr i8, ptr %A, i64 %inc
6514 declare void @llvm.aarch64.neon.st1x3.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, ptr)
6517 define ptr @test_v8i16_post_imm_st1x3(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
6518 ; CHECK-LABEL: test_v8i16_post_imm_st1x3:
6520 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6521 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6522 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6523 ; CHECK-NEXT: st1.8h { v0, v1, v2 }, [x0], #48
6525 call void @llvm.aarch64.neon.st1x3.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, ptr %A)
6526 %tmp = getelementptr i16, ptr %A, i32 24
6530 define ptr @test_v8i16_post_reg_st1x3(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 %inc) nounwind {
6531 ; CHECK-LABEL: test_v8i16_post_reg_st1x3:
6533 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6534 ; CHECK-NEXT: lsl x8, x2, #1
6535 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6536 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6537 ; CHECK-NEXT: st1.8h { v0, v1, v2 }, [x0], x8
6539 call void @llvm.aarch64.neon.st1x3.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, ptr %A)
6540 %tmp = getelementptr i16, ptr %A, i64 %inc
6544 declare void @llvm.aarch64.neon.st1x3.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, ptr)
6547 define ptr @test_v4i16_post_imm_st1x3(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
6548 ; CHECK-LABEL: test_v4i16_post_imm_st1x3:
6550 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6551 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6552 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6553 ; CHECK-NEXT: st1.4h { v0, v1, v2 }, [x0], #24
6555 call void @llvm.aarch64.neon.st1x3.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, ptr %A)
6556 %tmp = getelementptr i16, ptr %A, i32 12
6560 define ptr @test_v4i16_post_reg_st1x3(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 %inc) nounwind {
6561 ; CHECK-LABEL: test_v4i16_post_reg_st1x3:
6563 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6564 ; CHECK-NEXT: lsl x8, x2, #1
6565 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6566 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6567 ; CHECK-NEXT: st1.4h { v0, v1, v2 }, [x0], x8
6569 call void @llvm.aarch64.neon.st1x3.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, ptr %A)
6570 %tmp = getelementptr i16, ptr %A, i64 %inc
6574 declare void @llvm.aarch64.neon.st1x3.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, ptr)
6577 define ptr @test_v4i32_post_imm_st1x3(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
6578 ; CHECK-LABEL: test_v4i32_post_imm_st1x3:
6580 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6581 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6582 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6583 ; CHECK-NEXT: st1.4s { v0, v1, v2 }, [x0], #48
6585 call void @llvm.aarch64.neon.st1x3.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, ptr %A)
6586 %tmp = getelementptr i32, ptr %A, i32 12
6590 define ptr @test_v4i32_post_reg_st1x3(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 %inc) nounwind {
6591 ; CHECK-LABEL: test_v4i32_post_reg_st1x3:
6593 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6594 ; CHECK-NEXT: lsl x8, x2, #2
6595 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6596 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6597 ; CHECK-NEXT: st1.4s { v0, v1, v2 }, [x0], x8
6599 call void @llvm.aarch64.neon.st1x3.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, ptr %A)
6600 %tmp = getelementptr i32, ptr %A, i64 %inc
6604 declare void @llvm.aarch64.neon.st1x3.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, ptr)
6607 define ptr @test_v2i32_post_imm_st1x3(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
6608 ; CHECK-LABEL: test_v2i32_post_imm_st1x3:
6610 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6611 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6612 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6613 ; CHECK-NEXT: st1.2s { v0, v1, v2 }, [x0], #24
6615 call void @llvm.aarch64.neon.st1x3.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, ptr %A)
6616 %tmp = getelementptr i32, ptr %A, i32 6
6620 define ptr @test_v2i32_post_reg_st1x3(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 %inc) nounwind {
6621 ; CHECK-LABEL: test_v2i32_post_reg_st1x3:
6623 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6624 ; CHECK-NEXT: lsl x8, x2, #2
6625 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6626 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6627 ; CHECK-NEXT: st1.2s { v0, v1, v2 }, [x0], x8
6629 call void @llvm.aarch64.neon.st1x3.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, ptr %A)
6630 %tmp = getelementptr i32, ptr %A, i64 %inc
6634 declare void @llvm.aarch64.neon.st1x3.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, ptr)
6637 define ptr @test_v2i64_post_imm_st1x3(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
6638 ; CHECK-LABEL: test_v2i64_post_imm_st1x3:
6640 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6641 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6642 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6643 ; CHECK-NEXT: st1.2d { v0, v1, v2 }, [x0], #48
6645 call void @llvm.aarch64.neon.st1x3.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %A)
6646 %tmp = getelementptr i64, ptr %A, i64 6
6650 define ptr @test_v2i64_post_reg_st1x3(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 %inc) nounwind {
6651 ; CHECK-LABEL: test_v2i64_post_reg_st1x3:
6653 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6654 ; CHECK-NEXT: lsl x8, x2, #3
6655 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6656 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6657 ; CHECK-NEXT: st1.2d { v0, v1, v2 }, [x0], x8
6659 call void @llvm.aarch64.neon.st1x3.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %A)
6660 %tmp = getelementptr i64, ptr %A, i64 %inc
6664 declare void @llvm.aarch64.neon.st1x3.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, ptr)
6667 define ptr @test_v1i64_post_imm_st1x3(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
6668 ; CHECK-LABEL: test_v1i64_post_imm_st1x3:
6670 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6671 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6672 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6673 ; CHECK-NEXT: st1.1d { v0, v1, v2 }, [x0], #24
6675 call void @llvm.aarch64.neon.st1x3.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %A)
6676 %tmp = getelementptr i64, ptr %A, i64 3
6680 define ptr @test_v1i64_post_reg_st1x3(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 %inc) nounwind {
6681 ; CHECK-LABEL: test_v1i64_post_reg_st1x3:
6683 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6684 ; CHECK-NEXT: lsl x8, x2, #3
6685 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6686 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6687 ; CHECK-NEXT: st1.1d { v0, v1, v2 }, [x0], x8
6689 call void @llvm.aarch64.neon.st1x3.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %A)
6690 %tmp = getelementptr i64, ptr %A, i64 %inc
6694 declare void @llvm.aarch64.neon.st1x3.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, ptr)
6697 define ptr @test_v4f32_post_imm_st1x3(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
6698 ; CHECK-LABEL: test_v4f32_post_imm_st1x3:
6700 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6701 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6702 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6703 ; CHECK-NEXT: st1.4s { v0, v1, v2 }, [x0], #48
6705 call void @llvm.aarch64.neon.st1x3.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, ptr %A)
6706 %tmp = getelementptr float, ptr %A, i32 12
6710 define ptr @test_v4f32_post_reg_st1x3(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, i64 %inc) nounwind {
6711 ; CHECK-LABEL: test_v4f32_post_reg_st1x3:
6713 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6714 ; CHECK-NEXT: lsl x8, x2, #2
6715 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6716 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6717 ; CHECK-NEXT: st1.4s { v0, v1, v2 }, [x0], x8
6719 call void @llvm.aarch64.neon.st1x3.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, ptr %A)
6720 %tmp = getelementptr float, ptr %A, i64 %inc
6724 declare void @llvm.aarch64.neon.st1x3.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, ptr)
6727 define ptr @test_v2f32_post_imm_st1x3(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
6728 ; CHECK-LABEL: test_v2f32_post_imm_st1x3:
6730 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6731 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6732 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6733 ; CHECK-NEXT: st1.2s { v0, v1, v2 }, [x0], #24
6735 call void @llvm.aarch64.neon.st1x3.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, ptr %A)
6736 %tmp = getelementptr float, ptr %A, i32 6
6740 define ptr @test_v2f32_post_reg_st1x3(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, i64 %inc) nounwind {
6741 ; CHECK-LABEL: test_v2f32_post_reg_st1x3:
6743 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6744 ; CHECK-NEXT: lsl x8, x2, #2
6745 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6746 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6747 ; CHECK-NEXT: st1.2s { v0, v1, v2 }, [x0], x8
6749 call void @llvm.aarch64.neon.st1x3.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, ptr %A)
6750 %tmp = getelementptr float, ptr %A, i64 %inc
6754 declare void @llvm.aarch64.neon.st1x3.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, ptr)
6757 define ptr @test_v2f64_post_imm_st1x3(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
6758 ; CHECK-LABEL: test_v2f64_post_imm_st1x3:
6760 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6761 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6762 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6763 ; CHECK-NEXT: st1.2d { v0, v1, v2 }, [x0], #48
6765 call void @llvm.aarch64.neon.st1x3.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %A)
6766 %tmp = getelementptr double, ptr %A, i64 6
6770 define ptr @test_v2f64_post_reg_st1x3(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, i64 %inc) nounwind {
6771 ; CHECK-LABEL: test_v2f64_post_reg_st1x3:
6773 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
6774 ; CHECK-NEXT: lsl x8, x2, #3
6775 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
6776 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
6777 ; CHECK-NEXT: st1.2d { v0, v1, v2 }, [x0], x8
6779 call void @llvm.aarch64.neon.st1x3.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %A)
6780 %tmp = getelementptr double, ptr %A, i64 %inc
6784 declare void @llvm.aarch64.neon.st1x3.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, ptr)
6787 define ptr @test_v1f64_post_imm_st1x3(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
6788 ; CHECK-LABEL: test_v1f64_post_imm_st1x3:
6790 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6791 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6792 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6793 ; CHECK-NEXT: st1.1d { v0, v1, v2 }, [x0], #24
6795 call void @llvm.aarch64.neon.st1x3.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %A)
6796 %tmp = getelementptr double, ptr %A, i64 3
6800 define ptr @test_v1f64_post_reg_st1x3(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, i64 %inc) nounwind {
6801 ; CHECK-LABEL: test_v1f64_post_reg_st1x3:
6803 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2 def $d0_d1_d2
6804 ; CHECK-NEXT: lsl x8, x2, #3
6805 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2 def $d0_d1_d2
6806 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2 def $d0_d1_d2
6807 ; CHECK-NEXT: st1.1d { v0, v1, v2 }, [x0], x8
6809 call void @llvm.aarch64.neon.st1x3.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %A)
6810 %tmp = getelementptr double, ptr %A, i64 %inc
6814 declare void @llvm.aarch64.neon.st1x3.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, ptr)
6817 define ptr @test_v16i8_post_imm_st1x4(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
6818 ; CHECK-LABEL: test_v16i8_post_imm_st1x4:
6820 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6821 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6822 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6823 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6824 ; CHECK-NEXT: st1.16b { v0, v1, v2, v3 }, [x0], #64
6826 call void @llvm.aarch64.neon.st1x4.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, ptr %A)
6827 %tmp = getelementptr i8, ptr %A, i32 64
6831 define ptr @test_v16i8_post_reg_st1x4(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 %inc) nounwind {
6832 ; CHECK-LABEL: test_v16i8_post_reg_st1x4:
6834 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6835 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6836 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6837 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6838 ; CHECK-NEXT: st1.16b { v0, v1, v2, v3 }, [x0], x2
6840 call void @llvm.aarch64.neon.st1x4.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, ptr %A)
6841 %tmp = getelementptr i8, ptr %A, i64 %inc
6845 declare void @llvm.aarch64.neon.st1x4.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, ptr)
6848 define ptr @test_v8i8_post_imm_st1x4(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
6849 ; CHECK-LABEL: test_v8i8_post_imm_st1x4:
6851 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6852 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6853 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6854 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6855 ; CHECK-NEXT: st1.8b { v0, v1, v2, v3 }, [x0], #32
6857 call void @llvm.aarch64.neon.st1x4.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, ptr %A)
6858 %tmp = getelementptr i8, ptr %A, i32 32
6862 define ptr @test_v8i8_post_reg_st1x4(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 %inc) nounwind {
6863 ; CHECK-LABEL: test_v8i8_post_reg_st1x4:
6865 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6866 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6867 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6868 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6869 ; CHECK-NEXT: st1.8b { v0, v1, v2, v3 }, [x0], x2
6871 call void @llvm.aarch64.neon.st1x4.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, ptr %A)
6872 %tmp = getelementptr i8, ptr %A, i64 %inc
6876 declare void @llvm.aarch64.neon.st1x4.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, ptr)
6879 define ptr @test_v8i16_post_imm_st1x4(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
6880 ; CHECK-LABEL: test_v8i16_post_imm_st1x4:
6882 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6883 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6884 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6885 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6886 ; CHECK-NEXT: st1.8h { v0, v1, v2, v3 }, [x0], #64
6888 call void @llvm.aarch64.neon.st1x4.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, ptr %A)
6889 %tmp = getelementptr i16, ptr %A, i32 32
6893 define ptr @test_v8i16_post_reg_st1x4(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 %inc) nounwind {
6894 ; CHECK-LABEL: test_v8i16_post_reg_st1x4:
6896 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6897 ; CHECK-NEXT: lsl x8, x2, #1
6898 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6899 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6900 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6901 ; CHECK-NEXT: st1.8h { v0, v1, v2, v3 }, [x0], x8
6903 call void @llvm.aarch64.neon.st1x4.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, ptr %A)
6904 %tmp = getelementptr i16, ptr %A, i64 %inc
6908 declare void @llvm.aarch64.neon.st1x4.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, ptr)
6911 define ptr @test_v4i16_post_imm_st1x4(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
6912 ; CHECK-LABEL: test_v4i16_post_imm_st1x4:
6914 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6915 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6916 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6917 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6918 ; CHECK-NEXT: st1.4h { v0, v1, v2, v3 }, [x0], #32
6920 call void @llvm.aarch64.neon.st1x4.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, ptr %A)
6921 %tmp = getelementptr i16, ptr %A, i32 16
6925 define ptr @test_v4i16_post_reg_st1x4(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 %inc) nounwind {
6926 ; CHECK-LABEL: test_v4i16_post_reg_st1x4:
6928 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6929 ; CHECK-NEXT: lsl x8, x2, #1
6930 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6931 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6932 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6933 ; CHECK-NEXT: st1.4h { v0, v1, v2, v3 }, [x0], x8
6935 call void @llvm.aarch64.neon.st1x4.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, ptr %A)
6936 %tmp = getelementptr i16, ptr %A, i64 %inc
6940 declare void @llvm.aarch64.neon.st1x4.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>,<4 x i16>, ptr)
6943 define ptr @test_v4i32_post_imm_st1x4(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
6944 ; CHECK-LABEL: test_v4i32_post_imm_st1x4:
6946 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6947 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6948 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6949 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6950 ; CHECK-NEXT: st1.4s { v0, v1, v2, v3 }, [x0], #64
6952 call void @llvm.aarch64.neon.st1x4.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, ptr %A)
6953 %tmp = getelementptr i32, ptr %A, i32 16
6957 define ptr @test_v4i32_post_reg_st1x4(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 %inc) nounwind {
6958 ; CHECK-LABEL: test_v4i32_post_reg_st1x4:
6960 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6961 ; CHECK-NEXT: lsl x8, x2, #2
6962 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6963 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6964 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
6965 ; CHECK-NEXT: st1.4s { v0, v1, v2, v3 }, [x0], x8
6967 call void @llvm.aarch64.neon.st1x4.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, ptr %A)
6968 %tmp = getelementptr i32, ptr %A, i64 %inc
6972 declare void @llvm.aarch64.neon.st1x4.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>,<4 x i32>, ptr)
6975 define ptr @test_v2i32_post_imm_st1x4(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
6976 ; CHECK-LABEL: test_v2i32_post_imm_st1x4:
6978 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6979 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6980 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6981 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6982 ; CHECK-NEXT: st1.2s { v0, v1, v2, v3 }, [x0], #32
6984 call void @llvm.aarch64.neon.st1x4.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, ptr %A)
6985 %tmp = getelementptr i32, ptr %A, i32 8
6989 define ptr @test_v2i32_post_reg_st1x4(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 %inc) nounwind {
6990 ; CHECK-LABEL: test_v2i32_post_reg_st1x4:
6992 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6993 ; CHECK-NEXT: lsl x8, x2, #2
6994 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6995 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6996 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
6997 ; CHECK-NEXT: st1.2s { v0, v1, v2, v3 }, [x0], x8
6999 call void @llvm.aarch64.neon.st1x4.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, ptr %A)
7000 %tmp = getelementptr i32, ptr %A, i64 %inc
7004 declare void @llvm.aarch64.neon.st1x4.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, ptr)
7007 define ptr @test_v2i64_post_imm_st1x4(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
7008 ; CHECK-LABEL: test_v2i64_post_imm_st1x4:
7010 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7011 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7012 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7013 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7014 ; CHECK-NEXT: st1.2d { v0, v1, v2, v3 }, [x0], #64
7016 call void @llvm.aarch64.neon.st1x4.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, ptr %A)
7017 %tmp = getelementptr i64, ptr %A, i64 8
7021 define ptr @test_v2i64_post_reg_st1x4(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 %inc) nounwind {
7022 ; CHECK-LABEL: test_v2i64_post_reg_st1x4:
7024 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7025 ; CHECK-NEXT: lsl x8, x2, #3
7026 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7027 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7028 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7029 ; CHECK-NEXT: st1.2d { v0, v1, v2, v3 }, [x0], x8
7031 call void @llvm.aarch64.neon.st1x4.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, ptr %A)
7032 %tmp = getelementptr i64, ptr %A, i64 %inc
7036 declare void @llvm.aarch64.neon.st1x4.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>,<2 x i64>, ptr)
7039 define ptr @test_v1i64_post_imm_st1x4(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
7040 ; CHECK-LABEL: test_v1i64_post_imm_st1x4:
7042 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7043 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7044 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7045 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7046 ; CHECK-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], #32
7048 call void @llvm.aarch64.neon.st1x4.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, ptr %A)
7049 %tmp = getelementptr i64, ptr %A, i64 4
7053 define ptr @test_v1i64_post_reg_st1x4(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 %inc) nounwind {
7054 ; CHECK-LABEL: test_v1i64_post_reg_st1x4:
7056 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7057 ; CHECK-NEXT: lsl x8, x2, #3
7058 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7059 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7060 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7061 ; CHECK-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], x8
7063 call void @llvm.aarch64.neon.st1x4.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, ptr %A)
7064 %tmp = getelementptr i64, ptr %A, i64 %inc
7068 declare void @llvm.aarch64.neon.st1x4.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>,<1 x i64>, ptr)
7071 define ptr @test_v4f32_post_imm_st1x4(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
7072 ; CHECK-LABEL: test_v4f32_post_imm_st1x4:
7074 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7075 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7076 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7077 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7078 ; CHECK-NEXT: st1.4s { v0, v1, v2, v3 }, [x0], #64
7080 call void @llvm.aarch64.neon.st1x4.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, ptr %A)
7081 %tmp = getelementptr float, ptr %A, i32 16
7085 define ptr @test_v4f32_post_reg_st1x4(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 %inc) nounwind {
7086 ; CHECK-LABEL: test_v4f32_post_reg_st1x4:
7088 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7089 ; CHECK-NEXT: lsl x8, x2, #2
7090 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7091 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7092 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7093 ; CHECK-NEXT: st1.4s { v0, v1, v2, v3 }, [x0], x8
7095 call void @llvm.aarch64.neon.st1x4.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, ptr %A)
7096 %tmp = getelementptr float, ptr %A, i64 %inc
7100 declare void @llvm.aarch64.neon.st1x4.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, <4 x float>, ptr)
7103 define ptr @test_v2f32_post_imm_st1x4(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
7104 ; CHECK-LABEL: test_v2f32_post_imm_st1x4:
7106 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7107 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7108 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7109 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7110 ; CHECK-NEXT: st1.2s { v0, v1, v2, v3 }, [x0], #32
7112 call void @llvm.aarch64.neon.st1x4.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, ptr %A)
7113 %tmp = getelementptr float, ptr %A, i32 8
7117 define ptr @test_v2f32_post_reg_st1x4(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 %inc) nounwind {
7118 ; CHECK-LABEL: test_v2f32_post_reg_st1x4:
7120 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7121 ; CHECK-NEXT: lsl x8, x2, #2
7122 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7123 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7124 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7125 ; CHECK-NEXT: st1.2s { v0, v1, v2, v3 }, [x0], x8
7127 call void @llvm.aarch64.neon.st1x4.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, ptr %A)
7128 %tmp = getelementptr float, ptr %A, i64 %inc
7132 declare void @llvm.aarch64.neon.st1x4.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, <2 x float>, ptr)
7135 define ptr @test_v2f64_post_imm_st1x4(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
7136 ; CHECK-LABEL: test_v2f64_post_imm_st1x4:
7138 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7139 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7140 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7141 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7142 ; CHECK-NEXT: st1.2d { v0, v1, v2, v3 }, [x0], #64
7144 call void @llvm.aarch64.neon.st1x4.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, ptr %A)
7145 %tmp = getelementptr double, ptr %A, i64 8
7149 define ptr @test_v2f64_post_reg_st1x4(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 %inc) nounwind {
7150 ; CHECK-LABEL: test_v2f64_post_reg_st1x4:
7152 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7153 ; CHECK-NEXT: lsl x8, x2, #3
7154 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7155 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7156 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7157 ; CHECK-NEXT: st1.2d { v0, v1, v2, v3 }, [x0], x8
7159 call void @llvm.aarch64.neon.st1x4.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, ptr %A)
7160 %tmp = getelementptr double, ptr %A, i64 %inc
7164 declare void @llvm.aarch64.neon.st1x4.v2f64.p0(<2 x double>, <2 x double>, <2 x double>,<2 x double>, ptr)
7167 define ptr @test_v1f64_post_imm_st1x4(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
7168 ; CHECK-LABEL: test_v1f64_post_imm_st1x4:
7170 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7171 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7172 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7173 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7174 ; CHECK-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], #32
7176 call void @llvm.aarch64.neon.st1x4.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, ptr %A)
7177 %tmp = getelementptr double, ptr %A, i64 4
7181 define ptr @test_v1f64_post_reg_st1x4(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 %inc) nounwind {
7182 ; CHECK-LABEL: test_v1f64_post_reg_st1x4:
7184 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7185 ; CHECK-NEXT: lsl x8, x2, #3
7186 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7187 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7188 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $d0_d1_d2_d3 def $d0_d1_d2_d3
7189 ; CHECK-NEXT: st1.1d { v0, v1, v2, v3 }, [x0], x8
7191 call void @llvm.aarch64.neon.st1x4.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, ptr %A)
7192 %tmp = getelementptr double, ptr %A, i64 %inc
7196 declare void @llvm.aarch64.neon.st1x4.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, <1 x double>, ptr)
7198 define ptr @test_v16i8_post_imm_st2lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C) nounwind {
7199 ; CHECK-LABEL: test_v16i8_post_imm_st2lane:
7201 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7202 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7203 ; CHECK-NEXT: st2.b { v0, v1 }[0], [x0], #2
7205 call void @llvm.aarch64.neon.st2lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, i64 0, ptr %A)
7206 %tmp = getelementptr i8, ptr %A, i32 2
7210 define ptr @test_v16i8_post_reg_st2lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, i64 %inc) nounwind {
7211 ; CHECK-LABEL: test_v16i8_post_reg_st2lane:
7213 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7214 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7215 ; CHECK-NEXT: st2.b { v0, v1 }[0], [x0], x2
7217 call void @llvm.aarch64.neon.st2lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, i64 0, ptr %A)
7218 %tmp = getelementptr i8, ptr %A, i64 %inc
7222 declare void @llvm.aarch64.neon.st2lane.v16i8.p0(<16 x i8>, <16 x i8>, i64, ptr)
7225 define ptr @test_v8i8_post_imm_st2lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C) nounwind {
7226 ; CHECK-LABEL: test_v8i8_post_imm_st2lane:
7228 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7229 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7230 ; CHECK-NEXT: st2.b { v0, v1 }[0], [x0], #2
7232 call void @llvm.aarch64.neon.st2lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, i64 0, ptr %A)
7233 %tmp = getelementptr i8, ptr %A, i32 2
7237 define ptr @test_v8i8_post_reg_st2lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, i64 %inc) nounwind {
7238 ; CHECK-LABEL: test_v8i8_post_reg_st2lane:
7240 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7241 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7242 ; CHECK-NEXT: st2.b { v0, v1 }[0], [x0], x2
7244 call void @llvm.aarch64.neon.st2lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, i64 0, ptr %A)
7245 %tmp = getelementptr i8, ptr %A, i64 %inc
7249 declare void @llvm.aarch64.neon.st2lane.v8i8.p0(<8 x i8>, <8 x i8>, i64, ptr)
7252 define ptr @test_v8i16_post_imm_st2lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C) nounwind {
7253 ; CHECK-LABEL: test_v8i16_post_imm_st2lane:
7255 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7256 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7257 ; CHECK-NEXT: st2.h { v0, v1 }[0], [x0], #4
7259 call void @llvm.aarch64.neon.st2lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, i64 0, ptr %A)
7260 %tmp = getelementptr i16, ptr %A, i32 2
7264 define ptr @test_v8i16_post_reg_st2lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, i64 %inc) nounwind {
7265 ; CHECK-LABEL: test_v8i16_post_reg_st2lane:
7267 ; CHECK-NEXT: lsl x8, x2, #1
7268 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7269 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7270 ; CHECK-NEXT: st2.h { v0, v1 }[0], [x0], x8
7272 call void @llvm.aarch64.neon.st2lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, i64 0, ptr %A)
7273 %tmp = getelementptr i16, ptr %A, i64 %inc
7277 declare void @llvm.aarch64.neon.st2lane.v8i16.p0(<8 x i16>, <8 x i16>, i64, ptr)
7280 define ptr @test_v4i16_post_imm_st2lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C) nounwind {
7281 ; CHECK-LABEL: test_v4i16_post_imm_st2lane:
7283 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7284 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7285 ; CHECK-NEXT: st2.h { v0, v1 }[0], [x0], #4
7287 call void @llvm.aarch64.neon.st2lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, i64 0, ptr %A)
7288 %tmp = getelementptr i16, ptr %A, i32 2
7292 define ptr @test_v4i16_post_reg_st2lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, i64 %inc) nounwind {
7293 ; CHECK-LABEL: test_v4i16_post_reg_st2lane:
7295 ; CHECK-NEXT: lsl x8, x2, #1
7296 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7297 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7298 ; CHECK-NEXT: st2.h { v0, v1 }[0], [x0], x8
7300 call void @llvm.aarch64.neon.st2lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, i64 0, ptr %A)
7301 %tmp = getelementptr i16, ptr %A, i64 %inc
7305 declare void @llvm.aarch64.neon.st2lane.v4i16.p0(<4 x i16>, <4 x i16>, i64, ptr)
7308 define ptr @test_v4i32_post_imm_st2lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C) nounwind {
7309 ; CHECK-LABEL: test_v4i32_post_imm_st2lane:
7311 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7312 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7313 ; CHECK-NEXT: st2.s { v0, v1 }[0], [x0], #8
7315 call void @llvm.aarch64.neon.st2lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, i64 0, ptr %A)
7316 %tmp = getelementptr i32, ptr %A, i32 2
7320 define ptr @test_v4i32_post_reg_st2lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, i64 %inc) nounwind {
7321 ; CHECK-LABEL: test_v4i32_post_reg_st2lane:
7323 ; CHECK-NEXT: lsl x8, x2, #2
7324 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7325 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7326 ; CHECK-NEXT: st2.s { v0, v1 }[0], [x0], x8
7328 call void @llvm.aarch64.neon.st2lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, i64 0, ptr %A)
7329 %tmp = getelementptr i32, ptr %A, i64 %inc
7333 declare void @llvm.aarch64.neon.st2lane.v4i32.p0(<4 x i32>, <4 x i32>, i64, ptr)
7336 define ptr @test_v2i32_post_imm_st2lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C) nounwind {
7337 ; CHECK-LABEL: test_v2i32_post_imm_st2lane:
7339 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7340 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7341 ; CHECK-NEXT: st2.s { v0, v1 }[0], [x0], #8
7343 call void @llvm.aarch64.neon.st2lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, i64 0, ptr %A)
7344 %tmp = getelementptr i32, ptr %A, i32 2
7348 define ptr @test_v2i32_post_reg_st2lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, i64 %inc) nounwind {
7349 ; CHECK-LABEL: test_v2i32_post_reg_st2lane:
7351 ; CHECK-NEXT: lsl x8, x2, #2
7352 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7353 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7354 ; CHECK-NEXT: st2.s { v0, v1 }[0], [x0], x8
7356 call void @llvm.aarch64.neon.st2lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, i64 0, ptr %A)
7357 %tmp = getelementptr i32, ptr %A, i64 %inc
7361 declare void @llvm.aarch64.neon.st2lane.v2i32.p0(<2 x i32>, <2 x i32>, i64, ptr)
7364 define ptr @test_v2i64_post_imm_st2lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C) nounwind {
7365 ; CHECK-LABEL: test_v2i64_post_imm_st2lane:
7367 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7368 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7369 ; CHECK-NEXT: st2.d { v0, v1 }[0], [x0], #16
7371 call void @llvm.aarch64.neon.st2lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, i64 0, ptr %A)
7372 %tmp = getelementptr i64, ptr %A, i64 2
7376 define ptr @test_v2i64_post_reg_st2lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, i64 %inc) nounwind {
7377 ; CHECK-LABEL: test_v2i64_post_reg_st2lane:
7379 ; CHECK-NEXT: lsl x8, x2, #3
7380 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7381 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7382 ; CHECK-NEXT: st2.d { v0, v1 }[0], [x0], x8
7384 call void @llvm.aarch64.neon.st2lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, i64 0, ptr %A)
7385 %tmp = getelementptr i64, ptr %A, i64 %inc
7389 declare void @llvm.aarch64.neon.st2lane.v2i64.p0(<2 x i64>, <2 x i64>, i64, ptr)
7392 define ptr @test_v1i64_post_imm_st2lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C) nounwind {
7393 ; CHECK-LABEL: test_v1i64_post_imm_st2lane:
7395 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7396 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7397 ; CHECK-NEXT: st2.d { v0, v1 }[0], [x0], #16
7399 call void @llvm.aarch64.neon.st2lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, i64 0, ptr %A)
7400 %tmp = getelementptr i64, ptr %A, i64 2
7404 define ptr @test_v1i64_post_reg_st2lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, i64 %inc) nounwind {
7405 ; CHECK-LABEL: test_v1i64_post_reg_st2lane:
7407 ; CHECK-NEXT: lsl x8, x2, #3
7408 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7409 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7410 ; CHECK-NEXT: st2.d { v0, v1 }[0], [x0], x8
7412 call void @llvm.aarch64.neon.st2lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, i64 0, ptr %A)
7413 %tmp = getelementptr i64, ptr %A, i64 %inc
7417 declare void @llvm.aarch64.neon.st2lane.v1i64.p0(<1 x i64>, <1 x i64>, i64, ptr)
7420 define ptr @test_v4f32_post_imm_st2lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C) nounwind {
7421 ; CHECK-LABEL: test_v4f32_post_imm_st2lane:
7423 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7424 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7425 ; CHECK-NEXT: st2.s { v0, v1 }[0], [x0], #8
7427 call void @llvm.aarch64.neon.st2lane.v4f32.p0(<4 x float> %B, <4 x float> %C, i64 0, ptr %A)
7428 %tmp = getelementptr float, ptr %A, i32 2
7432 define ptr @test_v4f32_post_reg_st2lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, i64 %inc) nounwind {
7433 ; CHECK-LABEL: test_v4f32_post_reg_st2lane:
7435 ; CHECK-NEXT: lsl x8, x2, #2
7436 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7437 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7438 ; CHECK-NEXT: st2.s { v0, v1 }[0], [x0], x8
7440 call void @llvm.aarch64.neon.st2lane.v4f32.p0(<4 x float> %B, <4 x float> %C, i64 0, ptr %A)
7441 %tmp = getelementptr float, ptr %A, i64 %inc
7445 declare void @llvm.aarch64.neon.st2lane.v4f32.p0(<4 x float>, <4 x float>, i64, ptr)
7448 define ptr @test_v2f32_post_imm_st2lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C) nounwind {
7449 ; CHECK-LABEL: test_v2f32_post_imm_st2lane:
7451 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7452 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7453 ; CHECK-NEXT: st2.s { v0, v1 }[0], [x0], #8
7455 call void @llvm.aarch64.neon.st2lane.v2f32.p0(<2 x float> %B, <2 x float> %C, i64 0, ptr %A)
7456 %tmp = getelementptr float, ptr %A, i32 2
7460 define ptr @test_v2f32_post_reg_st2lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, i64 %inc) nounwind {
7461 ; CHECK-LABEL: test_v2f32_post_reg_st2lane:
7463 ; CHECK-NEXT: lsl x8, x2, #2
7464 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7465 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7466 ; CHECK-NEXT: st2.s { v0, v1 }[0], [x0], x8
7468 call void @llvm.aarch64.neon.st2lane.v2f32.p0(<2 x float> %B, <2 x float> %C, i64 0, ptr %A)
7469 %tmp = getelementptr float, ptr %A, i64 %inc
7473 declare void @llvm.aarch64.neon.st2lane.v2f32.p0(<2 x float>, <2 x float>, i64, ptr)
7476 define ptr @test_v2f64_post_imm_st2lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C) nounwind {
7477 ; CHECK-LABEL: test_v2f64_post_imm_st2lane:
7479 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7480 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7481 ; CHECK-NEXT: st2.d { v0, v1 }[0], [x0], #16
7483 call void @llvm.aarch64.neon.st2lane.v2f64.p0(<2 x double> %B, <2 x double> %C, i64 0, ptr %A)
7484 %tmp = getelementptr double, ptr %A, i64 2
7488 define ptr @test_v2f64_post_reg_st2lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, i64 %inc) nounwind {
7489 ; CHECK-LABEL: test_v2f64_post_reg_st2lane:
7491 ; CHECK-NEXT: lsl x8, x2, #3
7492 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1
7493 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1
7494 ; CHECK-NEXT: st2.d { v0, v1 }[0], [x0], x8
7496 call void @llvm.aarch64.neon.st2lane.v2f64.p0(<2 x double> %B, <2 x double> %C, i64 0, ptr %A)
7497 %tmp = getelementptr double, ptr %A, i64 %inc
7501 declare void @llvm.aarch64.neon.st2lane.v2f64.p0(<2 x double>, <2 x double>, i64, ptr)
7504 define ptr @test_v1f64_post_imm_st2lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C) nounwind {
7505 ; CHECK-LABEL: test_v1f64_post_imm_st2lane:
7507 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7508 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7509 ; CHECK-NEXT: st2.d { v0, v1 }[0], [x0], #16
7511 call void @llvm.aarch64.neon.st2lane.v1f64.p0(<1 x double> %B, <1 x double> %C, i64 0, ptr %A)
7512 %tmp = getelementptr double, ptr %A, i64 2
7516 define ptr @test_v1f64_post_reg_st2lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, i64 %inc) nounwind {
7517 ; CHECK-LABEL: test_v1f64_post_reg_st2lane:
7519 ; CHECK-NEXT: lsl x8, x2, #3
7520 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1 def $q0_q1
7521 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1 def $q0_q1
7522 ; CHECK-NEXT: st2.d { v0, v1 }[0], [x0], x8
7524 call void @llvm.aarch64.neon.st2lane.v1f64.p0(<1 x double> %B, <1 x double> %C, i64 0, ptr %A)
7525 %tmp = getelementptr double, ptr %A, i64 %inc
7529 declare void @llvm.aarch64.neon.st2lane.v1f64.p0(<1 x double>, <1 x double>, i64, ptr)
7532 define ptr @test_v16i8_post_imm_st3lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) nounwind {
7533 ; CHECK-LABEL: test_v16i8_post_imm_st3lane:
7535 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7536 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7537 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7538 ; CHECK-NEXT: st3.b { v0, v1, v2 }[0], [x0], #3
7540 call void @llvm.aarch64.neon.st3lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, ptr %A)
7541 %tmp = getelementptr i8, ptr %A, i32 3
7545 define ptr @test_v16i8_post_reg_st3lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 %inc) nounwind {
7546 ; CHECK-LABEL: test_v16i8_post_reg_st3lane:
7548 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7549 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7550 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7551 ; CHECK-NEXT: st3.b { v0, v1, v2 }[0], [x0], x2
7553 call void @llvm.aarch64.neon.st3lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 0, ptr %A)
7554 %tmp = getelementptr i8, ptr %A, i64 %inc
7558 declare void @llvm.aarch64.neon.st3lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, i64, ptr)
7561 define ptr @test_v8i8_post_imm_st3lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D) nounwind {
7562 ; CHECK-LABEL: test_v8i8_post_imm_st3lane:
7564 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7565 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7566 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7567 ; CHECK-NEXT: st3.b { v0, v1, v2 }[0], [x0], #3
7569 call void @llvm.aarch64.neon.st3lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, ptr %A)
7570 %tmp = getelementptr i8, ptr %A, i32 3
7574 define ptr @test_v8i8_post_reg_st3lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 %inc) nounwind {
7575 ; CHECK-LABEL: test_v8i8_post_reg_st3lane:
7577 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7578 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7579 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7580 ; CHECK-NEXT: st3.b { v0, v1, v2 }[0], [x0], x2
7582 call void @llvm.aarch64.neon.st3lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i64 0, ptr %A)
7583 %tmp = getelementptr i8, ptr %A, i64 %inc
7587 declare void @llvm.aarch64.neon.st3lane.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, i64, ptr)
7590 define ptr @test_v8i16_post_imm_st3lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D) nounwind {
7591 ; CHECK-LABEL: test_v8i16_post_imm_st3lane:
7593 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7594 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7595 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7596 ; CHECK-NEXT: st3.h { v0, v1, v2 }[0], [x0], #6
7598 call void @llvm.aarch64.neon.st3lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, ptr %A)
7599 %tmp = getelementptr i16, ptr %A, i32 3
7603 define ptr @test_v8i16_post_reg_st3lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 %inc) nounwind {
7604 ; CHECK-LABEL: test_v8i16_post_reg_st3lane:
7606 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7607 ; CHECK-NEXT: lsl x8, x2, #1
7608 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7609 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7610 ; CHECK-NEXT: st3.h { v0, v1, v2 }[0], [x0], x8
7612 call void @llvm.aarch64.neon.st3lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 0, ptr %A)
7613 %tmp = getelementptr i16, ptr %A, i64 %inc
7617 declare void @llvm.aarch64.neon.st3lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, i64, ptr)
7620 define ptr @test_v4i16_post_imm_st3lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D) nounwind {
7621 ; CHECK-LABEL: test_v4i16_post_imm_st3lane:
7623 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7624 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7625 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7626 ; CHECK-NEXT: st3.h { v0, v1, v2 }[0], [x0], #6
7628 call void @llvm.aarch64.neon.st3lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, ptr %A)
7629 %tmp = getelementptr i16, ptr %A, i32 3
7633 define ptr @test_v4i16_post_reg_st3lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 %inc) nounwind {
7634 ; CHECK-LABEL: test_v4i16_post_reg_st3lane:
7636 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7637 ; CHECK-NEXT: lsl x8, x2, #1
7638 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7639 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7640 ; CHECK-NEXT: st3.h { v0, v1, v2 }[0], [x0], x8
7642 call void @llvm.aarch64.neon.st3lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i64 0, ptr %A)
7643 %tmp = getelementptr i16, ptr %A, i64 %inc
7647 declare void @llvm.aarch64.neon.st3lane.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, i64, ptr)
7650 define ptr @test_v4i32_post_imm_st3lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D) nounwind {
7651 ; CHECK-LABEL: test_v4i32_post_imm_st3lane:
7653 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7654 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7655 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7656 ; CHECK-NEXT: st3.s { v0, v1, v2 }[0], [x0], #12
7658 call void @llvm.aarch64.neon.st3lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, ptr %A)
7659 %tmp = getelementptr i32, ptr %A, i32 3
7663 define ptr @test_v4i32_post_reg_st3lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 %inc) nounwind {
7664 ; CHECK-LABEL: test_v4i32_post_reg_st3lane:
7666 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7667 ; CHECK-NEXT: lsl x8, x2, #2
7668 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7669 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7670 ; CHECK-NEXT: st3.s { v0, v1, v2 }[0], [x0], x8
7672 call void @llvm.aarch64.neon.st3lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 0, ptr %A)
7673 %tmp = getelementptr i32, ptr %A, i64 %inc
7677 declare void @llvm.aarch64.neon.st3lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, i64, ptr)
7680 define ptr @test_v2i32_post_imm_st3lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D) nounwind {
7681 ; CHECK-LABEL: test_v2i32_post_imm_st3lane:
7683 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7684 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7685 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7686 ; CHECK-NEXT: st3.s { v0, v1, v2 }[0], [x0], #12
7688 call void @llvm.aarch64.neon.st3lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, ptr %A)
7689 %tmp = getelementptr i32, ptr %A, i32 3
7693 define ptr @test_v2i32_post_reg_st3lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 %inc) nounwind {
7694 ; CHECK-LABEL: test_v2i32_post_reg_st3lane:
7696 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7697 ; CHECK-NEXT: lsl x8, x2, #2
7698 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7699 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7700 ; CHECK-NEXT: st3.s { v0, v1, v2 }[0], [x0], x8
7702 call void @llvm.aarch64.neon.st3lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i64 0, ptr %A)
7703 %tmp = getelementptr i32, ptr %A, i64 %inc
7707 declare void @llvm.aarch64.neon.st3lane.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, i64, ptr)
7710 define ptr @test_v2i64_post_imm_st3lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D) nounwind {
7711 ; CHECK-LABEL: test_v2i64_post_imm_st3lane:
7713 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7714 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7715 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7716 ; CHECK-NEXT: st3.d { v0, v1, v2 }[0], [x0], #24
7718 call void @llvm.aarch64.neon.st3lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, ptr %A)
7719 %tmp = getelementptr i64, ptr %A, i64 3
7723 define ptr @test_v2i64_post_reg_st3lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 %inc) nounwind {
7724 ; CHECK-LABEL: test_v2i64_post_reg_st3lane:
7726 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7727 ; CHECK-NEXT: lsl x8, x2, #3
7728 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7729 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7730 ; CHECK-NEXT: st3.d { v0, v1, v2 }[0], [x0], x8
7732 call void @llvm.aarch64.neon.st3lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 0, ptr %A)
7733 %tmp = getelementptr i64, ptr %A, i64 %inc
7737 declare void @llvm.aarch64.neon.st3lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, i64, ptr)
7740 define ptr @test_v1i64_post_imm_st3lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D) nounwind {
7741 ; CHECK-LABEL: test_v1i64_post_imm_st3lane:
7743 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7744 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7745 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7746 ; CHECK-NEXT: st3.d { v0, v1, v2 }[0], [x0], #24
7748 call void @llvm.aarch64.neon.st3lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, ptr %A)
7749 %tmp = getelementptr i64, ptr %A, i64 3
7753 define ptr @test_v1i64_post_reg_st3lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 %inc) nounwind {
7754 ; CHECK-LABEL: test_v1i64_post_reg_st3lane:
7756 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7757 ; CHECK-NEXT: lsl x8, x2, #3
7758 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7759 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7760 ; CHECK-NEXT: st3.d { v0, v1, v2 }[0], [x0], x8
7762 call void @llvm.aarch64.neon.st3lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64 0, ptr %A)
7763 %tmp = getelementptr i64, ptr %A, i64 %inc
7767 declare void @llvm.aarch64.neon.st3lane.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, i64, ptr)
7770 define ptr @test_v4f32_post_imm_st3lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D) nounwind {
7771 ; CHECK-LABEL: test_v4f32_post_imm_st3lane:
7773 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7774 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7775 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7776 ; CHECK-NEXT: st3.s { v0, v1, v2 }[0], [x0], #12
7778 call void @llvm.aarch64.neon.st3lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, ptr %A)
7779 %tmp = getelementptr float, ptr %A, i32 3
7783 define ptr @test_v4f32_post_reg_st3lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, i64 %inc) nounwind {
7784 ; CHECK-LABEL: test_v4f32_post_reg_st3lane:
7786 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7787 ; CHECK-NEXT: lsl x8, x2, #2
7788 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7789 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7790 ; CHECK-NEXT: st3.s { v0, v1, v2 }[0], [x0], x8
7792 call void @llvm.aarch64.neon.st3lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, i64 0, ptr %A)
7793 %tmp = getelementptr float, ptr %A, i64 %inc
7797 declare void @llvm.aarch64.neon.st3lane.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, i64, ptr)
7800 define ptr @test_v2f32_post_imm_st3lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D) nounwind {
7801 ; CHECK-LABEL: test_v2f32_post_imm_st3lane:
7803 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7804 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7805 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7806 ; CHECK-NEXT: st3.s { v0, v1, v2 }[0], [x0], #12
7808 call void @llvm.aarch64.neon.st3lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, ptr %A)
7809 %tmp = getelementptr float, ptr %A, i32 3
7813 define ptr @test_v2f32_post_reg_st3lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, i64 %inc) nounwind {
7814 ; CHECK-LABEL: test_v2f32_post_reg_st3lane:
7816 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7817 ; CHECK-NEXT: lsl x8, x2, #2
7818 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7819 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7820 ; CHECK-NEXT: st3.s { v0, v1, v2 }[0], [x0], x8
7822 call void @llvm.aarch64.neon.st3lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, i64 0, ptr %A)
7823 %tmp = getelementptr float, ptr %A, i64 %inc
7827 declare void @llvm.aarch64.neon.st3lane.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, i64, ptr)
7830 define ptr @test_v2f64_post_imm_st3lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D) nounwind {
7831 ; CHECK-LABEL: test_v2f64_post_imm_st3lane:
7833 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7834 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7835 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7836 ; CHECK-NEXT: st3.d { v0, v1, v2 }[0], [x0], #24
7838 call void @llvm.aarch64.neon.st3lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, ptr %A)
7839 %tmp = getelementptr double, ptr %A, i64 3
7843 define ptr @test_v2f64_post_reg_st3lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, i64 %inc) nounwind {
7844 ; CHECK-LABEL: test_v2f64_post_reg_st3lane:
7846 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2
7847 ; CHECK-NEXT: lsl x8, x2, #3
7848 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2
7849 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2
7850 ; CHECK-NEXT: st3.d { v0, v1, v2 }[0], [x0], x8
7852 call void @llvm.aarch64.neon.st3lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, i64 0, ptr %A)
7853 %tmp = getelementptr double, ptr %A, i64 %inc
7857 declare void @llvm.aarch64.neon.st3lane.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, i64, ptr)
7860 define ptr @test_v1f64_post_imm_st3lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D) nounwind {
7861 ; CHECK-LABEL: test_v1f64_post_imm_st3lane:
7863 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7864 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7865 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7866 ; CHECK-NEXT: st3.d { v0, v1, v2 }[0], [x0], #24
7868 call void @llvm.aarch64.neon.st3lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, ptr %A)
7869 %tmp = getelementptr double, ptr %A, i64 3
7873 define ptr @test_v1f64_post_reg_st3lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, i64 %inc) nounwind {
7874 ; CHECK-LABEL: test_v1f64_post_reg_st3lane:
7876 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2 def $q0_q1_q2
7877 ; CHECK-NEXT: lsl x8, x2, #3
7878 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2 def $q0_q1_q2
7879 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2 def $q0_q1_q2
7880 ; CHECK-NEXT: st3.d { v0, v1, v2 }[0], [x0], x8
7882 call void @llvm.aarch64.neon.st3lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, i64 0, ptr %A)
7883 %tmp = getelementptr double, ptr %A, i64 %inc
7887 declare void @llvm.aarch64.neon.st3lane.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, i64, ptr)
7890 define ptr @test_v16i8_post_imm_st4lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) nounwind {
7891 ; CHECK-LABEL: test_v16i8_post_imm_st4lane:
7893 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7894 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7895 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7896 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7897 ; CHECK-NEXT: st4.b { v0, v1, v2, v3 }[0], [x0], #4
7899 call void @llvm.aarch64.neon.st4lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, ptr %A)
7900 %tmp = getelementptr i8, ptr %A, i32 4
7904 define ptr @test_v16i8_post_reg_st4lane(ptr %A, ptr %ptr, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 %inc) nounwind {
7905 ; CHECK-LABEL: test_v16i8_post_reg_st4lane:
7907 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7908 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7909 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7910 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7911 ; CHECK-NEXT: st4.b { v0, v1, v2, v3 }[0], [x0], x2
7913 call void @llvm.aarch64.neon.st4lane.v16i8.p0(<16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, i64 0, ptr %A)
7914 %tmp = getelementptr i8, ptr %A, i64 %inc
7918 declare void @llvm.aarch64.neon.st4lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i64, ptr)
7921 define ptr @test_v8i8_post_imm_st4lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E) nounwind {
7922 ; CHECK-LABEL: test_v8i8_post_imm_st4lane:
7924 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7925 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7926 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7927 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7928 ; CHECK-NEXT: st4.b { v0, v1, v2, v3 }[0], [x0], #4
7930 call void @llvm.aarch64.neon.st4lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, ptr %A)
7931 %tmp = getelementptr i8, ptr %A, i32 4
7935 define ptr @test_v8i8_post_reg_st4lane(ptr %A, ptr %ptr, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 %inc) nounwind {
7936 ; CHECK-LABEL: test_v8i8_post_reg_st4lane:
7938 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7939 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7940 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7941 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7942 ; CHECK-NEXT: st4.b { v0, v1, v2, v3 }[0], [x0], x2
7944 call void @llvm.aarch64.neon.st4lane.v8i8.p0(<8 x i8> %B, <8 x i8> %C, <8 x i8> %D, <8 x i8> %E, i64 0, ptr %A)
7945 %tmp = getelementptr i8, ptr %A, i64 %inc
7949 declare void @llvm.aarch64.neon.st4lane.v8i8.p0(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i64, ptr)
7952 define ptr @test_v8i16_post_imm_st4lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E) nounwind {
7953 ; CHECK-LABEL: test_v8i16_post_imm_st4lane:
7955 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7956 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7957 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7958 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7959 ; CHECK-NEXT: st4.h { v0, v1, v2, v3 }[0], [x0], #8
7961 call void @llvm.aarch64.neon.st4lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, ptr %A)
7962 %tmp = getelementptr i16, ptr %A, i32 4
7966 define ptr @test_v8i16_post_reg_st4lane(ptr %A, ptr %ptr, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 %inc) nounwind {
7967 ; CHECK-LABEL: test_v8i16_post_reg_st4lane:
7969 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7970 ; CHECK-NEXT: lsl x8, x2, #1
7971 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7972 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7973 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7974 ; CHECK-NEXT: st4.h { v0, v1, v2, v3 }[0], [x0], x8
7976 call void @llvm.aarch64.neon.st4lane.v8i16.p0(<8 x i16> %B, <8 x i16> %C, <8 x i16> %D, <8 x i16> %E, i64 0, ptr %A)
7977 %tmp = getelementptr i16, ptr %A, i64 %inc
7981 declare void @llvm.aarch64.neon.st4lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i64, ptr)
7984 define ptr @test_v4i16_post_imm_st4lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E) nounwind {
7985 ; CHECK-LABEL: test_v4i16_post_imm_st4lane:
7987 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7988 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7989 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7990 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
7991 ; CHECK-NEXT: st4.h { v0, v1, v2, v3 }[0], [x0], #8
7993 call void @llvm.aarch64.neon.st4lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, ptr %A)
7994 %tmp = getelementptr i16, ptr %A, i32 4
7998 define ptr @test_v4i16_post_reg_st4lane(ptr %A, ptr %ptr, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 %inc) nounwind {
7999 ; CHECK-LABEL: test_v4i16_post_reg_st4lane:
8001 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8002 ; CHECK-NEXT: lsl x8, x2, #1
8003 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8004 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8005 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8006 ; CHECK-NEXT: st4.h { v0, v1, v2, v3 }[0], [x0], x8
8008 call void @llvm.aarch64.neon.st4lane.v4i16.p0(<4 x i16> %B, <4 x i16> %C, <4 x i16> %D, <4 x i16> %E, i64 0, ptr %A)
8009 %tmp = getelementptr i16, ptr %A, i64 %inc
8013 declare void @llvm.aarch64.neon.st4lane.v4i16.p0(<4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i64, ptr)
8016 define ptr @test_v4i32_post_imm_st4lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E) nounwind {
8017 ; CHECK-LABEL: test_v4i32_post_imm_st4lane:
8019 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8020 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8021 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8022 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8023 ; CHECK-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], #16
8025 call void @llvm.aarch64.neon.st4lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, ptr %A)
8026 %tmp = getelementptr i32, ptr %A, i32 4
8030 define ptr @test_v4i32_post_reg_st4lane(ptr %A, ptr %ptr, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 %inc) nounwind {
8031 ; CHECK-LABEL: test_v4i32_post_reg_st4lane:
8033 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8034 ; CHECK-NEXT: lsl x8, x2, #2
8035 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8036 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8037 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8038 ; CHECK-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], x8
8040 call void @llvm.aarch64.neon.st4lane.v4i32.p0(<4 x i32> %B, <4 x i32> %C, <4 x i32> %D, <4 x i32> %E, i64 0, ptr %A)
8041 %tmp = getelementptr i32, ptr %A, i64 %inc
8045 declare void @llvm.aarch64.neon.st4lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i64, ptr)
8048 define ptr @test_v2i32_post_imm_st4lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E) nounwind {
8049 ; CHECK-LABEL: test_v2i32_post_imm_st4lane:
8051 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8052 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8053 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8054 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8055 ; CHECK-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], #16
8057 call void @llvm.aarch64.neon.st4lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, ptr %A)
8058 %tmp = getelementptr i32, ptr %A, i32 4
8062 define ptr @test_v2i32_post_reg_st4lane(ptr %A, ptr %ptr, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 %inc) nounwind {
8063 ; CHECK-LABEL: test_v2i32_post_reg_st4lane:
8065 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8066 ; CHECK-NEXT: lsl x8, x2, #2
8067 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8068 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8069 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8070 ; CHECK-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], x8
8072 call void @llvm.aarch64.neon.st4lane.v2i32.p0(<2 x i32> %B, <2 x i32> %C, <2 x i32> %D, <2 x i32> %E, i64 0, ptr %A)
8073 %tmp = getelementptr i32, ptr %A, i64 %inc
8077 declare void @llvm.aarch64.neon.st4lane.v2i32.p0(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i64, ptr)
8080 define ptr @test_v2i64_post_imm_st4lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E) nounwind {
8081 ; CHECK-LABEL: test_v2i64_post_imm_st4lane:
8083 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8084 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8085 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8086 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8087 ; CHECK-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], #32
8089 call void @llvm.aarch64.neon.st4lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, ptr %A)
8090 %tmp = getelementptr i64, ptr %A, i64 4
8094 define ptr @test_v2i64_post_reg_st4lane(ptr %A, ptr %ptr, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 %inc) nounwind {
8095 ; CHECK-LABEL: test_v2i64_post_reg_st4lane:
8097 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8098 ; CHECK-NEXT: lsl x8, x2, #3
8099 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8100 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8101 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8102 ; CHECK-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], x8
8104 call void @llvm.aarch64.neon.st4lane.v2i64.p0(<2 x i64> %B, <2 x i64> %C, <2 x i64> %D, <2 x i64> %E, i64 0, ptr %A)
8105 %tmp = getelementptr i64, ptr %A, i64 %inc
8109 declare void @llvm.aarch64.neon.st4lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, ptr)
8112 define ptr @test_v1i64_post_imm_st4lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E) nounwind {
8113 ; CHECK-LABEL: test_v1i64_post_imm_st4lane:
8115 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8116 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8117 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8118 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8119 ; CHECK-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], #32
8121 call void @llvm.aarch64.neon.st4lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, ptr %A)
8122 %tmp = getelementptr i64, ptr %A, i64 4
8126 define ptr @test_v1i64_post_reg_st4lane(ptr %A, ptr %ptr, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 %inc) nounwind {
8127 ; CHECK-LABEL: test_v1i64_post_reg_st4lane:
8129 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8130 ; CHECK-NEXT: lsl x8, x2, #3
8131 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8132 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8133 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8134 ; CHECK-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], x8
8136 call void @llvm.aarch64.neon.st4lane.v1i64.p0(<1 x i64> %B, <1 x i64> %C, <1 x i64> %D, <1 x i64> %E, i64 0, ptr %A)
8137 %tmp = getelementptr i64, ptr %A, i64 %inc
8141 declare void @llvm.aarch64.neon.st4lane.v1i64.p0(<1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>, i64, ptr)
8144 define ptr @test_v4f32_post_imm_st4lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E) nounwind {
8145 ; CHECK-LABEL: test_v4f32_post_imm_st4lane:
8147 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8148 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8149 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8150 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8151 ; CHECK-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], #16
8153 call void @llvm.aarch64.neon.st4lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, ptr %A)
8154 %tmp = getelementptr float, ptr %A, i32 4
8158 define ptr @test_v4f32_post_reg_st4lane(ptr %A, ptr %ptr, <4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 %inc) nounwind {
8159 ; CHECK-LABEL: test_v4f32_post_reg_st4lane:
8161 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8162 ; CHECK-NEXT: lsl x8, x2, #2
8163 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8164 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8165 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8166 ; CHECK-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], x8
8168 call void @llvm.aarch64.neon.st4lane.v4f32.p0(<4 x float> %B, <4 x float> %C, <4 x float> %D, <4 x float> %E, i64 0, ptr %A)
8169 %tmp = getelementptr float, ptr %A, i64 %inc
8173 declare void @llvm.aarch64.neon.st4lane.v4f32.p0(<4 x float>, <4 x float>, <4 x float>, <4 x float>, i64, ptr)
8176 define ptr @test_v2f32_post_imm_st4lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E) nounwind {
8177 ; CHECK-LABEL: test_v2f32_post_imm_st4lane:
8179 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8180 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8181 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8182 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8183 ; CHECK-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], #16
8185 call void @llvm.aarch64.neon.st4lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, ptr %A)
8186 %tmp = getelementptr float, ptr %A, i32 4
8190 define ptr @test_v2f32_post_reg_st4lane(ptr %A, ptr %ptr, <2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 %inc) nounwind {
8191 ; CHECK-LABEL: test_v2f32_post_reg_st4lane:
8193 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8194 ; CHECK-NEXT: lsl x8, x2, #2
8195 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8196 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8197 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8198 ; CHECK-NEXT: st4.s { v0, v1, v2, v3 }[0], [x0], x8
8200 call void @llvm.aarch64.neon.st4lane.v2f32.p0(<2 x float> %B, <2 x float> %C, <2 x float> %D, <2 x float> %E, i64 0, ptr %A)
8201 %tmp = getelementptr float, ptr %A, i64 %inc
8205 declare void @llvm.aarch64.neon.st4lane.v2f32.p0(<2 x float>, <2 x float>, <2 x float>, <2 x float>, i64, ptr)
8208 define ptr @test_v2f64_post_imm_st4lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E) nounwind {
8209 ; CHECK-LABEL: test_v2f64_post_imm_st4lane:
8211 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8212 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8213 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8214 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8215 ; CHECK-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], #32
8217 call void @llvm.aarch64.neon.st4lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, ptr %A)
8218 %tmp = getelementptr double, ptr %A, i64 4
8222 define ptr @test_v2f64_post_reg_st4lane(ptr %A, ptr %ptr, <2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 %inc) nounwind {
8223 ; CHECK-LABEL: test_v2f64_post_reg_st4lane:
8225 ; CHECK-NEXT: ; kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8226 ; CHECK-NEXT: lsl x8, x2, #3
8227 ; CHECK-NEXT: ; kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8228 ; CHECK-NEXT: ; kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8229 ; CHECK-NEXT: ; kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8230 ; CHECK-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], x8
8232 call void @llvm.aarch64.neon.st4lane.v2f64.p0(<2 x double> %B, <2 x double> %C, <2 x double> %D, <2 x double> %E, i64 0, ptr %A)
8233 %tmp = getelementptr double, ptr %A, i64 %inc
8237 declare void @llvm.aarch64.neon.st4lane.v2f64.p0(<2 x double>, <2 x double>, <2 x double>, <2 x double>, i64, ptr)
8240 define ptr @test_v1f64_post_imm_st4lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E) nounwind {
8241 ; CHECK-LABEL: test_v1f64_post_imm_st4lane:
8243 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8244 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8245 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8246 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8247 ; CHECK-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], #32
8249 call void @llvm.aarch64.neon.st4lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, ptr %A)
8250 %tmp = getelementptr double, ptr %A, i64 4
8254 define ptr @test_v1f64_post_reg_st4lane(ptr %A, ptr %ptr, <1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 %inc) nounwind {
8255 ; CHECK-LABEL: test_v1f64_post_reg_st4lane:
8257 ; CHECK-NEXT: ; kill: def $d3 killed $d3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8258 ; CHECK-NEXT: lsl x8, x2, #3
8259 ; CHECK-NEXT: ; kill: def $d2 killed $d2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8260 ; CHECK-NEXT: ; kill: def $d1 killed $d1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8261 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3
8262 ; CHECK-NEXT: st4.d { v0, v1, v2, v3 }[0], [x0], x8
8264 call void @llvm.aarch64.neon.st4lane.v1f64.p0(<1 x double> %B, <1 x double> %C, <1 x double> %D, <1 x double> %E, i64 0, ptr %A)
8265 %tmp = getelementptr double, ptr %A, i64 %inc
8269 declare void @llvm.aarch64.neon.st4lane.v1f64.p0(<1 x double>, <1 x double>, <1 x double>, <1 x double>, i64, ptr)
8271 define <16 x i8> @test_v16i8_post_imm_ld1r(ptr %bar, ptr %ptr) {
8272 ; CHECK-LABEL: test_v16i8_post_imm_ld1r:
8274 ; CHECK-NEXT: ld1r.16b { v0 }, [x0], #1
8275 ; CHECK-NEXT: str x0, [x1]
8277 %tmp1 = load i8, ptr %bar
8278 %tmp2 = insertelement <16 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, i8 %tmp1, i32 0
8279 %tmp3 = insertelement <16 x i8> %tmp2, i8 %tmp1, i32 1
8280 %tmp4 = insertelement <16 x i8> %tmp3, i8 %tmp1, i32 2
8281 %tmp5 = insertelement <16 x i8> %tmp4, i8 %tmp1, i32 3
8282 %tmp6 = insertelement <16 x i8> %tmp5, i8 %tmp1, i32 4
8283 %tmp7 = insertelement <16 x i8> %tmp6, i8 %tmp1, i32 5
8284 %tmp8 = insertelement <16 x i8> %tmp7, i8 %tmp1, i32 6
8285 %tmp9 = insertelement <16 x i8> %tmp8, i8 %tmp1, i32 7
8286 %tmp10 = insertelement <16 x i8> %tmp9, i8 %tmp1, i32 8
8287 %tmp11 = insertelement <16 x i8> %tmp10, i8 %tmp1, i32 9
8288 %tmp12 = insertelement <16 x i8> %tmp11, i8 %tmp1, i32 10
8289 %tmp13 = insertelement <16 x i8> %tmp12, i8 %tmp1, i32 11
8290 %tmp14 = insertelement <16 x i8> %tmp13, i8 %tmp1, i32 12
8291 %tmp15 = insertelement <16 x i8> %tmp14, i8 %tmp1, i32 13
8292 %tmp16 = insertelement <16 x i8> %tmp15, i8 %tmp1, i32 14
8293 %tmp17 = insertelement <16 x i8> %tmp16, i8 %tmp1, i32 15
8294 %tmp18 = getelementptr i8, ptr %bar, i64 1
8295 store ptr %tmp18, ptr %ptr
8296 ret <16 x i8> %tmp17
8299 define <16 x i8> @test_v16i8_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
8300 ; CHECK-LABEL: test_v16i8_post_reg_ld1r:
8302 ; CHECK-NEXT: ld1r.16b { v0 }, [x0], x2
8303 ; CHECK-NEXT: str x0, [x1]
8305 %tmp1 = load i8, ptr %bar
8306 %tmp2 = insertelement <16 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, i8 %tmp1, i32 0
8307 %tmp3 = insertelement <16 x i8> %tmp2, i8 %tmp1, i32 1
8308 %tmp4 = insertelement <16 x i8> %tmp3, i8 %tmp1, i32 2
8309 %tmp5 = insertelement <16 x i8> %tmp4, i8 %tmp1, i32 3
8310 %tmp6 = insertelement <16 x i8> %tmp5, i8 %tmp1, i32 4
8311 %tmp7 = insertelement <16 x i8> %tmp6, i8 %tmp1, i32 5
8312 %tmp8 = insertelement <16 x i8> %tmp7, i8 %tmp1, i32 6
8313 %tmp9 = insertelement <16 x i8> %tmp8, i8 %tmp1, i32 7
8314 %tmp10 = insertelement <16 x i8> %tmp9, i8 %tmp1, i32 8
8315 %tmp11 = insertelement <16 x i8> %tmp10, i8 %tmp1, i32 9
8316 %tmp12 = insertelement <16 x i8> %tmp11, i8 %tmp1, i32 10
8317 %tmp13 = insertelement <16 x i8> %tmp12, i8 %tmp1, i32 11
8318 %tmp14 = insertelement <16 x i8> %tmp13, i8 %tmp1, i32 12
8319 %tmp15 = insertelement <16 x i8> %tmp14, i8 %tmp1, i32 13
8320 %tmp16 = insertelement <16 x i8> %tmp15, i8 %tmp1, i32 14
8321 %tmp17 = insertelement <16 x i8> %tmp16, i8 %tmp1, i32 15
8322 %tmp18 = getelementptr i8, ptr %bar, i64 %inc
8323 store ptr %tmp18, ptr %ptr
8324 ret <16 x i8> %tmp17
8327 define <8 x i8> @test_v8i8_post_imm_ld1r(ptr %bar, ptr %ptr) {
8328 ; CHECK-LABEL: test_v8i8_post_imm_ld1r:
8330 ; CHECK-NEXT: ld1r.8b { v0 }, [x0], #1
8331 ; CHECK-NEXT: str x0, [x1]
8333 %tmp1 = load i8, ptr %bar
8334 %tmp2 = insertelement <8 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, i8 %tmp1, i32 0
8335 %tmp3 = insertelement <8 x i8> %tmp2, i8 %tmp1, i32 1
8336 %tmp4 = insertelement <8 x i8> %tmp3, i8 %tmp1, i32 2
8337 %tmp5 = insertelement <8 x i8> %tmp4, i8 %tmp1, i32 3
8338 %tmp6 = insertelement <8 x i8> %tmp5, i8 %tmp1, i32 4
8339 %tmp7 = insertelement <8 x i8> %tmp6, i8 %tmp1, i32 5
8340 %tmp8 = insertelement <8 x i8> %tmp7, i8 %tmp1, i32 6
8341 %tmp9 = insertelement <8 x i8> %tmp8, i8 %tmp1, i32 7
8342 %tmp10 = getelementptr i8, ptr %bar, i64 1
8343 store ptr %tmp10, ptr %ptr
8347 define <8 x i8> @test_v8i8_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
8348 ; CHECK-LABEL: test_v8i8_post_reg_ld1r:
8350 ; CHECK-NEXT: ld1r.8b { v0 }, [x0], x2
8351 ; CHECK-NEXT: str x0, [x1]
8353 %tmp1 = load i8, ptr %bar
8354 %tmp2 = insertelement <8 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, i8 %tmp1, i32 0
8355 %tmp3 = insertelement <8 x i8> %tmp2, i8 %tmp1, i32 1
8356 %tmp4 = insertelement <8 x i8> %tmp3, i8 %tmp1, i32 2
8357 %tmp5 = insertelement <8 x i8> %tmp4, i8 %tmp1, i32 3
8358 %tmp6 = insertelement <8 x i8> %tmp5, i8 %tmp1, i32 4
8359 %tmp7 = insertelement <8 x i8> %tmp6, i8 %tmp1, i32 5
8360 %tmp8 = insertelement <8 x i8> %tmp7, i8 %tmp1, i32 6
8361 %tmp9 = insertelement <8 x i8> %tmp8, i8 %tmp1, i32 7
8362 %tmp10 = getelementptr i8, ptr %bar, i64 %inc
8363 store ptr %tmp10, ptr %ptr
8367 define <8 x i16> @test_v8i16_post_imm_ld1r(ptr %bar, ptr %ptr) {
8368 ; CHECK-LABEL: test_v8i16_post_imm_ld1r:
8370 ; CHECK-NEXT: ld1r.8h { v0 }, [x0], #2
8371 ; CHECK-NEXT: str x0, [x1]
8373 %tmp1 = load i16, ptr %bar
8374 %tmp2 = insertelement <8 x i16> <i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0
8375 %tmp3 = insertelement <8 x i16> %tmp2, i16 %tmp1, i32 1
8376 %tmp4 = insertelement <8 x i16> %tmp3, i16 %tmp1, i32 2
8377 %tmp5 = insertelement <8 x i16> %tmp4, i16 %tmp1, i32 3
8378 %tmp6 = insertelement <8 x i16> %tmp5, i16 %tmp1, i32 4
8379 %tmp7 = insertelement <8 x i16> %tmp6, i16 %tmp1, i32 5
8380 %tmp8 = insertelement <8 x i16> %tmp7, i16 %tmp1, i32 6
8381 %tmp9 = insertelement <8 x i16> %tmp8, i16 %tmp1, i32 7
8382 %tmp10 = getelementptr i16, ptr %bar, i64 1
8383 store ptr %tmp10, ptr %ptr
8387 define <8 x i16> @test_v8i16_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
8388 ; CHECK-LABEL: test_v8i16_post_reg_ld1r:
8390 ; CHECK-NEXT: lsl x8, x2, #1
8391 ; CHECK-NEXT: ld1r.8h { v0 }, [x0], x8
8392 ; CHECK-NEXT: str x0, [x1]
8394 %tmp1 = load i16, ptr %bar
8395 %tmp2 = insertelement <8 x i16> <i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0
8396 %tmp3 = insertelement <8 x i16> %tmp2, i16 %tmp1, i32 1
8397 %tmp4 = insertelement <8 x i16> %tmp3, i16 %tmp1, i32 2
8398 %tmp5 = insertelement <8 x i16> %tmp4, i16 %tmp1, i32 3
8399 %tmp6 = insertelement <8 x i16> %tmp5, i16 %tmp1, i32 4
8400 %tmp7 = insertelement <8 x i16> %tmp6, i16 %tmp1, i32 5
8401 %tmp8 = insertelement <8 x i16> %tmp7, i16 %tmp1, i32 6
8402 %tmp9 = insertelement <8 x i16> %tmp8, i16 %tmp1, i32 7
8403 %tmp10 = getelementptr i16, ptr %bar, i64 %inc
8404 store ptr %tmp10, ptr %ptr
8408 define <4 x i16> @test_v4i16_post_imm_ld1r(ptr %bar, ptr %ptr) {
8409 ; CHECK-LABEL: test_v4i16_post_imm_ld1r:
8411 ; CHECK-NEXT: ld1r.4h { v0 }, [x0], #2
8412 ; CHECK-NEXT: str x0, [x1]
8414 %tmp1 = load i16, ptr %bar
8415 %tmp2 = insertelement <4 x i16> <i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0
8416 %tmp3 = insertelement <4 x i16> %tmp2, i16 %tmp1, i32 1
8417 %tmp4 = insertelement <4 x i16> %tmp3, i16 %tmp1, i32 2
8418 %tmp5 = insertelement <4 x i16> %tmp4, i16 %tmp1, i32 3
8419 %tmp6 = getelementptr i16, ptr %bar, i64 1
8420 store ptr %tmp6, ptr %ptr
8424 define <4 x i16> @test_v4i16_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
8425 ; CHECK-LABEL: test_v4i16_post_reg_ld1r:
8427 ; CHECK-NEXT: lsl x8, x2, #1
8428 ; CHECK-NEXT: ld1r.4h { v0 }, [x0], x8
8429 ; CHECK-NEXT: str x0, [x1]
8431 %tmp1 = load i16, ptr %bar
8432 %tmp2 = insertelement <4 x i16> <i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0
8433 %tmp3 = insertelement <4 x i16> %tmp2, i16 %tmp1, i32 1
8434 %tmp4 = insertelement <4 x i16> %tmp3, i16 %tmp1, i32 2
8435 %tmp5 = insertelement <4 x i16> %tmp4, i16 %tmp1, i32 3
8436 %tmp6 = getelementptr i16, ptr %bar, i64 %inc
8437 store ptr %tmp6, ptr %ptr
8441 define <4 x i32> @test_v4i32_post_imm_ld1r(ptr %bar, ptr %ptr) {
8442 ; CHECK-LABEL: test_v4i32_post_imm_ld1r:
8444 ; CHECK-NEXT: ld1r.4s { v0 }, [x0], #4
8445 ; CHECK-NEXT: str x0, [x1]
8447 %tmp1 = load i32, ptr %bar
8448 %tmp2 = insertelement <4 x i32> <i32 undef, i32 undef, i32 undef, i32 undef>, i32 %tmp1, i32 0
8449 %tmp3 = insertelement <4 x i32> %tmp2, i32 %tmp1, i32 1
8450 %tmp4 = insertelement <4 x i32> %tmp3, i32 %tmp1, i32 2
8451 %tmp5 = insertelement <4 x i32> %tmp4, i32 %tmp1, i32 3
8452 %tmp6 = getelementptr i32, ptr %bar, i64 1
8453 store ptr %tmp6, ptr %ptr
8457 define <4 x i32> @test_v4i32_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
8458 ; CHECK-LABEL: test_v4i32_post_reg_ld1r:
8460 ; CHECK-NEXT: lsl x8, x2, #2
8461 ; CHECK-NEXT: ld1r.4s { v0 }, [x0], x8
8462 ; CHECK-NEXT: str x0, [x1]
8464 %tmp1 = load i32, ptr %bar
8465 %tmp2 = insertelement <4 x i32> <i32 undef, i32 undef, i32 undef, i32 undef>, i32 %tmp1, i32 0
8466 %tmp3 = insertelement <4 x i32> %tmp2, i32 %tmp1, i32 1
8467 %tmp4 = insertelement <4 x i32> %tmp3, i32 %tmp1, i32 2
8468 %tmp5 = insertelement <4 x i32> %tmp4, i32 %tmp1, i32 3
8469 %tmp6 = getelementptr i32, ptr %bar, i64 %inc
8470 store ptr %tmp6, ptr %ptr
8474 define <2 x i32> @test_v2i32_post_imm_ld1r(ptr %bar, ptr %ptr) {
8475 ; CHECK-LABEL: test_v2i32_post_imm_ld1r:
8477 ; CHECK-NEXT: ld1r.2s { v0 }, [x0], #4
8478 ; CHECK-NEXT: str x0, [x1]
8480 %tmp1 = load i32, ptr %bar
8481 %tmp2 = insertelement <2 x i32> <i32 undef, i32 undef>, i32 %tmp1, i32 0
8482 %tmp3 = insertelement <2 x i32> %tmp2, i32 %tmp1, i32 1
8483 %tmp4 = getelementptr i32, ptr %bar, i64 1
8484 store ptr %tmp4, ptr %ptr
8488 define <2 x i32> @test_v2i32_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
8489 ; CHECK-LABEL: test_v2i32_post_reg_ld1r:
8491 ; CHECK-NEXT: lsl x8, x2, #2
8492 ; CHECK-NEXT: ld1r.2s { v0 }, [x0], x8
8493 ; CHECK-NEXT: str x0, [x1]
8495 %tmp1 = load i32, ptr %bar
8496 %tmp2 = insertelement <2 x i32> <i32 undef, i32 undef>, i32 %tmp1, i32 0
8497 %tmp3 = insertelement <2 x i32> %tmp2, i32 %tmp1, i32 1
8498 %tmp4 = getelementptr i32, ptr %bar, i64 %inc
8499 store ptr %tmp4, ptr %ptr
8503 define <2 x i64> @test_v2i64_post_imm_ld1r(ptr %bar, ptr %ptr) {
8504 ; CHECK-LABEL: test_v2i64_post_imm_ld1r:
8506 ; CHECK-NEXT: ld1r.2d { v0 }, [x0], #8
8507 ; CHECK-NEXT: str x0, [x1]
8509 %tmp1 = load i64, ptr %bar
8510 %tmp2 = insertelement <2 x i64> <i64 undef, i64 undef>, i64 %tmp1, i32 0
8511 %tmp3 = insertelement <2 x i64> %tmp2, i64 %tmp1, i32 1
8512 %tmp4 = getelementptr i64, ptr %bar, i64 1
8513 store ptr %tmp4, ptr %ptr
8517 define <2 x i64> @test_v2i64_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
8518 ; CHECK-LABEL: test_v2i64_post_reg_ld1r:
8520 ; CHECK-NEXT: lsl x8, x2, #3
8521 ; CHECK-NEXT: ld1r.2d { v0 }, [x0], x8
8522 ; CHECK-NEXT: str x0, [x1]
8524 %tmp1 = load i64, ptr %bar
8525 %tmp2 = insertelement <2 x i64> <i64 undef, i64 undef>, i64 %tmp1, i32 0
8526 %tmp3 = insertelement <2 x i64> %tmp2, i64 %tmp1, i32 1
8527 %tmp4 = getelementptr i64, ptr %bar, i64 %inc
8528 store ptr %tmp4, ptr %ptr
8532 define <4 x float> @test_v4f32_post_imm_ld1r(ptr %bar, ptr %ptr) {
8533 ; CHECK-LABEL: test_v4f32_post_imm_ld1r:
8535 ; CHECK-NEXT: ld1r.4s { v0 }, [x0], #4
8536 ; CHECK-NEXT: str x0, [x1]
8538 %tmp1 = load float, ptr %bar
8539 %tmp2 = insertelement <4 x float> <float undef, float undef, float undef, float undef>, float %tmp1, i32 0
8540 %tmp3 = insertelement <4 x float> %tmp2, float %tmp1, i32 1
8541 %tmp4 = insertelement <4 x float> %tmp3, float %tmp1, i32 2
8542 %tmp5 = insertelement <4 x float> %tmp4, float %tmp1, i32 3
8543 %tmp6 = getelementptr float, ptr %bar, i64 1
8544 store ptr %tmp6, ptr %ptr
8545 ret <4 x float> %tmp5
8548 define <4 x float> @test_v4f32_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
8549 ; CHECK-LABEL: test_v4f32_post_reg_ld1r:
8551 ; CHECK-NEXT: lsl x8, x2, #2
8552 ; CHECK-NEXT: ld1r.4s { v0 }, [x0], x8
8553 ; CHECK-NEXT: str x0, [x1]
8555 %tmp1 = load float, ptr %bar
8556 %tmp2 = insertelement <4 x float> <float undef, float undef, float undef, float undef>, float %tmp1, i32 0
8557 %tmp3 = insertelement <4 x float> %tmp2, float %tmp1, i32 1
8558 %tmp4 = insertelement <4 x float> %tmp3, float %tmp1, i32 2
8559 %tmp5 = insertelement <4 x float> %tmp4, float %tmp1, i32 3
8560 %tmp6 = getelementptr float, ptr %bar, i64 %inc
8561 store ptr %tmp6, ptr %ptr
8562 ret <4 x float> %tmp5
8565 define <2 x float> @test_v2f32_post_imm_ld1r(ptr %bar, ptr %ptr) {
8566 ; CHECK-LABEL: test_v2f32_post_imm_ld1r:
8568 ; CHECK-NEXT: ld1r.2s { v0 }, [x0], #4
8569 ; CHECK-NEXT: str x0, [x1]
8571 %tmp1 = load float, ptr %bar
8572 %tmp2 = insertelement <2 x float> <float undef, float undef>, float %tmp1, i32 0
8573 %tmp3 = insertelement <2 x float> %tmp2, float %tmp1, i32 1
8574 %tmp4 = getelementptr float, ptr %bar, i64 1
8575 store ptr %tmp4, ptr %ptr
8576 ret <2 x float> %tmp3
8579 define <2 x float> @test_v2f32_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
8580 ; CHECK-LABEL: test_v2f32_post_reg_ld1r:
8582 ; CHECK-NEXT: lsl x8, x2, #2
8583 ; CHECK-NEXT: ld1r.2s { v0 }, [x0], x8
8584 ; CHECK-NEXT: str x0, [x1]
8586 %tmp1 = load float, ptr %bar
8587 %tmp2 = insertelement <2 x float> <float undef, float undef>, float %tmp1, i32 0
8588 %tmp3 = insertelement <2 x float> %tmp2, float %tmp1, i32 1
8589 %tmp4 = getelementptr float, ptr %bar, i64 %inc
8590 store ptr %tmp4, ptr %ptr
8591 ret <2 x float> %tmp3
8594 define <2 x double> @test_v2f64_post_imm_ld1r(ptr %bar, ptr %ptr) {
8595 ; CHECK-LABEL: test_v2f64_post_imm_ld1r:
8597 ; CHECK-NEXT: ld1r.2d { v0 }, [x0], #8
8598 ; CHECK-NEXT: str x0, [x1]
8600 %tmp1 = load double, ptr %bar
8601 %tmp2 = insertelement <2 x double> <double undef, double undef>, double %tmp1, i32 0
8602 %tmp3 = insertelement <2 x double> %tmp2, double %tmp1, i32 1
8603 %tmp4 = getelementptr double, ptr %bar, i64 1
8604 store ptr %tmp4, ptr %ptr
8605 ret <2 x double> %tmp3
8608 define <2 x double> @test_v2f64_post_reg_ld1r(ptr %bar, ptr %ptr, i64 %inc) {
8609 ; CHECK-LABEL: test_v2f64_post_reg_ld1r:
8611 ; CHECK-NEXT: lsl x8, x2, #3
8612 ; CHECK-NEXT: ld1r.2d { v0 }, [x0], x8
8613 ; CHECK-NEXT: str x0, [x1]
8615 %tmp1 = load double, ptr %bar
8616 %tmp2 = insertelement <2 x double> <double undef, double undef>, double %tmp1, i32 0
8617 %tmp3 = insertelement <2 x double> %tmp2, double %tmp1, i32 1
8618 %tmp4 = getelementptr double, ptr %bar, i64 %inc
8619 store ptr %tmp4, ptr %ptr
8620 ret <2 x double> %tmp3
8623 define <16 x i8> @test_v16i8_post_imm_ld1lane(ptr %bar, ptr %ptr, <16 x i8> %A) {
8624 ; CHECK-LABEL: test_v16i8_post_imm_ld1lane:
8626 ; CHECK-NEXT: ld1.b { v0 }[1], [x0], #1
8627 ; CHECK-NEXT: str x0, [x1]
8629 %tmp1 = load i8, ptr %bar
8630 %tmp2 = insertelement <16 x i8> %A, i8 %tmp1, i32 1
8631 %tmp3 = getelementptr i8, ptr %bar, i64 1
8632 store ptr %tmp3, ptr %ptr
8636 define <16 x i8> @test_v16i8_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <16 x i8> %A) {
8637 ; CHECK-LABEL: test_v16i8_post_reg_ld1lane:
8639 ; CHECK-NEXT: ld1.b { v0 }[1], [x0], x2
8640 ; CHECK-NEXT: str x0, [x1]
8642 %tmp1 = load i8, ptr %bar
8643 %tmp2 = insertelement <16 x i8> %A, i8 %tmp1, i32 1
8644 %tmp3 = getelementptr i8, ptr %bar, i64 %inc
8645 store ptr %tmp3, ptr %ptr
8649 define <8 x i8> @test_v8i8_post_imm_ld1lane(ptr %bar, ptr %ptr, <8 x i8> %A) {
8650 ; CHECK-LABEL: test_v8i8_post_imm_ld1lane:
8652 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
8653 ; CHECK-NEXT: ld1.b { v0 }[1], [x0], #1
8654 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
8655 ; CHECK-NEXT: str x0, [x1]
8657 %tmp1 = load i8, ptr %bar
8658 %tmp2 = insertelement <8 x i8> %A, i8 %tmp1, i32 1
8659 %tmp3 = getelementptr i8, ptr %bar, i64 1
8660 store ptr %tmp3, ptr %ptr
8664 define <8 x i8> @test_v8i8_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <8 x i8> %A) {
8665 ; CHECK-LABEL: test_v8i8_post_reg_ld1lane:
8667 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
8668 ; CHECK-NEXT: ld1.b { v0 }[1], [x0], x2
8669 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
8670 ; CHECK-NEXT: str x0, [x1]
8672 %tmp1 = load i8, ptr %bar
8673 %tmp2 = insertelement <8 x i8> %A, i8 %tmp1, i32 1
8674 %tmp3 = getelementptr i8, ptr %bar, i64 %inc
8675 store ptr %tmp3, ptr %ptr
8679 define <8 x i16> @test_v8i16_post_imm_ld1lane(ptr %bar, ptr %ptr, <8 x i16> %A) {
8680 ; CHECK-LABEL: test_v8i16_post_imm_ld1lane:
8682 ; CHECK-NEXT: ld1.h { v0 }[1], [x0], #2
8683 ; CHECK-NEXT: str x0, [x1]
8685 %tmp1 = load i16, ptr %bar
8686 %tmp2 = insertelement <8 x i16> %A, i16 %tmp1, i32 1
8687 %tmp3 = getelementptr i16, ptr %bar, i64 1
8688 store ptr %tmp3, ptr %ptr
8692 define <8 x i16> @test_v8i16_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <8 x i16> %A) {
8693 ; CHECK-LABEL: test_v8i16_post_reg_ld1lane:
8695 ; CHECK-NEXT: lsl x8, x2, #1
8696 ; CHECK-NEXT: ld1.h { v0 }[1], [x0], x8
8697 ; CHECK-NEXT: str x0, [x1]
8699 %tmp1 = load i16, ptr %bar
8700 %tmp2 = insertelement <8 x i16> %A, i16 %tmp1, i32 1
8701 %tmp3 = getelementptr i16, ptr %bar, i64 %inc
8702 store ptr %tmp3, ptr %ptr
8706 define <4 x i16> @test_v4i16_post_imm_ld1lane(ptr %bar, ptr %ptr, <4 x i16> %A) {
8707 ; CHECK-LABEL: test_v4i16_post_imm_ld1lane:
8709 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
8710 ; CHECK-NEXT: ld1.h { v0 }[1], [x0], #2
8711 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
8712 ; CHECK-NEXT: str x0, [x1]
8714 %tmp1 = load i16, ptr %bar
8715 %tmp2 = insertelement <4 x i16> %A, i16 %tmp1, i32 1
8716 %tmp3 = getelementptr i16, ptr %bar, i64 1
8717 store ptr %tmp3, ptr %ptr
8721 define <4 x i16> @test_v4i16_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <4 x i16> %A) {
8722 ; CHECK-LABEL: test_v4i16_post_reg_ld1lane:
8724 ; CHECK-NEXT: lsl x8, x2, #1
8725 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
8726 ; CHECK-NEXT: ld1.h { v0 }[1], [x0], x8
8727 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
8728 ; CHECK-NEXT: str x0, [x1]
8730 %tmp1 = load i16, ptr %bar
8731 %tmp2 = insertelement <4 x i16> %A, i16 %tmp1, i32 1
8732 %tmp3 = getelementptr i16, ptr %bar, i64 %inc
8733 store ptr %tmp3, ptr %ptr
8737 define <4 x i32> @test_v4i32_post_imm_ld1lane(ptr %bar, ptr %ptr, <4 x i32> %A) {
8738 ; CHECK-LABEL: test_v4i32_post_imm_ld1lane:
8740 ; CHECK-NEXT: ld1.s { v0 }[1], [x0], #4
8741 ; CHECK-NEXT: str x0, [x1]
8743 %tmp1 = load i32, ptr %bar
8744 %tmp2 = insertelement <4 x i32> %A, i32 %tmp1, i32 1
8745 %tmp3 = getelementptr i32, ptr %bar, i64 1
8746 store ptr %tmp3, ptr %ptr
8750 define <4 x i32> @test_v4i32_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <4 x i32> %A) {
8751 ; CHECK-LABEL: test_v4i32_post_reg_ld1lane:
8753 ; CHECK-NEXT: lsl x8, x2, #2
8754 ; CHECK-NEXT: ld1.s { v0 }[1], [x0], x8
8755 ; CHECK-NEXT: str x0, [x1]
8757 %tmp1 = load i32, ptr %bar
8758 %tmp2 = insertelement <4 x i32> %A, i32 %tmp1, i32 1
8759 %tmp3 = getelementptr i32, ptr %bar, i64 %inc
8760 store ptr %tmp3, ptr %ptr
8764 define <2 x i32> @test_v2i32_post_imm_ld1lane(ptr %bar, ptr %ptr, <2 x i32> %A) {
8765 ; CHECK-LABEL: test_v2i32_post_imm_ld1lane:
8767 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
8768 ; CHECK-NEXT: ld1.s { v0 }[1], [x0], #4
8769 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
8770 ; CHECK-NEXT: str x0, [x1]
8772 %tmp1 = load i32, ptr %bar
8773 %tmp2 = insertelement <2 x i32> %A, i32 %tmp1, i32 1
8774 %tmp3 = getelementptr i32, ptr %bar, i64 1
8775 store ptr %tmp3, ptr %ptr
8779 define <2 x i32> @test_v2i32_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <2 x i32> %A) {
8780 ; CHECK-LABEL: test_v2i32_post_reg_ld1lane:
8782 ; CHECK-NEXT: lsl x8, x2, #2
8783 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
8784 ; CHECK-NEXT: ld1.s { v0 }[1], [x0], x8
8785 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
8786 ; CHECK-NEXT: str x0, [x1]
8788 %tmp1 = load i32, ptr %bar
8789 %tmp2 = insertelement <2 x i32> %A, i32 %tmp1, i32 1
8790 %tmp3 = getelementptr i32, ptr %bar, i64 %inc
8791 store ptr %tmp3, ptr %ptr
8795 define <2 x i64> @test_v2i64_post_imm_ld1lane(ptr %bar, ptr %ptr, <2 x i64> %A) {
8796 ; CHECK-LABEL: test_v2i64_post_imm_ld1lane:
8798 ; CHECK-NEXT: ld1.d { v0 }[1], [x0], #8
8799 ; CHECK-NEXT: str x0, [x1]
8801 %tmp1 = load i64, ptr %bar
8802 %tmp2 = insertelement <2 x i64> %A, i64 %tmp1, i32 1
8803 %tmp3 = getelementptr i64, ptr %bar, i64 1
8804 store ptr %tmp3, ptr %ptr
8808 define <2 x i64> @test_v2i64_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <2 x i64> %A) {
8809 ; CHECK-LABEL: test_v2i64_post_reg_ld1lane:
8811 ; CHECK-NEXT: lsl x8, x2, #3
8812 ; CHECK-NEXT: ld1.d { v0 }[1], [x0], x8
8813 ; CHECK-NEXT: str x0, [x1]
8815 %tmp1 = load i64, ptr %bar
8816 %tmp2 = insertelement <2 x i64> %A, i64 %tmp1, i32 1
8817 %tmp3 = getelementptr i64, ptr %bar, i64 %inc
8818 store ptr %tmp3, ptr %ptr
8822 define <4 x float> @test_v4f32_post_imm_ld1lane(ptr %bar, ptr %ptr, <4 x float> %A) {
8823 ; CHECK-LABEL: test_v4f32_post_imm_ld1lane:
8825 ; CHECK-NEXT: ld1.s { v0 }[1], [x0], #4
8826 ; CHECK-NEXT: str x0, [x1]
8828 %tmp1 = load float, ptr %bar
8829 %tmp2 = insertelement <4 x float> %A, float %tmp1, i32 1
8830 %tmp3 = getelementptr float, ptr %bar, i64 1
8831 store ptr %tmp3, ptr %ptr
8832 ret <4 x float> %tmp2
8835 define <4 x float> @test_v4f32_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <4 x float> %A) {
8836 ; CHECK-LABEL: test_v4f32_post_reg_ld1lane:
8838 ; CHECK-NEXT: lsl x8, x2, #2
8839 ; CHECK-NEXT: ld1.s { v0 }[1], [x0], x8
8840 ; CHECK-NEXT: str x0, [x1]
8842 %tmp1 = load float, ptr %bar
8843 %tmp2 = insertelement <4 x float> %A, float %tmp1, i32 1
8844 %tmp3 = getelementptr float, ptr %bar, i64 %inc
8845 store ptr %tmp3, ptr %ptr
8846 ret <4 x float> %tmp2
8849 define <2 x float> @test_v2f32_post_imm_ld1lane(ptr %bar, ptr %ptr, <2 x float> %A) {
8850 ; CHECK-LABEL: test_v2f32_post_imm_ld1lane:
8852 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
8853 ; CHECK-NEXT: ld1.s { v0 }[1], [x0], #4
8854 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
8855 ; CHECK-NEXT: str x0, [x1]
8857 %tmp1 = load float, ptr %bar
8858 %tmp2 = insertelement <2 x float> %A, float %tmp1, i32 1
8859 %tmp3 = getelementptr float, ptr %bar, i64 1
8860 store ptr %tmp3, ptr %ptr
8861 ret <2 x float> %tmp2
8864 define <2 x float> @test_v2f32_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <2 x float> %A) {
8865 ; CHECK-LABEL: test_v2f32_post_reg_ld1lane:
8867 ; CHECK-NEXT: lsl x8, x2, #2
8868 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
8869 ; CHECK-NEXT: ld1.s { v0 }[1], [x0], x8
8870 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
8871 ; CHECK-NEXT: str x0, [x1]
8873 %tmp1 = load float, ptr %bar
8874 %tmp2 = insertelement <2 x float> %A, float %tmp1, i32 1
8875 %tmp3 = getelementptr float, ptr %bar, i64 %inc
8876 store ptr %tmp3, ptr %ptr
8877 ret <2 x float> %tmp2
8880 define <2 x double> @test_v2f64_post_imm_ld1lane(ptr %bar, ptr %ptr, <2 x double> %A) {
8881 ; CHECK-LABEL: test_v2f64_post_imm_ld1lane:
8883 ; CHECK-NEXT: ld1.d { v0 }[1], [x0], #8
8884 ; CHECK-NEXT: str x0, [x1]
8886 %tmp1 = load double, ptr %bar
8887 %tmp2 = insertelement <2 x double> %A, double %tmp1, i32 1
8888 %tmp3 = getelementptr double, ptr %bar, i64 1
8889 store ptr %tmp3, ptr %ptr
8890 ret <2 x double> %tmp2
8893 define <2 x double> @test_v2f64_post_reg_ld1lane(ptr %bar, ptr %ptr, i64 %inc, <2 x double> %A) {
8894 ; CHECK-LABEL: test_v2f64_post_reg_ld1lane:
8896 ; CHECK-NEXT: lsl x8, x2, #3
8897 ; CHECK-NEXT: ld1.d { v0 }[1], [x0], x8
8898 ; CHECK-NEXT: str x0, [x1]
8900 %tmp1 = load double, ptr %bar
8901 %tmp2 = insertelement <2 x double> %A, double %tmp1, i32 1
8902 %tmp3 = getelementptr double, ptr %bar, i64 %inc
8903 store ptr %tmp3, ptr %ptr
8904 ret <2 x double> %tmp2
8907 ; Check for dependencies between the vector and the scalar load.
8908 define <4 x float> @test_v4f32_post_reg_ld1lane_dep_vec_on_load(ptr %bar, ptr %ptr, i64 %inc, ptr %dep_ptr_1, ptr %dep_ptr_2, <4 x float> %vec) {
8909 ; CHECK-LABEL: test_v4f32_post_reg_ld1lane_dep_vec_on_load:
8911 ; CHECK-NEXT: ldr s1, [x0]
8912 ; CHECK-NEXT: str q0, [x3]
8913 ; CHECK-NEXT: add x8, x0, x2, lsl #2
8914 ; CHECK-NEXT: ldr q0, [x4]
8915 ; CHECK-NEXT: str x8, [x1]
8916 ; CHECK-NEXT: mov.s v0[1], v1[0]
8918 %tmp1 = load float, ptr %bar
8919 store <4 x float> %vec, ptr %dep_ptr_1, align 16
8920 %A = load <4 x float>, ptr %dep_ptr_2, align 16
8921 %tmp2 = insertelement <4 x float> %A, float %tmp1, i32 1
8922 %tmp3 = getelementptr float, ptr %bar, i64 %inc
8923 store ptr %tmp3, ptr %ptr
8924 ret <4 x float> %tmp2
8927 ; Make sure that we test the narrow V64 code path.
8928 ; The tests above don't, because there, 64-bit insert_vector_elt nodes will be
8929 ; widened to 128-bit before the LD1LANEpost combine has the chance to run,
8930 ; making it avoid narrow vector types.
8931 ; One way to trick that combine into running early is to force the vector ops
8932 ; legalizer to run. We achieve that using the ctpop.
8934 define <4 x i16> @test_v4i16_post_reg_ld1lane_forced_narrow(ptr %bar, ptr %ptr, i64 %inc, <4 x i16> %A, ptr %d) {
8935 ; CHECK-LABEL: test_v4i16_post_reg_ld1lane_forced_narrow:
8937 ; CHECK-NEXT: lsl x8, x2, #1
8938 ; CHECK-NEXT: ; kill: def $d0 killed $d0 def $q0
8939 ; CHECK-NEXT: ld1.h { v0 }[1], [x0], x8
8940 ; CHECK-NEXT: ; kill: def $d0 killed $d0 killed $q0
8941 ; CHECK-NEXT: str x0, [x1]
8942 ; CHECK-NEXT: ldr d1, [x3]
8943 ; CHECK-NEXT: cnt.8b v1, v1
8944 ; CHECK-NEXT: uaddlp.4h v1, v1
8945 ; CHECK-NEXT: uaddlp.2s v1, v1
8946 ; CHECK-NEXT: str d1, [x3]
8948 %tmp1 = load i16, ptr %bar
8949 %tmp2 = insertelement <4 x i16> %A, i16 %tmp1, i32 1
8950 %tmp3 = getelementptr i16, ptr %bar, i64 %inc
8951 store ptr %tmp3, ptr %ptr
8952 %dl = load <2 x i32>, ptr %d
8953 %dr = call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> %dl)
8954 store <2 x i32> %dr, ptr %d
8958 declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32>)
8960 define void @test_ld1lane_build(ptr %ptr0, ptr %ptr1, ptr %ptr2, ptr %ptr3, ptr %out) {
8961 ; CHECK-LABEL: test_ld1lane_build:
8963 ; CHECK-NEXT: ldr s0, [x2]
8964 ; CHECK-NEXT: ldr s1, [x0]
8965 ; CHECK-NEXT: ld1.s { v0 }[1], [x3]
8966 ; CHECK-NEXT: ld1.s { v1 }[1], [x1]
8967 ; CHECK-NEXT: sub.2s v0, v1, v0
8968 ; CHECK-NEXT: str d0, [x4]
8970 %load0 = load i32, ptr %ptr0, align 4
8971 %load1 = load i32, ptr %ptr1, align 4
8972 %vec0_0 = insertelement <2 x i32> undef, i32 %load0, i32 0
8973 %vec0_1 = insertelement <2 x i32> %vec0_0, i32 %load1, i32 1
8975 %load2 = load i32, ptr %ptr2, align 4
8976 %load3 = load i32, ptr %ptr3, align 4
8977 %vec1_0 = insertelement <2 x i32> undef, i32 %load2, i32 0
8978 %vec1_1 = insertelement <2 x i32> %vec1_0, i32 %load3, i32 1
8980 %sub = sub nsw <2 x i32> %vec0_1, %vec1_1
8981 store <2 x i32> %sub, ptr %out, align 16
8985 define void @test_ld1lane_build_i16(ptr %a, ptr %b, ptr %c, ptr %d, <4 x i16> %e, ptr %p) {
8986 ; CHECK-LABEL: test_ld1lane_build_i16:
8988 ; CHECK-NEXT: ldr h1, [x0]
8989 ; CHECK-NEXT: ld1.h { v1 }[1], [x1]
8990 ; CHECK-NEXT: ld1.h { v1 }[2], [x2]
8991 ; CHECK-NEXT: ld1.h { v1 }[3], [x3]
8992 ; CHECK-NEXT: sub.4h v0, v1, v0
8993 ; CHECK-NEXT: str d0, [x4]
8995 %ld.a = load i16, ptr %a
8996 %ld.b = load i16, ptr %b
8997 %ld.c = load i16, ptr %c
8998 %ld.d = load i16, ptr %d
8999 %v.a = insertelement <4 x i16> undef, i16 %ld.a, i64 0
9000 %v.b = insertelement <4 x i16> %v.a, i16 %ld.b, i64 1
9001 %v.c = insertelement <4 x i16> %v.b, i16 %ld.c, i64 2
9002 %v = insertelement <4 x i16> %v.c, i16 %ld.d, i64 3
9003 %sub = sub nsw <4 x i16> %v, %e
9004 store <4 x i16> %sub, ptr %p
9008 define void @test_ld1lane_build_half(ptr %a, ptr %b, ptr %c, ptr %d, <4 x half> %e, ptr %p) {
9009 ; CHECK-LABEL: test_ld1lane_build_half:
9011 ; CHECK-NEXT: ldr h1, [x0]
9012 ; CHECK-NEXT: fcvtl v0.4s, v0.4h
9013 ; CHECK-NEXT: ld1.h { v1 }[1], [x1]
9014 ; CHECK-NEXT: ld1.h { v1 }[2], [x2]
9015 ; CHECK-NEXT: ld1.h { v1 }[3], [x3]
9016 ; CHECK-NEXT: fcvtl v1.4s, v1.4h
9017 ; CHECK-NEXT: fsub.4s v0, v1, v0
9018 ; CHECK-NEXT: fcvtn v0.4h, v0.4s
9019 ; CHECK-NEXT: str d0, [x4]
9021 %ld.a = load half, ptr %a
9022 %ld.b = load half, ptr %b
9023 %ld.c = load half, ptr %c
9024 %ld.d = load half, ptr %d
9025 %v.a = insertelement <4 x half> undef, half %ld.a, i64 0
9026 %v.b = insertelement <4 x half> %v.a, half %ld.b, i64 1
9027 %v.c = insertelement <4 x half> %v.b, half %ld.c, i64 2
9028 %v = insertelement <4 x half> %v.c, half %ld.d, i64 3
9029 %sub = fsub <4 x half> %v, %e
9030 store <4 x half> %sub, ptr %p
9034 define void @test_ld1lane_build_i8(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e, ptr %f, ptr %g, ptr %h, <8 x i8> %v, ptr %p) {
9035 ; CHECK-LABEL: test_ld1lane_build_i8:
9037 ; CHECK-NEXT: ldr b1, [x0]
9038 ; CHECK-NEXT: ldr x8, [sp]
9039 ; CHECK-NEXT: ld1.b { v1 }[1], [x1]
9040 ; CHECK-NEXT: ld1.b { v1 }[2], [x2]
9041 ; CHECK-NEXT: ld1.b { v1 }[3], [x3]
9042 ; CHECK-NEXT: ld1.b { v1 }[4], [x4]
9043 ; CHECK-NEXT: ld1.b { v1 }[5], [x5]
9044 ; CHECK-NEXT: ld1.b { v1 }[6], [x6]
9045 ; CHECK-NEXT: ld1.b { v1 }[7], [x7]
9046 ; CHECK-NEXT: sub.8b v0, v1, v0
9047 ; CHECK-NEXT: str d0, [x8]
9049 %ld.a = load i8, ptr %a
9050 %ld.b = load i8, ptr %b
9051 %ld.c = load i8, ptr %c
9052 %ld.d = load i8, ptr %d
9053 %ld.e = load i8, ptr %e
9054 %ld.f = load i8, ptr %f
9055 %ld.g = load i8, ptr %g
9056 %ld.h = load i8, ptr %h
9057 %v.a = insertelement <8 x i8> undef, i8 %ld.a, i64 0
9058 %v.b = insertelement <8 x i8> %v.a, i8 %ld.b, i64 1
9059 %v.c = insertelement <8 x i8> %v.b, i8 %ld.c, i64 2
9060 %v.d = insertelement <8 x i8> %v.c, i8 %ld.d, i64 3
9061 %v.e = insertelement <8 x i8> %v.d, i8 %ld.e, i64 4
9062 %v.f = insertelement <8 x i8> %v.e, i8 %ld.f, i64 5
9063 %v.g = insertelement <8 x i8> %v.f, i8 %ld.g, i64 6
9064 %v1 = insertelement <8 x i8> %v.g, i8 %ld.h, i64 7
9065 %sub = sub nsw <8 x i8> %v1, %v
9066 store <8 x i8> %sub, ptr %p
9070 define <4 x i32> @test_inc_cycle(<4 x i32> %vec, ptr %in) {
9071 ; CHECK-LABEL: test_inc_cycle:
9073 ; CHECK-NEXT: ld1.s { v0 }[0], [x0]
9074 ; CHECK-NEXT: adrp x9, _var@PAGE
9075 ; CHECK-NEXT: fmov x8, d0
9076 ; CHECK-NEXT: add x8, x0, x8, lsl #2
9077 ; CHECK-NEXT: str x8, [x9, _var@PAGEOFF]
9079 %elt = load i32, ptr %in
9080 %newvec = insertelement <4 x i32> %vec, i32 %elt, i32 0
9082 ; %inc cannot be %elt directly because we check that the load is only
9083 ; used by the insert before trying to form post-inc.
9084 %inc.vec = bitcast <4 x i32> %newvec to <2 x i64>
9085 %inc = extractelement <2 x i64> %inc.vec, i32 0
9086 %newaddr = getelementptr i32, ptr %in, i64 %inc
9087 store ptr %newaddr, ptr @var
9089 ret <4 x i32> %newvec
9092 @var = global ptr null
9094 define i8 @load_single_extract_variable_index_i8(ptr %A, i32 %idx) {
9095 ; CHECK-LABEL: load_single_extract_variable_index_i8:
9097 ; CHECK-NEXT: sub sp, sp, #16
9098 ; CHECK-NEXT: .cfi_def_cfa_offset 16
9099 ; CHECK-NEXT: mov x8, sp
9100 ; CHECK-NEXT: ldr q0, [x0]
9101 ; CHECK-NEXT: ; kill: def $w1 killed $w1 def $x1
9102 ; CHECK-NEXT: bfxil x8, x1, #0, #4
9103 ; CHECK-NEXT: str q0, [sp]
9104 ; CHECK-NEXT: ldrb w0, [x8]
9105 ; CHECK-NEXT: add sp, sp, #16
9107 %lv = load <16 x i8>, ptr %A
9108 %e = extractelement <16 x i8> %lv, i32 %idx
9112 define i16 @load_single_extract_variable_index_i16(ptr %A, i32 %idx) {
9113 ; CHECK-LABEL: load_single_extract_variable_index_i16:
9115 ; CHECK-NEXT: sub sp, sp, #16
9116 ; CHECK-NEXT: .cfi_def_cfa_offset 16
9117 ; CHECK-NEXT: mov x8, sp
9118 ; CHECK-NEXT: ldr q0, [x0]
9119 ; CHECK-NEXT: ; kill: def $w1 killed $w1 def $x1
9120 ; CHECK-NEXT: bfi x8, x1, #1, #3
9121 ; CHECK-NEXT: str q0, [sp]
9122 ; CHECK-NEXT: ldrh w0, [x8]
9123 ; CHECK-NEXT: add sp, sp, #16
9125 %lv = load <8 x i16>, ptr %A
9126 %e = extractelement <8 x i16> %lv, i32 %idx
9130 define i32 @load_single_extract_variable_index_i32(ptr %A, i32 %idx) {
9131 ; CHECK-LABEL: load_single_extract_variable_index_i32:
9133 ; CHECK-NEXT: ; kill: def $w1 killed $w1 def $x1
9134 ; CHECK-NEXT: and x8, x1, #0x3
9135 ; CHECK-NEXT: ldr w0, [x0, x8, lsl #2]
9137 %lv = load <4 x i32>, ptr %A
9138 %e = extractelement <4 x i32> %lv, i32 %idx
9142 define i32 @load_single_extract_variable_index_v3i32_small_align(ptr %A, i32 %idx) {
9143 ; CHECK-LABEL: load_single_extract_variable_index_v3i32_small_align:
9145 ; CHECK-NEXT: mov w9, w1
9146 ; CHECK-NEXT: mov w8, #2 ; =0x2
9147 ; CHECK-NEXT: cmp x9, #2
9148 ; CHECK-NEXT: csel x8, x9, x8, lo
9149 ; CHECK-NEXT: ldr w0, [x0, x8, lsl #2]
9151 %lv = load <3 x i32>, ptr %A, align 2
9152 %e = extractelement <3 x i32> %lv, i32 %idx
9156 define i32 @load_single_extract_variable_index_v3i32_default_align(ptr %A, i32 %idx) {
9157 ; CHECK-LABEL: load_single_extract_variable_index_v3i32_default_align:
9159 ; CHECK-NEXT: mov w9, w1
9160 ; CHECK-NEXT: mov w8, #2 ; =0x2
9161 ; CHECK-NEXT: cmp x9, #2
9162 ; CHECK-NEXT: csel x8, x9, x8, lo
9163 ; CHECK-NEXT: ldr w0, [x0, x8, lsl #2]
9165 %lv = load <3 x i32>, ptr %A
9166 %e = extractelement <3 x i32> %lv, i32 %idx
9170 define i32 @load_single_extract_valid_const_index_v3i32(ptr %A, i32 %idx) {
9171 ; CHECK-LABEL: load_single_extract_valid_const_index_v3i32:
9173 ; CHECK-NEXT: ldr w0, [x0, #8]
9175 %lv = load <3 x i32>, ptr %A
9176 %e = extractelement <3 x i32> %lv, i32 2
9180 define i32 @load_single_extract_variable_index_masked_i32(ptr %A, i32 %idx) {
9181 ; CHECK-LABEL: load_single_extract_variable_index_masked_i32:
9183 ; CHECK-NEXT: and w8, w1, #0x3
9184 ; CHECK-NEXT: ldr w0, [x0, w8, uxtw #2]
9186 %idx.x = and i32 %idx, 3
9187 %lv = load <4 x i32>, ptr %A
9188 %e = extractelement <4 x i32> %lv, i32 %idx.x
9192 define i32 @load_single_extract_variable_index_masked2_i32(ptr %A, i32 %idx) {
9193 ; CHECK-LABEL: load_single_extract_variable_index_masked2_i32:
9195 ; CHECK-NEXT: and w8, w1, #0x1
9196 ; CHECK-NEXT: ldr w0, [x0, w8, uxtw #2]
9198 %idx.x = and i32 %idx, 1
9199 %lv = load <4 x i32>, ptr %A
9200 %e = extractelement <4 x i32> %lv, i32 %idx.x