1 ; RUN: llc < %s -mtriple=armv8-linux-gnueabi -verify-machineinstrs \
2 ; RUN: -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.p0i16.v4i16(i16* nocapture, <4 x i16>, <4 x i16>) argmemonly nounwind
62 declare void @llvm.arm.neon.vst1x3.p0i16.v4i16(i16* nocapture, <4 x i16>, <4 x i16>, <4 x i16>) argmemonly nounwind
63 declare void @llvm.arm.neon.vst1x4.p0i16.v4i16(i16* nocapture, <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>) argmemonly nounwind
65 declare void @llvm.arm.neon.vst1x2.p0i32.v2i32(i32* nocapture, <2 x i32>, <2 x i32>) argmemonly nounwind
66 declare void @llvm.arm.neon.vst1x3.p0i32.v2i32(i32* nocapture, <2 x i32>, <2 x i32>, <2 x i32>) argmemonly nounwind
67 declare void @llvm.arm.neon.vst1x4.p0i32.v2i32(i32* nocapture, <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>) argmemonly nounwind
69 declare void @llvm.arm.neon.vst1x2.p0i64.v1i64(i64* nocapture, <1 x i64>, <1 x i64>) argmemonly nounwind
70 declare void @llvm.arm.neon.vst1x3.p0i64.v1i64(i64* nocapture, <1 x i64>, <1 x i64>, <1 x i64>) argmemonly nounwind
71 declare void @llvm.arm.neon.vst1x4.p0i64.v1i64(i64* nocapture, <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>) argmemonly nounwind
73 declare void @llvm.arm.neon.vst1x2.p0i8.v8i8(i8* nocapture, <8 x i8>, <8 x i8>) argmemonly nounwind
74 declare void @llvm.arm.neon.vst1x3.p0i8.v8i8(i8* nocapture, <8 x i8>, <8 x i8>, <8 x i8>) argmemonly nounwind
75 declare void @llvm.arm.neon.vst1x4.p0i8.v8i8(i8* nocapture, <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>) argmemonly nounwind
77 declare void @llvm.arm.neon.vst1x2.p0i16.v8i16(i16* nocapture, <8 x i16>, <8 x i16>) argmemonly nounwind
78 declare void @llvm.arm.neon.vst1x3.p0i16.v8i16(i16* nocapture, <8 x i16>, <8 x i16>, <8 x i16>) argmemonly nounwind
79 declare void @llvm.arm.neon.vst1x4.p0i16.v8i16(i16* nocapture, <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>) argmemonly nounwind
81 declare void @llvm.arm.neon.vst1x2.p0i32.v4i32(i32* nocapture, <4 x i32>, <4 x i32>) argmemonly nounwind
82 declare void @llvm.arm.neon.vst1x3.p0i32.v4i32(i32* nocapture, <4 x i32>, <4 x i32>, <4 x i32>) argmemonly nounwind
83 declare void @llvm.arm.neon.vst1x4.p0i32.v4i32(i32* nocapture, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>) argmemonly nounwind
85 declare void @llvm.arm.neon.vst1x2.p0i64.v2i64(i64* nocapture, <2 x i64>, <2 x i64>) argmemonly nounwind
86 declare void @llvm.arm.neon.vst1x3.p0i64.v2i64(i64* nocapture, <2 x i64>, <2 x i64>, <2 x i64>) argmemonly nounwind
87 declare void @llvm.arm.neon.vst1x4.p0i64.v2i64(i64* nocapture, <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>) argmemonly nounwind
89 declare void @llvm.arm.neon.vst1x2.p0i8.v16i8(i8* nocapture, <16 x i8>, <16 x i8>) argmemonly nounwind
90 declare void @llvm.arm.neon.vst1x3.p0i8.v16i8(i8* nocapture, <16 x i8>, <16 x i8>, <16 x i8>) argmemonly nounwind
91 declare void @llvm.arm.neon.vst1x4.p0i8.v16i8(i8* nocapture, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>) argmemonly nounwind
93 ; CHECK-LABEL: test_vst1_u16_x2
94 ; CHECK: vst1.16 {d16, d17}, [r0:64]
95 define void @test_vst1_u16_x2(i16* %a, %struct.uint16x4x2_t %b) nounwind {
97 %b0 = extractvalue %struct.uint16x4x2_t %b, 0, 0
98 %b1 = extractvalue %struct.uint16x4x2_t %b, 0, 1
99 tail call void @llvm.arm.neon.vst1x2.p0i16.v4i16(i16* %a, <4 x i16> %b0, <4 x i16> %b1)
103 ; CHECK-LABEL: test_vst1_u16_x3
104 ; CHECK: vst1.16 {d16, d17, d18}, [r0:64]
105 define void @test_vst1_u16_x3(i16* %a, %struct.uint16x4x3_t %b) nounwind {
107 %b0 = extractvalue %struct.uint16x4x3_t %b, 0, 0
108 %b1 = extractvalue %struct.uint16x4x3_t %b, 0, 1
109 %b2 = extractvalue %struct.uint16x4x3_t %b, 0, 2
110 tail call void @llvm.arm.neon.vst1x3.p0i16.v4i16(i16* %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2)
114 ; CHECK-LABEL: test_vst1_u16_x4
115 ; CHECK: vst1.16 {d16, d17, d18, d19}, [r0:256]
116 define void @test_vst1_u16_x4(i16* %a, %struct.uint16x4x4_t %b) nounwind {
118 %b0 = extractvalue %struct.uint16x4x4_t %b, 0, 0
119 %b1 = extractvalue %struct.uint16x4x4_t %b, 0, 1
120 %b2 = extractvalue %struct.uint16x4x4_t %b, 0, 2
121 %b3 = extractvalue %struct.uint16x4x4_t %b, 0, 3
122 tail call void @llvm.arm.neon.vst1x4.p0i16.v4i16(i16* %a, <4 x i16> %b0, <4 x i16> %b1, <4 x i16> %b2, <4 x i16> %b3)
126 ; CHECK-LABEL: test_vst1_u32_x2
127 ; CHECK: vst1.32 {d16, d17}, [r0:64]
128 define void @test_vst1_u32_x2(i32* %a, %struct.uint32x2x2_t %b) nounwind {
130 %b0 = extractvalue %struct.uint32x2x2_t %b, 0, 0
131 %b1 = extractvalue %struct.uint32x2x2_t %b, 0, 1
132 tail call void @llvm.arm.neon.vst1x2.p0i32.v2i32(i32* %a, <2 x i32> %b0, <2 x i32> %b1)
136 ; CHECK-LABEL: test_vst1_u32_x3
137 ; CHECK: vst1.32 {d16, d17, d18}, [r0:64]
138 define void @test_vst1_u32_x3(i32* %a, %struct.uint32x2x3_t %b) nounwind {
140 %b0 = extractvalue %struct.uint32x2x3_t %b, 0, 0
141 %b1 = extractvalue %struct.uint32x2x3_t %b, 0, 1
142 %b2 = extractvalue %struct.uint32x2x3_t %b, 0, 2
143 tail call void @llvm.arm.neon.vst1x3.p0i32.v2i32(i32* %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2)
147 ; CHECK-LABEL: test_vst1_u32_x4
148 ; CHECK: vst1.32 {d16, d17, d18, d19}, [r0:256]
149 define void @test_vst1_u32_x4(i32* %a, %struct.uint32x2x4_t %b) nounwind {
151 %b0 = extractvalue %struct.uint32x2x4_t %b, 0, 0
152 %b1 = extractvalue %struct.uint32x2x4_t %b, 0, 1
153 %b2 = extractvalue %struct.uint32x2x4_t %b, 0, 2
154 %b3 = extractvalue %struct.uint32x2x4_t %b, 0, 3
155 tail call void @llvm.arm.neon.vst1x4.p0i32.v2i32(i32* %a, <2 x i32> %b0, <2 x i32> %b1, <2 x i32> %b2, <2 x i32> %b3)
159 ; CHECK-LABEL: test_vst1_u64_x2
160 ; CHECK: vst1.64 {d16, d17}, [r0:64]
161 define void @test_vst1_u64_x2(i64* %a, %struct.uint64x1x2_t %b) nounwind {
163 %b0 = extractvalue %struct.uint64x1x2_t %b, 0, 0
164 %b1 = extractvalue %struct.uint64x1x2_t %b, 0, 1
165 tail call void @llvm.arm.neon.vst1x2.p0i64.v1i64(i64* %a, <1 x i64> %b0, <1 x i64> %b1)
169 ; CHECK-LABEL: test_vst1_u64_x3
170 ; CHECK: vst1.64 {d16, d17, d18}, [r0:64]
171 define void @test_vst1_u64_x3(i64* %a, %struct.uint64x1x3_t %b) nounwind {
173 %b0 = extractvalue %struct.uint64x1x3_t %b, 0, 0
174 %b1 = extractvalue %struct.uint64x1x3_t %b, 0, 1
175 %b2 = extractvalue %struct.uint64x1x3_t %b, 0, 2
176 tail call void @llvm.arm.neon.vst1x3.p0i64.v1i64(i64* %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2)
180 ; CHECK-LABEL: test_vst1_u64_x4
181 ; CHECK: vst1.64 {d16, d17, d18, d19}, [r0:256]
182 define void @test_vst1_u64_x4(i64* %a, %struct.uint64x1x4_t %b) nounwind {
184 %b0 = extractvalue %struct.uint64x1x4_t %b, 0, 0
185 %b1 = extractvalue %struct.uint64x1x4_t %b, 0, 1
186 %b2 = extractvalue %struct.uint64x1x4_t %b, 0, 2
187 %b3 = extractvalue %struct.uint64x1x4_t %b, 0, 3
188 tail call void @llvm.arm.neon.vst1x4.p0i64.v1i64(i64* %a, <1 x i64> %b0, <1 x i64> %b1, <1 x i64> %b2, <1 x i64> %b3)
192 ; CHECK-LABEL: test_vst1_u8_x2
193 ; CHECK: vst1.8 {d16, d17}, [r0:64]
194 define void @test_vst1_u8_x2(i8* %a, %struct.uint8x8x2_t %b) nounwind {
196 %b0 = extractvalue %struct.uint8x8x2_t %b, 0, 0
197 %b1 = extractvalue %struct.uint8x8x2_t %b, 0, 1
198 tail call void @llvm.arm.neon.vst1x2.p0i8.v8i8(i8* %a, <8 x i8> %b0, <8 x i8> %b1)
202 ; CHECK-LABEL: test_vst1_u8_x3
203 ; CHECK: vst1.8 {d16, d17, d18}, [r0:64]
204 define void @test_vst1_u8_x3(i8* %a, %struct.uint8x8x3_t %b) nounwind {
206 %b0 = extractvalue %struct.uint8x8x3_t %b, 0, 0
207 %b1 = extractvalue %struct.uint8x8x3_t %b, 0, 1
208 %b2 = extractvalue %struct.uint8x8x3_t %b, 0, 2
209 tail call void @llvm.arm.neon.vst1x3.p0i8.v8i8(i8* %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2)
213 ; CHECK-LABEL: test_vst1_u8_x4
214 ; CHECK: vst1.8 {d16, d17, d18, d19}, [r0:256]
215 define void @test_vst1_u8_x4(i8* %a, %struct.uint8x8x4_t %b) nounwind {
217 %b0 = extractvalue %struct.uint8x8x4_t %b, 0, 0
218 %b1 = extractvalue %struct.uint8x8x4_t %b, 0, 1
219 %b2 = extractvalue %struct.uint8x8x4_t %b, 0, 2
220 %b3 = extractvalue %struct.uint8x8x4_t %b, 0, 3
221 tail call void @llvm.arm.neon.vst1x4.p0i8.v8i8(i8* %a, <8 x i8> %b0, <8 x i8> %b1, <8 x i8> %b2, <8 x i8> %b3)
225 ; CHECK-LABEL: test_vst1q_u16_x2
226 ; CHECK: vst1.16 {d16, d17, d18, d19}, [r0:256]
227 define void @test_vst1q_u16_x2(i16* %a, %struct.uint16x8x2_t %b) nounwind {
229 %b0 = extractvalue %struct.uint16x8x2_t %b, 0, 0
230 %b1 = extractvalue %struct.uint16x8x2_t %b, 0, 1
231 tail call void @llvm.arm.neon.vst1x2.p0i16.v8i16(i16* %a, <8 x i16> %b0, <8 x i16> %b1)
235 ; CHECK-LABEL: test_vst1q_u16_x3
236 ; CHECK: vst1.16 {d16, d17, d18}, [r0:64]!
237 ; CHECK: vst1.16 {d19, d20, d21}, [r0:64]
238 define void @test_vst1q_u16_x3(i16* %a, %struct.uint16x8x3_t %b) nounwind {
240 %b0 = extractvalue %struct.uint16x8x3_t %b, 0, 0
241 %b1 = extractvalue %struct.uint16x8x3_t %b, 0, 1
242 %b2 = extractvalue %struct.uint16x8x3_t %b, 0, 2
243 tail call void @llvm.arm.neon.vst1x3.p0i16.v8i16(i16* %a, <8 x i16> %b0, <8 x i16> %b1, <8 x i16> %b2)
247 ; CHECK-LABEL: test_vst1q_u16_x4
248 ; CHECK: vst1.16 {d16, d17, d18, d19}, [r0:256]!
249 ; CHECK: vst1.16 {d20, d21, d22, d23}, [r0:256]
250 define void @test_vst1q_u16_x4(i16* %a, %struct.uint16x8x4_t %b) nounwind {
252 %b0 = extractvalue %struct.uint16x8x4_t %b, 0, 0
253 %b1 = extractvalue %struct.uint16x8x4_t %b, 0, 1
254 %b2 = extractvalue %struct.uint16x8x4_t %b, 0, 2
255 %b3 = extractvalue %struct.uint16x8x4_t %b, 0, 3
256 tail call void @llvm.arm.neon.vst1x4.p0i16.v8i16(i16* %a, <8 x i16> %b0, <8 x i16> %b1, <8 x i16> %b2, <8 x i16> %b3)
260 ; CHECK-LABEL: test_vst1q_u32_x2
261 ; CHECK: vst1.32 {d16, d17, d18, d19}, [r0:256]
262 define void @test_vst1q_u32_x2(i32* %a, %struct.uint32x4x2_t %b) nounwind {
264 %b0 = extractvalue %struct.uint32x4x2_t %b, 0, 0
265 %b1 = extractvalue %struct.uint32x4x2_t %b, 0, 1
266 tail call void @llvm.arm.neon.vst1x2.p0i32.v4i32(i32* %a, <4 x i32> %b0, <4 x i32> %b1)
270 ; CHECK-LABEL: test_vst1q_u32_x3
271 ; CHECK: vst1.32 {d16, d17, d18}, [r0:64]!
272 ; CHECK: vst1.32 {d19, d20, d21}, [r0:64]
273 define void @test_vst1q_u32_x3(i32* %a, %struct.uint32x4x3_t %b) nounwind {
275 %b0 = extractvalue %struct.uint32x4x3_t %b, 0, 0
276 %b1 = extractvalue %struct.uint32x4x3_t %b, 0, 1
277 %b2 = extractvalue %struct.uint32x4x3_t %b, 0, 2
278 tail call void @llvm.arm.neon.vst1x3.p0i32.v4i32(i32* %a, <4 x i32> %b0, <4 x i32> %b1, <4 x i32> %b2)
282 ; CHECK-LABEL: test_vst1q_u32_x4
283 ; CHECK: vst1.32 {d16, d17, d18, d19}, [r0:256]!
284 ; CHECK: vst1.32 {d20, d21, d22, d23}, [r0:256]
285 define void @test_vst1q_u32_x4(i32* %a, %struct.uint32x4x4_t %b) nounwind {
287 %b0 = extractvalue %struct.uint32x4x4_t %b, 0, 0
288 %b1 = extractvalue %struct.uint32x4x4_t %b, 0, 1
289 %b2 = extractvalue %struct.uint32x4x4_t %b, 0, 2
290 %b3 = extractvalue %struct.uint32x4x4_t %b, 0, 3
291 tail call void @llvm.arm.neon.vst1x4.p0i32.v4i32(i32* %a, <4 x i32> %b0, <4 x i32> %b1, <4 x i32> %b2, <4 x i32> %b3)
295 ; CHECK-LABEL: test_vst1q_u64_x2
296 ; CHECK: vst1.64 {d16, d17, d18, d19}, [r0:256]
297 define void @test_vst1q_u64_x2(i64* %a, %struct.uint64x2x2_t %b) nounwind {
299 %b0 = extractvalue %struct.uint64x2x2_t %b, 0, 0
300 %b1 = extractvalue %struct.uint64x2x2_t %b, 0, 1
301 tail call void @llvm.arm.neon.vst1x2.p0i64.v2i64(i64* %a, <2 x i64> %b0, <2 x i64> %b1)
305 ; CHECK-LABEL: test_vst1q_u64_x3
306 ; CHECK: vst1.64 {d16, d17, d18}, [r0:64]!
307 ; CHECK: vst1.64 {d19, d20, d21}, [r0:64]
308 define void @test_vst1q_u64_x3(i64* %a, %struct.uint64x2x3_t %b) nounwind {
310 %b0 = extractvalue %struct.uint64x2x3_t %b, 0, 0
311 %b1 = extractvalue %struct.uint64x2x3_t %b, 0, 1
312 %b2 = extractvalue %struct.uint64x2x3_t %b, 0, 2
313 tail call void @llvm.arm.neon.vst1x3.p0i64.v2i64(i64* %a, <2 x i64> %b0, <2 x i64> %b1, <2 x i64> %b2)
317 ; CHECK-LABEL: test_vst1q_u64_x4
318 ; CHECK: vst1.64 {d16, d17, d18, d19}, [r0:256]!
319 ; CHECK: vst1.64 {d20, d21, d22, d23}, [r0:256]
320 define void @test_vst1q_u64_x4(i64* %a, %struct.uint64x2x4_t %b) nounwind {
322 %b0 = extractvalue %struct.uint64x2x4_t %b, 0, 0
323 %b1 = extractvalue %struct.uint64x2x4_t %b, 0, 1
324 %b2 = extractvalue %struct.uint64x2x4_t %b, 0, 2
325 %b3 = extractvalue %struct.uint64x2x4_t %b, 0, 3
326 tail call void @llvm.arm.neon.vst1x4.p0i64.v2i64(i64* %a, <2 x i64> %b0, <2 x i64> %b1, <2 x i64> %b2, <2 x i64> %b3)
330 ; CHECK-LABEL: test_vst1q_u8_x2
331 ; CHECK: vst1.8 {d16, d17, d18, d19}, [r0:256]
332 define void @test_vst1q_u8_x2(i8* %a, %struct.uint8x16x2_t %b) nounwind {
334 %b0 = extractvalue %struct.uint8x16x2_t %b, 0, 0
335 %b1 = extractvalue %struct.uint8x16x2_t %b, 0, 1
336 tail call void @llvm.arm.neon.vst1x2.p0i8.v16i8(i8* %a, <16 x i8> %b0, <16 x i8> %b1)
340 ; CHECK-LABEL: test_vst1q_u8_x3
341 ; CHECK: vst1.8 {d16, d17, d18}, [r0:64]!
342 ; CHECK: vst1.8 {d19, d20, d21}, [r0:64]
343 define void @test_vst1q_u8_x3(i8* %a, %struct.uint8x16x3_t %b) nounwind {
345 %b0 = extractvalue %struct.uint8x16x3_t %b, 0, 0
346 %b1 = extractvalue %struct.uint8x16x3_t %b, 0, 1
347 %b2 = extractvalue %struct.uint8x16x3_t %b, 0, 2
348 tail call void @llvm.arm.neon.vst1x3.p0i8.v16i8(i8* %a, <16 x i8> %b0, <16 x i8> %b1, <16 x i8> %b2)
352 ; CHECK-LABEL: test_vst1q_u8_x4
353 ; CHECK: vst1.8 {d16, d17, d18, d19}, [r0:256]!
354 ; CHECK: vst1.8 {d20, d21, d22, d23}, [r0:256]
355 define void @test_vst1q_u8_x4(i8* %a, %struct.uint8x16x4_t %b) nounwind {
357 %b0 = extractvalue %struct.uint8x16x4_t %b, 0, 0
358 %b1 = extractvalue %struct.uint8x16x4_t %b, 0, 1
359 %b2 = extractvalue %struct.uint8x16x4_t %b, 0, 2
360 %b3 = extractvalue %struct.uint8x16x4_t %b, 0, 3
361 tail call void @llvm.arm.neon.vst1x4.p0i8.v16i8(i8* %a, <16 x i8> %b0, <16 x i8> %b1, <16 x i8> %b2, <16 x i8> %b3)