1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=armv8-linux-gnueabi -verify-machineinstrs -asm-verbose=false | FileCheck %s
4 ; %struct.uint16x4x2_t = type { <4 x i16>, <4 x i16> }
5 ; %struct.uint16x4x3_t = type { <4 x i16>, <4 x i16>, <4 x i16> }
6 ; %struct.uint16x4x4_t = type { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> }
8 ; %struct.uint32x2x2_t = type { <2 x i32>, <2 x i32> }
9 ; %struct.uint32x2x3_t = type { <2 x i32>, <2 x i32>, <2 x i32> }
10 ; %struct.uint32x2x4_t = type { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> }
12 ; %struct.uint64x1x2_t = type { <1 x i64>, <1 x i64> }
13 ; %struct.uint64x1x3_t = type { <1 x i64>, <1 x i64>, <1 x i64> }
14 ; %struct.uint64x1x4_t = type { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> }
16 ; %struct.uint8x8x2_t = type { <8 x i8>, <8 x i8> }
17 ; %struct.uint8x8x3_t = type { <8 x i8>, <8 x i8>, <8 x i8> }
18 ; %struct.uint8x8x4_t = type { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> }
20 ; %struct.uint16x8x2_t = type { <8 x i16>, <8 x i16> }
21 ; %struct.uint16x8x3_t = type { <8 x i16>, <8 x i16>, <8 x i16> }
22 ; %struct.uint16x8x4_t = type { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> }
24 ; %struct.uint32x4x2_t = type { <4 x i32>, <4 x i32> }
25 ; %struct.uint32x4x3_t = type { <4 x i32>, <4 x i32>, <4 x i32> }
26 ; %struct.uint32x4x4_t = type { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> }
28 ; %struct.uint64x2x2_t = type { <2 x i64>, <2 x i64> }
29 ; %struct.uint64x2x3_t = type { <2 x i64>, <2 x i64>, <2 x i64> }
30 ; %struct.uint64x2x4_t = type { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> }
32 ; %struct.uint8x16x2_t = type { <16 x i8>, <16 x i8> }
33 ; %struct.uint8x16x3_t = type { <16 x i8>, <16 x i8>, <16 x i8> }
34 ; %struct.uint8x16x4_t = type { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> }
36 %struct.uint16x4x2_t = type { [2 x <4 x i16>] }
37 %struct.uint16x4x3_t = type { [3 x <4 x i16>] }
38 %struct.uint16x4x4_t = type { [4 x <4 x i16>] }
39 %struct.uint32x2x2_t = type { [2 x <2 x i32>] }
40 %struct.uint32x2x3_t = type { [3 x <2 x i32>] }
41 %struct.uint32x2x4_t = type { [4 x <2 x i32>] }
42 %struct.uint64x1x2_t = type { [2 x <1 x i64>] }
43 %struct.uint64x1x3_t = type { [3 x <1 x i64>] }
44 %struct.uint64x1x4_t = type { [4 x <1 x i64>] }
45 %struct.uint8x8x2_t = type { [2 x <8 x i8>] }
46 %struct.uint8x8x3_t = type { [3 x <8 x i8>] }
47 %struct.uint8x8x4_t = type { [4 x <8 x i8>] }
48 %struct.uint16x8x2_t = type { [2 x <8 x i16>] }
49 %struct.uint16x8x3_t = type { [3 x <8 x i16>] }
50 %struct.uint16x8x4_t = type { [4 x <8 x i16>] }
51 %struct.uint32x4x2_t = type { [2 x <4 x i32>] }
52 %struct.uint32x4x3_t = type { [3 x <4 x i32>] }
53 %struct.uint32x4x4_t = type { [4 x <4 x i32>] }
54 %struct.uint64x2x2_t = type { [2 x <2 x i64>] }
55 %struct.uint64x2x3_t = type { [3 x <2 x i64>] }
56 %struct.uint64x2x4_t = type { [4 x <2 x i64>] }
57 %struct.uint8x16x2_t = type { [2 x <16 x i8>] }
58 %struct.uint8x16x3_t = type { [3 x <16 x i8>] }
59 %struct.uint8x16x4_t = type { [4 x <16 x i8>] }
61 declare void @llvm.arm.neon.vst1x2.p0.v4i16(ptr nocapture, <4 x i16>, <4 x i16>) argmemonly nounwind
62 declare void @llvm.arm.neon.vst1x3.p0.v4i16(ptr nocapture, <4 x i16>, <4 x i16>, <4 x i16>) argmemonly nounwind
63 declare void @llvm.arm.neon.vst1x4.p0.v4i16(ptr nocapture, <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>) argmemonly nounwind
65 declare void @llvm.arm.neon.vst1x2.p0.v2i32(ptr nocapture, <2 x i32>, <2 x i32>) argmemonly nounwind
66 declare void @llvm.arm.neon.vst1x3.p0.v2i32(ptr nocapture, <2 x i32>, <2 x i32>, <2 x i32>) argmemonly nounwind
67 declare void @llvm.arm.neon.vst1x4.p0.v2i32(ptr nocapture, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>) argmemonly nounwind
69 declare void @llvm.arm.neon.vst1x2.p0.v1i64(ptr nocapture, <1 x i64>, <1 x i64>) argmemonly nounwind
70 declare void @llvm.arm.neon.vst1x3.p0.v1i64(ptr nocapture, <1 x i64>, <1 x i64>, <1 x i64>) argmemonly nounwind
71 declare void @llvm.arm.neon.vst1x4.p0.v1i64(ptr nocapture, <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>) argmemonly nounwind
73 declare void @llvm.arm.neon.vst1x2.p0.v8i8(ptr nocapture, <8 x i8>, <8 x i8>) argmemonly nounwind
74 declare void @llvm.arm.neon.vst1x3.p0.v8i8(ptr nocapture, <8 x i8>, <8 x i8>, <8 x i8>) argmemonly nounwind
75 declare void @llvm.arm.neon.vst1x4.p0.v8i8(ptr nocapture, <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>) argmemonly nounwind
77 declare void @llvm.arm.neon.vst1x2.p0.v8i16(ptr nocapture, <8 x i16>, <8 x i16>) argmemonly nounwind
78 declare void @llvm.arm.neon.vst1x3.p0.v8i16(ptr nocapture, <8 x i16>, <8 x i16>, <8 x i16>) argmemonly nounwind
79 declare void @llvm.arm.neon.vst1x4.p0.v8i16(ptr nocapture, <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>) argmemonly nounwind
81 declare void @llvm.arm.neon.vst1x2.p0.v4i32(ptr nocapture, <4 x i32>, <4 x i32>) argmemonly nounwind
82 declare void @llvm.arm.neon.vst1x3.p0.v4i32(ptr nocapture, <4 x i32>, <4 x i32>, <4 x i32>) argmemonly nounwind
83 declare void @llvm.arm.neon.vst1x4.p0.v4i32(ptr nocapture, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>) argmemonly nounwind
85 declare void @llvm.arm.neon.vst1x2.p0.v2i64(ptr nocapture, <2 x i64>, <2 x i64>) argmemonly nounwind
86 declare void @llvm.arm.neon.vst1x3.p0.v2i64(ptr nocapture, <2 x i64>, <2 x i64>, <2 x i64>) argmemonly nounwind
87 declare void @llvm.arm.neon.vst1x4.p0.v2i64(ptr nocapture, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>) argmemonly nounwind
89 declare void @llvm.arm.neon.vst1x2.p0.v16i8(ptr nocapture, <16 x i8>, <16 x i8>) argmemonly nounwind
90 declare void @llvm.arm.neon.vst1x3.p0.v16i8(ptr nocapture, <16 x i8>, <16 x i8>, <16 x i8>) argmemonly nounwind
91 declare void @llvm.arm.neon.vst1x4.p0.v16i8(ptr nocapture, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>) argmemonly nounwind
93 define arm_aapcs_vfpcc void @test_vst1_u16_x2(ptr %a, %struct.uint16x4x2_t %b) nounwind {
94 ; CHECK-LABEL: test_vst1_u16_x2:
95 ; CHECK: vst1.16 {d0, d1}, [r0:64]
98 %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0
99 %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1
100 tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1)
104 define arm_aapcs_vfpcc void @test_vst1_u16_x3(ptr %a, %struct.uint16x4x3_t %b) nounwind {
105 ; CHECK-LABEL: test_vst1_u16_x3:
106 ; CHECK: vst1.16 {d0, d1, d2}, [r0:64]
109 %b0 = extractvalue %struct.uint16x4x3_t %b, 0, 0
110 %b1 = extractvalue %struct.uint16x4x3_t %b, 0, 1
111 %b2 = extractvalue %struct.uint16x4x3_t %b, 0, 2
112 tail call void @llvm.arm.neon.vst1x3.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2)
116 define arm_aapcs_vfpcc void @test_vst1_u16_x4(ptr %a, %struct.uint16x4x4_t %b) nounwind {
117 ; CHECK-LABEL: test_vst1_u16_x4:
118 ; CHECK: vst1.16 {d0, d1, d2, d3}, [r0:256]
121 %b0 = extractvalue %struct.uint16x4x4_t %b, 0, 0
122 %b1 = extractvalue %struct.uint16x4x4_t %b, 0, 1
123 %b2 = extractvalue %struct.uint16x4x4_t %b, 0, 2
124 %b3 = extractvalue %struct.uint16x4x4_t %b, 0, 3
125 tail call void @llvm.arm.neon.vst1x4.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2, <4 x i16> %b3)
129 define arm_aapcs_vfpcc void @test_vst1_u32_x2(ptr %a, %struct.uint32x2x2_t %b) nounwind {
130 ; CHECK-LABEL: test_vst1_u32_x2:
131 ; CHECK: vst1.32 {d0, d1}, [r0:64]
134 %b0 = extractvalue %struct.uint32x2x2_t %b, 0, 0
135 %b1 = extractvalue %struct.uint32x2x2_t %b, 0, 1
136 tail call void @llvm.arm.neon.vst1x2.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1)
140 define arm_aapcs_vfpcc void @test_vst1_u32_x3(ptr %a, %struct.uint32x2x3_t %b) nounwind {
141 ; CHECK-LABEL: test_vst1_u32_x3:
142 ; CHECK: vst1.32 {d0, d1, d2}, [r0:64]
145 %b0 = extractvalue %struct.uint32x2x3_t %b, 0, 0
146 %b1 = extractvalue %struct.uint32x2x3_t %b, 0, 1
147 %b2 = extractvalue %struct.uint32x2x3_t %b, 0, 2
148 tail call void @llvm.arm.neon.vst1x3.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2)
152 define arm_aapcs_vfpcc void @test_vst1_u32_x4(ptr %a, %struct.uint32x2x4_t %b) nounwind {
153 ; CHECK-LABEL: test_vst1_u32_x4:
154 ; CHECK: vst1.32 {d0, d1, d2, d3}, [r0:256]
157 %b0 = extractvalue %struct.uint32x2x4_t %b, 0, 0
158 %b1 = extractvalue %struct.uint32x2x4_t %b, 0, 1
159 %b2 = extractvalue %struct.uint32x2x4_t %b, 0, 2
160 %b3 = extractvalue %struct.uint32x2x4_t %b, 0, 3
161 tail call void @llvm.arm.neon.vst1x4.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2, <2 x i32> %b3)
165 define arm_aapcs_vfpcc void @test_vst1_u64_x2(ptr %a, %struct.uint64x1x2_t %b) nounwind {
166 ; CHECK-LABEL: test_vst1_u64_x2:
167 ; CHECK: vst1.64 {d0, d1}, [r0:64]
170 %b0 = extractvalue %struct.uint64x1x2_t %b, 0, 0
171 %b1 = extractvalue %struct.uint64x1x2_t %b, 0, 1
172 tail call void @llvm.arm.neon.vst1x2.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1)
176 define arm_aapcs_vfpcc void @test_vst1_u64_x3(ptr %a, %struct.uint64x1x3_t %b) nounwind {
177 ; CHECK-LABEL: test_vst1_u64_x3:
178 ; CHECK: vst1.64 {d0, d1, d2}, [r0:64]
181 %b0 = extractvalue %struct.uint64x1x3_t %b, 0, 0
182 %b1 = extractvalue %struct.uint64x1x3_t %b, 0, 1
183 %b2 = extractvalue %struct.uint64x1x3_t %b, 0, 2
184 tail call void @llvm.arm.neon.vst1x3.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2)
188 define arm_aapcs_vfpcc void @test_vst1_u64_x4(ptr %a, %struct.uint64x1x4_t %b) nounwind {
189 ; CHECK-LABEL: test_vst1_u64_x4:
190 ; CHECK: vst1.64 {d0, d1, d2, d3}, [r0:256]
193 %b0 = extractvalue %struct.uint64x1x4_t %b, 0, 0
194 %b1 = extractvalue %struct.uint64x1x4_t %b, 0, 1
195 %b2 = extractvalue %struct.uint64x1x4_t %b, 0, 2
196 %b3 = extractvalue %struct.uint64x1x4_t %b, 0, 3
197 tail call void @llvm.arm.neon.vst1x4.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2, <1 x i64> %b3)
201 define arm_aapcs_vfpcc void @test_vst1_u8_x2(ptr %a, %struct.uint8x8x2_t %b) nounwind {
202 ; CHECK-LABEL: test_vst1_u8_x2:
203 ; CHECK: vst1.8 {d0, d1}, [r0:64]
206 %b0 = extractvalue %struct.uint8x8x2_t %b, 0, 0
207 %b1 = extractvalue %struct.uint8x8x2_t %b, 0, 1
208 tail call void @llvm.arm.neon.vst1x2.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1)
212 define arm_aapcs_vfpcc void @test_vst1_u8_x3(ptr %a, %struct.uint8x8x3_t %b) nounwind {
213 ; CHECK-LABEL: test_vst1_u8_x3:
214 ; CHECK: vst1.8 {d0, d1, d2}, [r0:64]
217 %b0 = extractvalue %struct.uint8x8x3_t %b, 0, 0
218 %b1 = extractvalue %struct.uint8x8x3_t %b, 0, 1
219 %b2 = extractvalue %struct.uint8x8x3_t %b, 0, 2
220 tail call void @llvm.arm.neon.vst1x3.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2)
224 define arm_aapcs_vfpcc void @test_vst1_u8_x4(ptr %a, %struct.uint8x8x4_t %b) nounwind {
225 ; CHECK-LABEL: test_vst1_u8_x4:
226 ; CHECK: vst1.8 {d0, d1, d2, d3}, [r0:256]
229 %b0 = extractvalue %struct.uint8x8x4_t %b, 0, 0
230 %b1 = extractvalue %struct.uint8x8x4_t %b, 0, 1
231 %b2 = extractvalue %struct.uint8x8x4_t %b, 0, 2
232 %b3 = extractvalue %struct.uint8x8x4_t %b, 0, 3
233 tail call void @llvm.arm.neon.vst1x4.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2, <8 x i8> %b3)
237 define arm_aapcs_vfpcc void @test_vst1q_u16_x2(ptr %a, %struct.uint16x8x2_t %b) nounwind {
238 ; CHECK-LABEL: test_vst1q_u16_x2:
239 ; CHECK: vst1.16 {d0, d1, d2, d3}, [r0:256]
242 %b0 = extractvalue %struct.uint16x8x2_t %b, 0, 0
243 %b1 = extractvalue %struct.uint16x8x2_t %b, 0, 1
244 tail call void @llvm.arm.neon.vst1x2.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1)
248 define arm_aapcs_vfpcc void @test_vst1q_u16_x3(ptr %a, %struct.uint16x8x3_t %b) nounwind {
249 ; CHECK-LABEL: test_vst1q_u16_x3:
250 ; CHECK: vst1.16 {d0, d1, d2}, [r0:64]!
251 ; CHECK-NEXT: vst1.16 {d3, d4, d5}, [r0:64]
254 %b0 = extractvalue %struct.uint16x8x3_t %b, 0, 0
255 %b1 = extractvalue %struct.uint16x8x3_t %b, 0, 1
256 %b2 = extractvalue %struct.uint16x8x3_t %b, 0, 2
257 tail call void @llvm.arm.neon.vst1x3.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1, <8 x i16> %b2)
261 define arm_aapcs_vfpcc void @test_vst1q_u16_x4(ptr %a, %struct.uint16x8x4_t %b) nounwind {
262 ; CHECK-LABEL: test_vst1q_u16_x4:
263 ; CHECK: vst1.16 {d0, d1, d2, d3}, [r0:256]!
264 ; CHECK-NEXT: vst1.16 {d4, d5, d6, d7}, [r0:256]
267 %b0 = extractvalue %struct.uint16x8x4_t %b, 0, 0
268 %b1 = extractvalue %struct.uint16x8x4_t %b, 0, 1
269 %b2 = extractvalue %struct.uint16x8x4_t %b, 0, 2
270 %b3 = extractvalue %struct.uint16x8x4_t %b, 0, 3
271 tail call void @llvm.arm.neon.vst1x4.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1, <8 x i16> %b2, <8 x i16> %b3)
275 define arm_aapcs_vfpcc void @test_vst1q_u32_x2(ptr %a, %struct.uint32x4x2_t %b) nounwind {
276 ; CHECK-LABEL: test_vst1q_u32_x2:
277 ; CHECK: vst1.32 {d0, d1, d2, d3}, [r0:256]
280 %b0 = extractvalue %struct.uint32x4x2_t %b, 0, 0
281 %b1 = extractvalue %struct.uint32x4x2_t %b, 0, 1
282 tail call void @llvm.arm.neon.vst1x2.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1)
286 define arm_aapcs_vfpcc void @test_vst1q_u32_x3(ptr %a, %struct.uint32x4x3_t %b) nounwind {
287 ; CHECK-LABEL: test_vst1q_u32_x3:
288 ; CHECK: vst1.32 {d0, d1, d2}, [r0:64]!
289 ; CHECK-NEXT: vst1.32 {d3, d4, d5}, [r0:64]
292 %b0 = extractvalue %struct.uint32x4x3_t %b, 0, 0
293 %b1 = extractvalue %struct.uint32x4x3_t %b, 0, 1
294 %b2 = extractvalue %struct.uint32x4x3_t %b, 0, 2
295 tail call void @llvm.arm.neon.vst1x3.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1, <4 x i32> %b2)
299 define arm_aapcs_vfpcc void @test_vst1q_u32_x4(ptr %a, %struct.uint32x4x4_t %b) nounwind {
300 ; CHECK-LABEL: test_vst1q_u32_x4:
301 ; CHECK: vst1.32 {d0, d1, d2, d3}, [r0:256]!
302 ; CHECK-NEXT: vst1.32 {d4, d5, d6, d7}, [r0:256]
305 %b0 = extractvalue %struct.uint32x4x4_t %b, 0, 0
306 %b1 = extractvalue %struct.uint32x4x4_t %b, 0, 1
307 %b2 = extractvalue %struct.uint32x4x4_t %b, 0, 2
308 %b3 = extractvalue %struct.uint32x4x4_t %b, 0, 3
309 tail call void @llvm.arm.neon.vst1x4.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1, <4 x i32> %b2, <4 x i32> %b3)
313 define arm_aapcs_vfpcc void @test_vst1q_u64_x2(ptr %a, %struct.uint64x2x2_t %b) nounwind {
314 ; CHECK-LABEL: test_vst1q_u64_x2:
315 ; CHECK: vst1.64 {d0, d1, d2, d3}, [r0:256]
318 %b0 = extractvalue %struct.uint64x2x2_t %b, 0, 0
319 %b1 = extractvalue %struct.uint64x2x2_t %b, 0, 1
320 tail call void @llvm.arm.neon.vst1x2.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1)
324 define arm_aapcs_vfpcc void @test_vst1q_u64_x3(ptr %a, %struct.uint64x2x3_t %b) nounwind {
325 ; CHECK-LABEL: test_vst1q_u64_x3:
326 ; CHECK: vst1.64 {d0, d1, d2}, [r0:64]!
327 ; CHECK-NEXT: vst1.64 {d3, d4, d5}, [r0:64]
330 %b0 = extractvalue %struct.uint64x2x3_t %b, 0, 0
331 %b1 = extractvalue %struct.uint64x2x3_t %b, 0, 1
332 %b2 = extractvalue %struct.uint64x2x3_t %b, 0, 2
333 tail call void @llvm.arm.neon.vst1x3.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1, <2 x i64> %b2)
337 define arm_aapcs_vfpcc void @test_vst1q_u64_x4(ptr %a, %struct.uint64x2x4_t %b) nounwind {
338 ; CHECK-LABEL: test_vst1q_u64_x4:
339 ; CHECK: vst1.64 {d0, d1, d2, d3}, [r0:256]!
340 ; CHECK-NEXT: vst1.64 {d4, d5, d6, d7}, [r0:256]
343 %b0 = extractvalue %struct.uint64x2x4_t %b, 0, 0
344 %b1 = extractvalue %struct.uint64x2x4_t %b, 0, 1
345 %b2 = extractvalue %struct.uint64x2x4_t %b, 0, 2
346 %b3 = extractvalue %struct.uint64x2x4_t %b, 0, 3
347 tail call void @llvm.arm.neon.vst1x4.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1, <2 x i64> %b2, <2 x i64> %b3)
351 define arm_aapcs_vfpcc void @test_vst1q_u8_x2(ptr %a, %struct.uint8x16x2_t %b) nounwind {
352 ; CHECK-LABEL: test_vst1q_u8_x2:
353 ; CHECK: vst1.8 {d0, d1, d2, d3}, [r0:256]
356 %b0 = extractvalue %struct.uint8x16x2_t %b, 0, 0
357 %b1 = extractvalue %struct.uint8x16x2_t %b, 0, 1
358 tail call void @llvm.arm.neon.vst1x2.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1)
362 define arm_aapcs_vfpcc void @test_vst1q_u8_x3(ptr %a, %struct.uint8x16x3_t %b) nounwind {
363 ; CHECK-LABEL: test_vst1q_u8_x3:
364 ; CHECK: vst1.8 {d0, d1, d2}, [r0:64]!
365 ; CHECK-NEXT: vst1.8 {d3, d4, d5}, [r0:64]
368 %b0 = extractvalue %struct.uint8x16x3_t %b, 0, 0
369 %b1 = extractvalue %struct.uint8x16x3_t %b, 0, 1
370 %b2 = extractvalue %struct.uint8x16x3_t %b, 0, 2
371 tail call void @llvm.arm.neon.vst1x3.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1, <16 x i8> %b2)
375 define arm_aapcs_vfpcc void @test_vst1q_u8_x4(ptr %a, %struct.uint8x16x4_t %b) nounwind {
376 ; CHECK-LABEL: test_vst1q_u8_x4:
377 ; CHECK: vst1.8 {d0, d1, d2, d3}, [r0:256]!
378 ; CHECK-NEXT: vst1.8 {d4, d5, d6, d7}, [r0:256]
381 %b0 = extractvalue %struct.uint8x16x4_t %b, 0, 0
382 %b1 = extractvalue %struct.uint8x16x4_t %b, 0, 1
383 %b2 = extractvalue %struct.uint8x16x4_t %b, 0, 2
384 %b3 = extractvalue %struct.uint8x16x4_t %b, 0, 3
385 tail call void @llvm.arm.neon.vst1x4.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1, <16 x i8> %b2, <16 x i8> %b3)
391 define arm_aapcs_vfpcc ptr @test_vst1_u8_x2_post_imm(ptr %a, %struct.uint8x8x2_t %b) nounwind {
392 ; CHECK-LABEL: test_vst1_u8_x2_post_imm:
393 ; CHECK: vst1.8 {d0, d1}, [r0:64]!
396 %b0 = extractvalue %struct.uint8x8x2_t %b, 0, 0
397 %b1 = extractvalue %struct.uint8x8x2_t %b, 0, 1
398 tail call void @llvm.arm.neon.vst1x2.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1)
399 %tmp = getelementptr i8, ptr %a, i32 16
403 define arm_aapcs_vfpcc ptr @test_vst1_u8_x2_post_reg(ptr %a, %struct.uint8x8x2_t %b, i32 %inc) nounwind {
404 ; CHECK-LABEL: test_vst1_u8_x2_post_reg:
405 ; CHECK: vst1.8 {d0, d1}, [r0:64], r1
408 %b0 = extractvalue %struct.uint8x8x2_t %b, 0, 0
409 %b1 = extractvalue %struct.uint8x8x2_t %b, 0, 1
410 tail call void @llvm.arm.neon.vst1x2.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1)
411 %tmp = getelementptr i8, ptr %a, i32 %inc
415 define arm_aapcs_vfpcc ptr @test_vst1_u16_x2_post_imm(ptr %a, %struct.uint16x4x2_t %b) nounwind {
416 ; CHECK-LABEL: test_vst1_u16_x2_post_imm:
417 ; CHECK: vst1.16 {d0, d1}, [r0:64]!
419 %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0
420 %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1
421 tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1)
422 %tmp = getelementptr i16, ptr %a, i32 8
426 define arm_aapcs_vfpcc ptr @test_vst1_u16_x2_post_reg(ptr %a, %struct.uint16x4x2_t %b, i32 %inc) nounwind {
427 ; CHECK-LABEL: test_vst1_u16_x2_post_reg:
428 ; CHECK: lsl r1, r1, #1
429 ; CHECK-NEXT: vst1.16 {d0, d1}, [r0:64], r1
431 %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0
432 %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1
433 tail call void @llvm.arm.neon.vst1x2.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1)
434 %tmp = getelementptr i16, ptr %a, i32 %inc
438 define arm_aapcs_vfpcc ptr @test_vst1_u32_x2_post_imm(ptr %a, %struct.uint32x2x2_t %b) nounwind {
439 ; CHECK-LABEL: test_vst1_u32_x2_post_imm:
440 ; CHECK: vst1.32 {d0, d1}, [r0:64]!
443 %b0 = extractvalue %struct.uint32x2x2_t %b, 0, 0
444 %b1 = extractvalue %struct.uint32x2x2_t %b, 0, 1
445 tail call void @llvm.arm.neon.vst1x2.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1)
446 %tmp = getelementptr i32, ptr %a, i32 4
450 define arm_aapcs_vfpcc ptr @test_vst1_u32_x2_post_reg(ptr %a, %struct.uint32x2x2_t %b, i32 %inc) nounwind {
451 ; CHECK-LABEL: test_vst1_u32_x2_post_reg:
452 ; CHECK: lsl r1, r1, #2
453 ; CHECK-NEXT: vst1.32 {d0, d1}, [r0:64], r1
456 %b0 = extractvalue %struct.uint32x2x2_t %b, 0, 0
457 %b1 = extractvalue %struct.uint32x2x2_t %b, 0, 1
458 tail call void @llvm.arm.neon.vst1x2.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1)
459 %tmp = getelementptr i32, ptr %a, i32 %inc
463 define arm_aapcs_vfpcc ptr @test_vst1_u64_x2_post_imm(ptr %a, %struct.uint64x1x2_t %b) nounwind {
464 ; CHECK-LABEL: test_vst1_u64_x2_post_imm:
465 ; CHECK: vst1.64 {d0, d1}, [r0:64]!
468 %b0 = extractvalue %struct.uint64x1x2_t %b, 0, 0
469 %b1 = extractvalue %struct.uint64x1x2_t %b, 0, 1
470 tail call void @llvm.arm.neon.vst1x2.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1)
471 %tmp = getelementptr i64, ptr %a, i32 2
475 define arm_aapcs_vfpcc ptr @test_vst1_u64_x2_post_reg(ptr %a, %struct.uint64x1x2_t %b, i32 %inc) nounwind {
476 ; CHECK-LABEL: test_vst1_u64_x2_post_reg:
477 ; CHECK: lsl r1, r1, #3
478 ; CHECK-NEXT: vst1.64 {d0, d1}, [r0:64], r1
481 %b0 = extractvalue %struct.uint64x1x2_t %b, 0, 0
482 %b1 = extractvalue %struct.uint64x1x2_t %b, 0, 1
483 tail call void @llvm.arm.neon.vst1x2.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1)
484 %tmp = getelementptr i64, ptr %a, i32 %inc
488 define arm_aapcs_vfpcc ptr @test_vst1q_u8_x2_post_imm(ptr %a, %struct.uint8x16x2_t %b) nounwind {
489 ; CHECK-LABEL: test_vst1q_u8_x2_post_imm:
490 ; CHECK: vst1.8 {d0, d1, d2, d3}, [r0:256]!
493 %b0 = extractvalue %struct.uint8x16x2_t %b, 0, 0
494 %b1 = extractvalue %struct.uint8x16x2_t %b, 0, 1
495 tail call void @llvm.arm.neon.vst1x2.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1)
496 %tmp = getelementptr i8, ptr %a, i32 32
500 define arm_aapcs_vfpcc ptr @test_vst1q_u8_x2_post_reg(ptr %a, %struct.uint8x16x2_t %b, i32 %inc) nounwind {
501 ; CHECK-LABEL: test_vst1q_u8_x2_post_reg:
502 ; CHECK: vst1.8 {d0, d1, d2, d3}, [r0:256], r1
505 %b0 = extractvalue %struct.uint8x16x2_t %b, 0, 0
506 %b1 = extractvalue %struct.uint8x16x2_t %b, 0, 1
507 tail call void @llvm.arm.neon.vst1x2.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1)
508 %tmp = getelementptr i8, ptr %a, i32 %inc
512 define arm_aapcs_vfpcc ptr @test_vst1q_u16_x2_post_imm(ptr %a, %struct.uint16x8x2_t %b) nounwind {
513 ; CHECK-LABEL: test_vst1q_u16_x2_post_imm:
514 ; CHECK: vst1.16 {d0, d1, d2, d3}, [r0:256]!
517 %b0 = extractvalue %struct.uint16x8x2_t %b, 0, 0
518 %b1 = extractvalue %struct.uint16x8x2_t %b, 0, 1
519 tail call void @llvm.arm.neon.vst1x2.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1)
520 %tmp = getelementptr i16, ptr %a, i32 16
524 define arm_aapcs_vfpcc ptr @test_vst1q_u16_x2_post_reg(ptr %a, %struct.uint16x8x2_t %b, i32 %inc) nounwind {
525 ; CHECK-LABEL: test_vst1q_u16_x2_post_reg:
526 ; CHECK: lsl r1, r1, #1
527 ; CHECK-NEXT: vst1.16 {d0, d1, d2, d3}, [r0:256], r1
530 %b0 = extractvalue %struct.uint16x8x2_t %b, 0, 0
531 %b1 = extractvalue %struct.uint16x8x2_t %b, 0, 1
532 tail call void @llvm.arm.neon.vst1x2.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1)
533 %tmp = getelementptr i16, ptr %a, i32 %inc
537 define arm_aapcs_vfpcc ptr @test_vst1q_u32_x2_post_imm(ptr %a, %struct.uint32x4x2_t %b) nounwind {
538 ; CHECK-LABEL: test_vst1q_u32_x2_post_imm:
539 ; CHECK: vst1.32 {d0, d1, d2, d3}, [r0:256]!
542 %b0 = extractvalue %struct.uint32x4x2_t %b, 0, 0
543 %b1 = extractvalue %struct.uint32x4x2_t %b, 0, 1
544 tail call void @llvm.arm.neon.vst1x2.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1)
545 %tmp = getelementptr i32, ptr %a, i32 8
549 define arm_aapcs_vfpcc ptr @test_vst1q_u32_x2_post_reg(ptr %a, %struct.uint32x4x2_t %b, i32 %inc) nounwind {
550 ; CHECK-LABEL: test_vst1q_u32_x2_post_reg:
551 ; CHECK: lsl r1, r1, #2
552 ; CHECK-NEXT: vst1.32 {d0, d1, d2, d3}, [r0:256], r1
555 %b0 = extractvalue %struct.uint32x4x2_t %b, 0, 0
556 %b1 = extractvalue %struct.uint32x4x2_t %b, 0, 1
557 tail call void @llvm.arm.neon.vst1x2.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1)
558 %tmp = getelementptr i32, ptr %a, i32 %inc
562 define arm_aapcs_vfpcc ptr @test_vst1q_u64_x2_post_imm(ptr %a, %struct.uint64x2x2_t %b) nounwind {
563 ; CHECK-LABEL: test_vst1q_u64_x2_post_imm:
564 ; CHECK: vst1.64 {d0, d1, d2, d3}, [r0:256]!
567 %b0 = extractvalue %struct.uint64x2x2_t %b, 0, 0
568 %b1 = extractvalue %struct.uint64x2x2_t %b, 0, 1
569 tail call void @llvm.arm.neon.vst1x2.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1)
570 %tmp = getelementptr i64, ptr %a, i32 4
574 define arm_aapcs_vfpcc ptr @test_vst1q_u64_x2_post_reg(ptr %a, %struct.uint64x2x2_t %b, i32 %inc) nounwind {
575 ; CHECK-LABEL: test_vst1q_u64_x2_post_reg:
576 ; CHECK: lsl r1, r1, #3
577 ; CHECK-NEXT: vst1.64 {d0, d1, d2, d3}, [r0:256], r1
580 %b0 = extractvalue %struct.uint64x2x2_t %b, 0, 0
581 %b1 = extractvalue %struct.uint64x2x2_t %b, 0, 1
582 tail call void @llvm.arm.neon.vst1x2.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1)
583 %tmp = getelementptr i64, ptr %a, i32 %inc
588 define arm_aapcs_vfpcc ptr @test_vst1_u8_x3_post_imm(ptr %a, %struct.uint8x8x3_t %b) nounwind {
589 ; CHECK-LABEL: test_vst1_u8_x3_post_imm:
590 ; CHECK: vst1.8 {d0, d1, d2}, [r0:64]!
593 %b0 = extractvalue %struct.uint8x8x3_t %b, 0, 0
594 %b1 = extractvalue %struct.uint8x8x3_t %b, 0, 1
595 %b2 = extractvalue %struct.uint8x8x3_t %b, 0, 2
596 tail call void @llvm.arm.neon.vst1x3.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2)
597 %tmp = getelementptr i8, ptr %a, i32 24
601 define arm_aapcs_vfpcc ptr @test_vst1_u8_x3_post_reg(ptr %a, %struct.uint8x8x3_t %b, i32 %inc) nounwind {
602 ; CHECK-LABEL: test_vst1_u8_x3_post_reg:
603 ; CHECK: vst1.8 {d0, d1, d2}, [r0:64], r1
606 %b0 = extractvalue %struct.uint8x8x3_t %b, 0, 0
607 %b1 = extractvalue %struct.uint8x8x3_t %b, 0, 1
608 %b2 = extractvalue %struct.uint8x8x3_t %b, 0, 2
609 tail call void @llvm.arm.neon.vst1x3.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2)
610 %tmp = getelementptr i8, ptr %a, i32 %inc
614 define arm_aapcs_vfpcc ptr @test_vst1_u16_x3_post_imm(ptr %a, %struct.uint16x4x3_t %b) nounwind {
615 ; CHECK-LABEL: test_vst1_u16_x3_post_imm:
616 ; CHECK: vst1.16 {d0, d1, d2}, [r0:64]!
618 %b0 = extractvalue %struct.uint16x4x3_t %b, 0, 0
619 %b1 = extractvalue %struct.uint16x4x3_t %b, 0, 1
620 %b2 = extractvalue %struct.uint16x4x3_t %b, 0, 2
621 tail call void @llvm.arm.neon.vst1x3.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2)
622 %tmp = getelementptr i16, ptr %a, i32 12
626 define arm_aapcs_vfpcc ptr @test_vst1_u16_x3_post_reg(ptr %a, %struct.uint16x4x3_t %b, i32 %inc) nounwind {
627 ; CHECK-LABEL: test_vst1_u16_x3_post_reg:
628 ; CHECK: lsl r1, r1, #1
629 ; CHECK-NEXT: vst1.16 {d0, d1, d2}, [r0:64], r1
631 %b0 = extractvalue %struct.uint16x4x3_t %b, 0, 0
632 %b1 = extractvalue %struct.uint16x4x3_t %b, 0, 1
633 %b2 = extractvalue %struct.uint16x4x3_t %b, 0, 2
634 tail call void @llvm.arm.neon.vst1x3.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2)
635 %tmp = getelementptr i16, ptr %a, i32 %inc
639 define arm_aapcs_vfpcc ptr @test_vst1_u32_x3_post_imm(ptr %a, %struct.uint32x2x3_t %b) nounwind {
640 ; CHECK-LABEL: test_vst1_u32_x3_post_imm:
641 ; CHECK: vst1.32 {d0, d1, d2}, [r0:64]!
644 %b0 = extractvalue %struct.uint32x2x3_t %b, 0, 0
645 %b1 = extractvalue %struct.uint32x2x3_t %b, 0, 1
646 %b2 = extractvalue %struct.uint32x2x3_t %b, 0, 2
647 tail call void @llvm.arm.neon.vst1x3.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2)
648 %tmp = getelementptr i32, ptr %a, i32 6
652 define arm_aapcs_vfpcc ptr @test_vst1_u32_x3_post_reg(ptr %a, %struct.uint32x2x3_t %b, i32 %inc) nounwind {
653 ; CHECK-LABEL: test_vst1_u32_x3_post_reg:
654 ; CHECK: lsl r1, r1, #2
655 ; CHECK-NEXT: vst1.32 {d0, d1, d2}, [r0:64], r1
658 %b0 = extractvalue %struct.uint32x2x3_t %b, 0, 0
659 %b1 = extractvalue %struct.uint32x2x3_t %b, 0, 1
660 %b2 = extractvalue %struct.uint32x2x3_t %b, 0, 2
661 tail call void @llvm.arm.neon.vst1x3.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2)
662 %tmp = getelementptr i32, ptr %a, i32 %inc
666 define arm_aapcs_vfpcc ptr @test_vst1_u64_x3_post_imm(ptr %a, %struct.uint64x1x3_t %b) nounwind {
667 ; CHECK-LABEL: test_vst1_u64_x3_post_imm:
668 ; CHECK: vst1.64 {d0, d1, d2}, [r0:64]!
671 %b0 = extractvalue %struct.uint64x1x3_t %b, 0, 0
672 %b1 = extractvalue %struct.uint64x1x3_t %b, 0, 1
673 %b2 = extractvalue %struct.uint64x1x3_t %b, 0, 2
674 tail call void @llvm.arm.neon.vst1x3.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2)
675 %tmp = getelementptr i64, ptr %a, i32 3
679 define arm_aapcs_vfpcc ptr @test_vst1_u64_x3_post_reg(ptr %a, %struct.uint64x1x3_t %b, i32 %inc) nounwind {
680 ; CHECK-LABEL: test_vst1_u64_x3_post_reg:
681 ; CHECK: lsl r1, r1, #3
682 ; CHECK-NEXT: vst1.64 {d0, d1, d2}, [r0:64], r1
685 %b0 = extractvalue %struct.uint64x1x3_t %b, 0, 0
686 %b1 = extractvalue %struct.uint64x1x3_t %b, 0, 1
687 %b2 = extractvalue %struct.uint64x1x3_t %b, 0, 2
688 tail call void @llvm.arm.neon.vst1x3.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2)
689 %tmp = getelementptr i64, ptr %a, i32 %inc
693 define arm_aapcs_vfpcc ptr @test_vst1q_u8_x3_post_imm(ptr %a, %struct.uint8x16x3_t %b) nounwind {
694 ; CHECK-LABEL: test_vst1q_u8_x3_post_imm:
695 ; CHECK: vst1.8 {d0, d1, d2}, [r0:64]!
696 ; CHECK-NEXT: vst1.8 {d3, d4, d5}, [r0:64]!
699 %b0 = extractvalue %struct.uint8x16x3_t %b, 0, 0
700 %b1 = extractvalue %struct.uint8x16x3_t %b, 0, 1
701 %b2 = extractvalue %struct.uint8x16x3_t %b, 0, 2
702 tail call void @llvm.arm.neon.vst1x3.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1, <16 x i8> %b2)
703 %tmp = getelementptr i8, ptr %a, i32 48
707 define arm_aapcs_vfpcc ptr @test_vst1q_u16_x3_post_imm(ptr %a, %struct.uint16x8x3_t %b) nounwind {
708 ; CHECK-LABEL: test_vst1q_u16_x3_post_imm:
709 ; CHECK: vst1.16 {d0, d1, d2}, [r0:64]!
710 ; CHECK-NEXT: vst1.16 {d3, d4, d5}, [r0:64]!
713 %b0 = extractvalue %struct.uint16x8x3_t %b, 0, 0
714 %b1 = extractvalue %struct.uint16x8x3_t %b, 0, 1
715 %b2 = extractvalue %struct.uint16x8x3_t %b, 0, 2
716 tail call void @llvm.arm.neon.vst1x3.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1, <8 x i16> %b2)
717 %tmp = getelementptr i16, ptr %a, i32 24
721 define arm_aapcs_vfpcc ptr @test_vst1q_u32_x3_post_imm(ptr %a, %struct.uint32x4x3_t %b) nounwind {
722 ; CHECK-LABEL: test_vst1q_u32_x3_post_imm:
723 ; CHECK: vst1.32 {d0, d1, d2}, [r0:64]!
724 ; CHECK-NEXT: vst1.32 {d3, d4, d5}, [r0:64]!
727 %b0 = extractvalue %struct.uint32x4x3_t %b, 0, 0
728 %b1 = extractvalue %struct.uint32x4x3_t %b, 0, 1
729 %b2 = extractvalue %struct.uint32x4x3_t %b, 0, 2
730 tail call void @llvm.arm.neon.vst1x3.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1, <4 x i32> %b2)
731 %tmp = getelementptr i32, ptr %a, i32 12
735 define arm_aapcs_vfpcc ptr @test_vst1q_u64_x3_post_imm(ptr %a, %struct.uint64x2x3_t %b) nounwind {
736 ; CHECK-LABEL: test_vst1q_u64_x3_post_imm:
737 ; CHECK: vst1.64 {d0, d1, d2}, [r0:64]!
738 ; CHECK-NEXT: vst1.64 {d3, d4, d5}, [r0:64]!
741 %b0 = extractvalue %struct.uint64x2x3_t %b, 0, 0
742 %b1 = extractvalue %struct.uint64x2x3_t %b, 0, 1
743 %b2 = extractvalue %struct.uint64x2x3_t %b, 0, 2
744 tail call void @llvm.arm.neon.vst1x3.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1, <2 x i64> %b2)
745 %tmp = getelementptr i64, ptr %a, i32 6
749 define arm_aapcs_vfpcc ptr @test_vst1_u8_x4_post_imm(ptr %a, %struct.uint8x8x4_t %b) nounwind {
750 ; CHECK-LABEL: test_vst1_u8_x4_post_imm:
751 ; CHECK: vst1.8 {d0, d1, d2, d3}, [r0:256]!
754 %b0 = extractvalue %struct.uint8x8x4_t %b, 0, 0
755 %b1 = extractvalue %struct.uint8x8x4_t %b, 0, 1
756 %b2 = extractvalue %struct.uint8x8x4_t %b, 0, 2
757 %b3 = extractvalue %struct.uint8x8x4_t %b, 0, 3
758 tail call void @llvm.arm.neon.vst1x4.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2, <8 x i8> %b3)
759 %tmp = getelementptr i8, ptr %a, i32 32
763 define arm_aapcs_vfpcc ptr @test_vst1_u8_x4_post_reg(ptr %a, %struct.uint8x8x4_t %b, i32 %inc) nounwind {
764 ; CHECK-LABEL: test_vst1_u8_x4_post_reg:
765 ; CHECK: vst1.8 {d0, d1, d2, d3}, [r0:256], r1
768 %b0 = extractvalue %struct.uint8x8x4_t %b, 0, 0
769 %b1 = extractvalue %struct.uint8x8x4_t %b, 0, 1
770 %b2 = extractvalue %struct.uint8x8x4_t %b, 0, 2
771 %b3 = extractvalue %struct.uint8x8x4_t %b, 0, 3
772 tail call void @llvm.arm.neon.vst1x4.p0.v8i8(ptr %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2, <8 x i8> %b3)
773 %tmp = getelementptr i8, ptr %a, i32 %inc
777 define arm_aapcs_vfpcc ptr @test_vst1_u16_x4_post_imm(ptr %a, %struct.uint16x4x4_t %b) nounwind {
778 ; CHECK-LABEL: test_vst1_u16_x4_post_imm:
779 ; CHECK: vst1.16 {d0, d1, d2, d3}, [r0:256]!
781 %b0 = extractvalue %struct.uint16x4x4_t %b, 0, 0
782 %b1 = extractvalue %struct.uint16x4x4_t %b, 0, 1
783 %b2 = extractvalue %struct.uint16x4x4_t %b, 0, 2
784 %b3 = extractvalue %struct.uint16x4x4_t %b, 0, 3
785 tail call void @llvm.arm.neon.vst1x4.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2, <4 x i16> %b3)
786 %tmp = getelementptr i16, ptr %a, i32 16
790 define arm_aapcs_vfpcc ptr @test_vst1_u16_x4_post_reg(ptr %a, %struct.uint16x4x4_t %b, i32 %inc) nounwind {
791 ; CHECK-LABEL: test_vst1_u16_x4_post_reg:
792 ; CHECK: lsl r1, r1, #1
793 ; CHECK-NEXT: vst1.16 {d0, d1, d2, d3}, [r0:256], r1
795 %b0 = extractvalue %struct.uint16x4x4_t %b, 0, 0
796 %b1 = extractvalue %struct.uint16x4x4_t %b, 0, 1
797 %b2 = extractvalue %struct.uint16x4x4_t %b, 0, 2
798 %b3 = extractvalue %struct.uint16x4x4_t %b, 0, 3
799 tail call void @llvm.arm.neon.vst1x4.p0.v4i16(ptr %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2, <4 x i16> %b3)
800 %tmp = getelementptr i16, ptr %a, i32 %inc
804 define arm_aapcs_vfpcc ptr @test_vst1_u32_x4_post_imm(ptr %a, %struct.uint32x2x4_t %b) nounwind {
805 ; CHECK-LABEL: test_vst1_u32_x4_post_imm:
806 ; CHECK: vst1.32 {d0, d1, d2, d3}, [r0:256]!
809 %b0 = extractvalue %struct.uint32x2x4_t %b, 0, 0
810 %b1 = extractvalue %struct.uint32x2x4_t %b, 0, 1
811 %b2 = extractvalue %struct.uint32x2x4_t %b, 0, 2
812 %b3 = extractvalue %struct.uint32x2x4_t %b, 0, 3
813 tail call void @llvm.arm.neon.vst1x4.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2, <2 x i32> %b3)
814 %tmp = getelementptr i32, ptr %a, i32 8
818 define arm_aapcs_vfpcc ptr @test_vst1_u32_x4_post_reg(ptr %a, %struct.uint32x2x4_t %b, i32 %inc) nounwind {
819 ; CHECK-LABEL: test_vst1_u32_x4_post_reg:
820 ; CHECK: lsl r1, r1, #2
821 ; CHECK-NEXT: vst1.32 {d0, d1, d2, d3}, [r0:256], r1
824 %b0 = extractvalue %struct.uint32x2x4_t %b, 0, 0
825 %b1 = extractvalue %struct.uint32x2x4_t %b, 0, 1
826 %b2 = extractvalue %struct.uint32x2x4_t %b, 0, 2
827 %b3 = extractvalue %struct.uint32x2x4_t %b, 0, 3
828 tail call void @llvm.arm.neon.vst1x4.p0.v2i32(ptr %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2, <2 x i32> %b3)
829 %tmp = getelementptr i32, ptr %a, i32 %inc
833 define arm_aapcs_vfpcc ptr @test_vst1_u64_x4_post_imm(ptr %a, %struct.uint64x1x4_t %b) nounwind {
834 ; CHECK-LABEL: test_vst1_u64_x4_post_imm:
835 ; CHECK: vst1.64 {d0, d1, d2, d3}, [r0:256]!
838 %b0 = extractvalue %struct.uint64x1x4_t %b, 0, 0
839 %b1 = extractvalue %struct.uint64x1x4_t %b, 0, 1
840 %b2 = extractvalue %struct.uint64x1x4_t %b, 0, 2
841 %b3 = extractvalue %struct.uint64x1x4_t %b, 0, 3
842 tail call void @llvm.arm.neon.vst1x4.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2, <1 x i64> %b3)
843 %tmp = getelementptr i64, ptr %a, i32 4
847 define arm_aapcs_vfpcc ptr @test_vst1_u64_x4_post_reg(ptr %a, %struct.uint64x1x4_t %b, i32 %inc) nounwind {
848 ; CHECK-LABEL: test_vst1_u64_x4_post_reg:
849 ; CHECK: lsl r1, r1, #3
850 ; CHECK-NEXT: vst1.64 {d0, d1, d2, d3}, [r0:256], r1
853 %b0 = extractvalue %struct.uint64x1x4_t %b, 0, 0
854 %b1 = extractvalue %struct.uint64x1x4_t %b, 0, 1
855 %b2 = extractvalue %struct.uint64x1x4_t %b, 0, 2
856 %b3 = extractvalue %struct.uint64x1x4_t %b, 0, 3
857 tail call void @llvm.arm.neon.vst1x4.p0.v1i64(ptr %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2, <1 x i64> %b3)
858 %tmp = getelementptr i64, ptr %a, i32 %inc
862 define arm_aapcs_vfpcc ptr @test_vst1q_u8_x4_post_imm(ptr %a, %struct.uint8x16x4_t %b) nounwind {
863 ; CHECK-LABEL: test_vst1q_u8_x4_post_imm:
864 ; CHECK: vst1.8 {d0, d1, d2, d3}, [r0:256]!
865 ; CHECK-NEXT: vst1.8 {d4, d5, d6, d7}, [r0:256]!
868 %b0 = extractvalue %struct.uint8x16x4_t %b, 0, 0
869 %b1 = extractvalue %struct.uint8x16x4_t %b, 0, 1
870 %b2 = extractvalue %struct.uint8x16x4_t %b, 0, 2
871 %b3 = extractvalue %struct.uint8x16x4_t %b, 0, 3
872 tail call void @llvm.arm.neon.vst1x4.p0.v16i8(ptr %a, <16 x i8> %b0, <16 x i8> %b1, <16 x i8> %b2, <16 x i8> %b3)
873 %tmp = getelementptr i8, ptr %a, i32 64
877 define arm_aapcs_vfpcc ptr @test_vst1q_u16_x4_post_imm(ptr %a, %struct.uint16x8x4_t %b) nounwind {
878 ; CHECK-LABEL: test_vst1q_u16_x4_post_imm:
879 ; CHECK: vst1.16 {d0, d1, d2, d3}, [r0:256]!
880 ; CHECK-NEXT: vst1.16 {d4, d5, d6, d7}, [r0:256]!
883 %b0 = extractvalue %struct.uint16x8x4_t %b, 0, 0
884 %b1 = extractvalue %struct.uint16x8x4_t %b, 0, 1
885 %b2 = extractvalue %struct.uint16x8x4_t %b, 0, 2
886 %b3 = extractvalue %struct.uint16x8x4_t %b, 0, 3
887 tail call void @llvm.arm.neon.vst1x4.p0.v8i16(ptr %a, <8 x i16> %b0, <8 x i16> %b1, <8 x i16> %b2, <8 x i16> %b3)
888 %tmp = getelementptr i16, ptr %a, i32 32
892 define arm_aapcs_vfpcc ptr @test_vst1q_u32_x4_post_imm(ptr %a, %struct.uint32x4x4_t %b) nounwind {
893 ; CHECK-LABEL: test_vst1q_u32_x4_post_imm:
894 ; CHECK: vst1.32 {d0, d1, d2, d3}, [r0:256]!
895 ; CHECK-NEXT: vst1.32 {d4, d5, d6, d7}, [r0:256]!
898 %b0 = extractvalue %struct.uint32x4x4_t %b, 0, 0
899 %b1 = extractvalue %struct.uint32x4x4_t %b, 0, 1
900 %b2 = extractvalue %struct.uint32x4x4_t %b, 0, 2
901 %b3 = extractvalue %struct.uint32x4x4_t %b, 0, 3
902 tail call void @llvm.arm.neon.vst1x4.p0.v4i32(ptr %a, <4 x i32> %b0, <4 x i32> %b1, <4 x i32> %b2, <4 x i32> %b3)
903 %tmp = getelementptr i32, ptr %a, i32 16
907 define arm_aapcs_vfpcc ptr @test_vst1q_u64_x4_post_imm(ptr %a, %struct.uint64x2x4_t %b) nounwind {
908 ; CHECK-LABEL: test_vst1q_u64_x4_post_imm:
909 ; CHECK: vst1.64 {d0, d1, d2, d3}, [r0:256]!
910 ; CHECK-NEXT: vst1.64 {d4, d5, d6, d7}, [r0:256]!
913 %b0 = extractvalue %struct.uint64x2x4_t %b, 0, 0
914 %b1 = extractvalue %struct.uint64x2x4_t %b, 0, 1
915 %b2 = extractvalue %struct.uint64x2x4_t %b, 0, 2
916 %b3 = extractvalue %struct.uint64x2x4_t %b, 0, 3
917 tail call void @llvm.arm.neon.vst1x4.p0.v2i64(ptr %a, <2 x i64> %b0, <2 x i64> %b1, <2 x i64> %b2, <2 x i64> %b3)
918 %tmp = getelementptr i64, ptr %a, i32 8