1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s
4 define arm_aapcs_vfpcc void @vmovn32_trunc1(<4 x i32> %src1, <4 x i32> %src2, <8 x i16> *%dest) {
5 ; CHECK-LABEL: vmovn32_trunc1:
6 ; CHECK: @ %bb.0: @ %entry
7 ; CHECK-NEXT: vmovnt.i32 q0, q1
8 ; CHECK-NEXT: vstrw.32 q0, [r0]
11 %strided.vec = shufflevector <4 x i32> %src1, <4 x i32> %src2, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
12 %out = trunc <8 x i32> %strided.vec to <8 x i16>
13 store <8 x i16> %out, <8 x i16> *%dest, align 8
17 define arm_aapcs_vfpcc void @vmovn32_trunc2(<4 x i32> %src1, <4 x i32> %src2, <8 x i16> *%dest) {
18 ; CHECK-LABEL: vmovn32_trunc2:
19 ; CHECK: @ %bb.0: @ %entry
20 ; CHECK-NEXT: vmovnt.i32 q1, q0
21 ; CHECK-NEXT: vstrw.32 q1, [r0]
24 %strided.vec = shufflevector <4 x i32> %src1, <4 x i32> %src2, <8 x i32> <i32 4, i32 0, i32 5, i32 1, i32 6, i32 2, i32 7, i32 3>
25 %out = trunc <8 x i32> %strided.vec to <8 x i16>
26 store <8 x i16> %out, <8 x i16> *%dest, align 8
30 define arm_aapcs_vfpcc void @vmovn32_trunc1_onesrc(<8 x i32> %src1, <8 x i16> *%dest) {
31 ; CHECK-LABEL: vmovn32_trunc1_onesrc:
32 ; CHECK: @ %bb.0: @ %entry
33 ; CHECK-NEXT: vmovnt.i32 q0, q1
34 ; CHECK-NEXT: vstrw.32 q0, [r0]
37 %strided.vec = shufflevector <8 x i32> %src1, <8 x i32> undef, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
38 %out = trunc <8 x i32> %strided.vec to <8 x i16>
39 store <8 x i16> %out, <8 x i16> *%dest, align 8
43 define arm_aapcs_vfpcc void @vmovn32_trunc2_onesrc(<8 x i32> %src1, <8 x i16> *%dest) {
44 ; CHECK-LABEL: vmovn32_trunc2_onesrc:
45 ; CHECK: @ %bb.0: @ %entry
46 ; CHECK-NEXT: vmovnt.i32 q1, q0
47 ; CHECK-NEXT: vstrw.32 q1, [r0]
50 %strided.vec = shufflevector <8 x i32> %src1, <8 x i32> undef, <8 x i32> <i32 4, i32 0, i32 5, i32 1, i32 6, i32 2, i32 7, i32 3>
51 %out = trunc <8 x i32> %strided.vec to <8 x i16>
52 store <8 x i16> %out, <8 x i16> *%dest, align 8
56 define arm_aapcs_vfpcc void @vmovn16_trunc1(<8 x i16> %src1, <8 x i16> %src2, <16 x i8> *%dest) {
57 ; CHECK-LABEL: vmovn16_trunc1:
58 ; CHECK: @ %bb.0: @ %entry
59 ; CHECK-NEXT: vmovnt.i16 q0, q1
60 ; CHECK-NEXT: vstrw.32 q0, [r0]
63 %strided.vec = shufflevector <8 x i16> %src1, <8 x i16> %src2, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
64 %out = trunc <16 x i16> %strided.vec to <16 x i8>
65 store <16 x i8> %out, <16 x i8> *%dest, align 8
69 define arm_aapcs_vfpcc void @vmovn16_trunc2(<8 x i16> %src1, <8 x i16> %src2, <16 x i8> *%dest) {
70 ; CHECK-LABEL: vmovn16_trunc2:
71 ; CHECK: @ %bb.0: @ %entry
72 ; CHECK-NEXT: vmovnt.i16 q1, q0
73 ; CHECK-NEXT: vstrw.32 q1, [r0]
76 %strided.vec = shufflevector <8 x i16> %src1, <8 x i16> %src2, <16 x i32> <i32 8, i32 0, i32 9, i32 1, i32 10, i32 2, i32 11, i32 3, i32 12, i32 4, i32 13, i32 5, i32 14, i32 6, i32 15, i32 7>
77 %out = trunc <16 x i16> %strided.vec to <16 x i8>
78 store <16 x i8> %out, <16 x i8> *%dest, align 8
82 define arm_aapcs_vfpcc void @vmovn16_trunc1_onesrc(<16 x i16> %src1, <16 x i8> *%dest) {
83 ; CHECK-LABEL: vmovn16_trunc1_onesrc:
84 ; CHECK: @ %bb.0: @ %entry
85 ; CHECK-NEXT: vmovnt.i16 q0, q1
86 ; CHECK-NEXT: vstrw.32 q0, [r0]
89 %strided.vec = shufflevector <16 x i16> %src1, <16 x i16> undef, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
90 %out = trunc <16 x i16> %strided.vec to <16 x i8>
91 store <16 x i8> %out, <16 x i8> *%dest, align 8
95 define arm_aapcs_vfpcc void @vmovn16_trunc2_onesrc(<16 x i16> %src1, <16 x i8> *%dest) {
96 ; CHECK-LABEL: vmovn16_trunc2_onesrc:
97 ; CHECK: @ %bb.0: @ %entry
98 ; CHECK-NEXT: vmovnt.i16 q1, q0
99 ; CHECK-NEXT: vstrw.32 q1, [r0]
102 %strided.vec = shufflevector <16 x i16> %src1, <16 x i16> undef, <16 x i32> <i32 8, i32 0, i32 9, i32 1, i32 10, i32 2, i32 11, i32 3, i32 12, i32 4, i32 13, i32 5, i32 14, i32 6, i32 15, i32 7>
103 %out = trunc <16 x i16> %strided.vec to <16 x i8>
104 store <16 x i8> %out, <16 x i8> *%dest, align 8
109 define arm_aapcs_vfpcc void @vmovn64_t1(<2 x i64> %src1, <2 x i64> %src2, <2 x i64> *%dest) {
110 ; CHECK-LABEL: vmovn64_t1:
111 ; CHECK: @ %bb.0: @ %entry
112 ; CHECK-NEXT: vmov.f32 s2, s4
113 ; CHECK-NEXT: vmov.f32 s3, s5
114 ; CHECK-NEXT: vstrw.32 q0, [r0]
117 %out = shufflevector <2 x i64> %src1, <2 x i64> %src2, <2 x i32> <i32 0, i32 2>
118 store <2 x i64> %out, <2 x i64> *%dest, align 8
122 define arm_aapcs_vfpcc void @vmovn64_t2(<2 x i64> %src1, <2 x i64> %src2, <2 x i64> *%dest) {
123 ; CHECK-LABEL: vmovn64_t2:
124 ; CHECK: @ %bb.0: @ %entry
125 ; CHECK-NEXT: vmov.f32 s6, s0
126 ; CHECK-NEXT: vmov.f32 s7, s1
127 ; CHECK-NEXT: vstrw.32 q1, [r0]
130 %out = shufflevector <2 x i64> %src1, <2 x i64> %src2, <2 x i32> <i32 2, i32 0>
131 store <2 x i64> %out, <2 x i64> *%dest, align 8
135 define arm_aapcs_vfpcc void @vmovn64_b1(<2 x i64> %src1, <2 x i64> %src2, <2 x i64> *%dest) {
136 ; CHECK-LABEL: vmovn64_b1:
137 ; CHECK: @ %bb.0: @ %entry
138 ; CHECK-NEXT: vmov.f32 s2, s6
139 ; CHECK-NEXT: vmov.f32 s3, s7
140 ; CHECK-NEXT: vstrw.32 q0, [r0]
143 %out = shufflevector <2 x i64> %src1, <2 x i64> %src2, <2 x i32> <i32 0, i32 3>
144 store <2 x i64> %out, <2 x i64> *%dest, align 8
148 define arm_aapcs_vfpcc void @vmovn64_b2(<2 x i64> %src1, <2 x i64> %src2, <2 x i64> *%dest) {
149 ; CHECK-LABEL: vmovn64_b2:
150 ; CHECK: @ %bb.0: @ %entry
151 ; CHECK-NEXT: vmov.f32 s4, s6
152 ; CHECK-NEXT: vmov.f32 s5, s7
153 ; CHECK-NEXT: vmov.f32 s6, s0
154 ; CHECK-NEXT: vmov.f32 s7, s1
155 ; CHECK-NEXT: vstrw.32 q1, [r0]
158 %out = shufflevector <2 x i64> %src1, <2 x i64> %src2, <2 x i32> <i32 3, i32 0>
159 store <2 x i64> %out, <2 x i64> *%dest, align 8
163 define arm_aapcs_vfpcc void @vmovn64_b3(<2 x i64> %src1, <2 x i64> %src2, <2 x i64> *%dest) {
164 ; CHECK-LABEL: vmovn64_b3:
165 ; CHECK: @ %bb.0: @ %entry
166 ; CHECK-NEXT: vmov.f32 s0, s2
167 ; CHECK-NEXT: vmov.f32 s1, s3
168 ; CHECK-NEXT: vmov.f32 s2, s4
169 ; CHECK-NEXT: vmov.f32 s3, s5
170 ; CHECK-NEXT: vstrw.32 q0, [r0]
173 %out = shufflevector <2 x i64> %src1, <2 x i64> %src2, <2 x i32> <i32 1, i32 2>
174 store <2 x i64> %out, <2 x i64> *%dest, align 8
178 define arm_aapcs_vfpcc void @vmovn64_b4(<2 x i64> %src1, <2 x i64> %src2, <2 x i64> *%dest) {
179 ; CHECK-LABEL: vmovn64_b4:
180 ; CHECK: @ %bb.0: @ %entry
181 ; CHECK-NEXT: vmov.f32 s6, s2
182 ; CHECK-NEXT: vmov.f32 s7, s3
183 ; CHECK-NEXT: vstrw.32 q1, [r0]
186 %out = shufflevector <2 x i64> %src1, <2 x i64> %src2, <2 x i32> <i32 2, i32 1>
187 store <2 x i64> %out, <2 x i64> *%dest, align 8
193 define arm_aapcs_vfpcc void @vmovn32_t1(<4 x i32> %src1, <4 x i32> %src2, <4 x i32> *%dest) {
194 ; CHECK-LABEL: vmovn32_t1:
195 ; CHECK: @ %bb.0: @ %entry
196 ; CHECK-NEXT: vmov.f32 s1, s4
197 ; CHECK-NEXT: vmov.f32 s3, s6
198 ; CHECK-NEXT: vstrw.32 q0, [r0]
201 %out = shufflevector <4 x i32> %src1, <4 x i32> %src2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>
202 store <4 x i32> %out, <4 x i32> *%dest, align 8
206 define arm_aapcs_vfpcc void @vmovn32_t2(<4 x i32> %src1, <4 x i32> %src2, <4 x i32> *%dest) {
207 ; CHECK-LABEL: vmovn32_t2:
208 ; CHECK: @ %bb.0: @ %entry
209 ; CHECK-NEXT: vmov.f32 s5, s0
210 ; CHECK-NEXT: vmov.f32 s7, s2
211 ; CHECK-NEXT: vstrw.32 q1, [r0]
214 %out = shufflevector <4 x i32> %src1, <4 x i32> %src2, <4 x i32> <i32 4, i32 0, i32 6, i32 2>
215 store <4 x i32> %out, <4 x i32> *%dest, align 8
219 define arm_aapcs_vfpcc void @vmovn32_b1(<4 x i32> %src1, <4 x i32> %src2, <4 x i32> *%dest) {
220 ; CHECK-LABEL: vmovn32_b1:
221 ; CHECK: @ %bb.0: @ %entry
222 ; CHECK-NEXT: vmov.f32 s1, s5
223 ; CHECK-NEXT: vmov.f32 s3, s7
224 ; CHECK-NEXT: vstrw.32 q0, [r0]
227 %out = shufflevector <4 x i32> %src1, <4 x i32> %src2, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
228 store <4 x i32> %out, <4 x i32> *%dest, align 8
232 define arm_aapcs_vfpcc void @vmovn32_b2(<4 x i32> %src1, <4 x i32> %src2, <4 x i32> *%dest) {
233 ; CHECK-LABEL: vmovn32_b2:
234 ; CHECK: @ %bb.0: @ %entry
235 ; CHECK-NEXT: vmov.f32 s4, s5
236 ; CHECK-NEXT: vmov.f32 s6, s7
237 ; CHECK-NEXT: vmov.f32 s5, s0
238 ; CHECK-NEXT: vmov.f32 s7, s2
239 ; CHECK-NEXT: vstrw.32 q1, [r0]
242 %out = shufflevector <4 x i32> %src1, <4 x i32> %src2, <4 x i32> <i32 5, i32 0, i32 7, i32 2>
243 store <4 x i32> %out, <4 x i32> *%dest, align 8
247 define arm_aapcs_vfpcc void @vmovn32_b3(<4 x i32> %src1, <4 x i32> %src2, <4 x i32> *%dest) {
248 ; CHECK-LABEL: vmovn32_b3:
249 ; CHECK: @ %bb.0: @ %entry
250 ; CHECK-NEXT: vmov.f32 s0, s1
251 ; CHECK-NEXT: vmov.f32 s2, s3
252 ; CHECK-NEXT: vmov.f32 s1, s4
253 ; CHECK-NEXT: vmov.f32 s3, s6
254 ; CHECK-NEXT: vstrw.32 q0, [r0]
257 %out = shufflevector <4 x i32> %src1, <4 x i32> %src2, <4 x i32> <i32 1, i32 4, i32 3, i32 6>
258 store <4 x i32> %out, <4 x i32> *%dest, align 8
262 define arm_aapcs_vfpcc void @vmovn32_b4(<4 x i32> %src1, <4 x i32> %src2, <4 x i32> *%dest) {
263 ; CHECK-LABEL: vmovn32_b4:
264 ; CHECK: @ %bb.0: @ %entry
265 ; CHECK-NEXT: vmov.f32 s5, s1
266 ; CHECK-NEXT: vmov.f32 s7, s3
267 ; CHECK-NEXT: vstrw.32 q1, [r0]
270 %out = shufflevector <4 x i32> %src1, <4 x i32> %src2, <4 x i32> <i32 4, i32 1, i32 6, i32 3>
271 store <4 x i32> %out, <4 x i32> *%dest, align 8
278 define arm_aapcs_vfpcc void @vmovn16_t1(<8 x i16> %src1, <8 x i16> %src2, <8 x i16> *%dest) {
279 ; CHECK-LABEL: vmovn16_t1:
280 ; CHECK: @ %bb.0: @ %entry
281 ; CHECK-NEXT: vmovnt.i32 q0, q1
282 ; CHECK-NEXT: vstrw.32 q0, [r0]
285 %out = shufflevector <8 x i16> %src1, <8 x i16> %src2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>
286 store <8 x i16> %out, <8 x i16> *%dest, align 8
290 define arm_aapcs_vfpcc void @vmovn16_t2(<8 x i16> %src1, <8 x i16> %src2, <8 x i16> *%dest) {
291 ; CHECK-LABEL: vmovn16_t2:
292 ; CHECK: @ %bb.0: @ %entry
293 ; CHECK-NEXT: vmovnt.i32 q1, q0
294 ; CHECK-NEXT: vstrw.32 q1, [r0]
297 %out = shufflevector <8 x i16> %src1, <8 x i16> %src2, <8 x i32> <i32 8, i32 0, i32 10, i32 2, i32 12, i32 4, i32 14, i32 6>
298 store <8 x i16> %out, <8 x i16> *%dest, align 8
302 define arm_aapcs_vfpcc void @vmovn16_b1(<8 x i16> %src1, <8 x i16> %src2, <8 x i16> *%dest) {
303 ; CHECK-LABEL: vmovn16_b1:
304 ; CHECK: @ %bb.0: @ %entry
305 ; CHECK-NEXT: vmovnb.i32 q1, q0
306 ; CHECK-NEXT: vstrw.32 q1, [r0]
309 %out = shufflevector <8 x i16> %src1, <8 x i16> %src2, <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15>
310 store <8 x i16> %out, <8 x i16> *%dest, align 8
314 define arm_aapcs_vfpcc void @vmovn16_b2(<8 x i16> %src1, <8 x i16> %src2, <8 x i16> *%dest) {
315 ; CHECK-LABEL: vmovn16_b2:
316 ; CHECK: @ %bb.0: @ %entry
317 ; CHECK-NEXT: vmovx.f16 s5, s5
318 ; CHECK-NEXT: vmovx.f16 s4, s4
319 ; CHECK-NEXT: vmovx.f16 s6, s6
320 ; CHECK-NEXT: vmovx.f16 s7, s7
321 ; CHECK-NEXT: vins.f16 s5, s1
322 ; CHECK-NEXT: vins.f16 s4, s0
323 ; CHECK-NEXT: vins.f16 s6, s2
324 ; CHECK-NEXT: vins.f16 s7, s3
325 ; CHECK-NEXT: vstrw.32 q1, [r0]
328 %out = shufflevector <8 x i16> %src1, <8 x i16> %src2, <8 x i32> <i32 9, i32 0, i32 11, i32 2, i32 13, i32 4, i32 15, i32 6>
329 store <8 x i16> %out, <8 x i16> *%dest, align 8
333 define arm_aapcs_vfpcc void @vmovn16_b3(<8 x i16> %src1, <8 x i16> %src2, <8 x i16> *%dest) {
334 ; CHECK-LABEL: vmovn16_b3:
335 ; CHECK: @ %bb.0: @ %entry
336 ; CHECK-NEXT: vmovx.f16 s1, s1
337 ; CHECK-NEXT: vmovx.f16 s0, s0
338 ; CHECK-NEXT: vmovx.f16 s2, s2
339 ; CHECK-NEXT: vmovx.f16 s3, s3
340 ; CHECK-NEXT: vins.f16 s1, s5
341 ; CHECK-NEXT: vins.f16 s0, s4
342 ; CHECK-NEXT: vins.f16 s2, s6
343 ; CHECK-NEXT: vins.f16 s3, s7
344 ; CHECK-NEXT: vstrw.32 q0, [r0]
347 %out = shufflevector <8 x i16> %src1, <8 x i16> %src2, <8 x i32> <i32 1, i32 8, i32 3, i32 10, i32 5, i32 12, i32 7, i32 14>
348 store <8 x i16> %out, <8 x i16> *%dest, align 8
352 define arm_aapcs_vfpcc void @vmovn16_b4(<8 x i16> %src1, <8 x i16> %src2, <8 x i16> *%dest) {
353 ; CHECK-LABEL: vmovn16_b4:
354 ; CHECK: @ %bb.0: @ %entry
355 ; CHECK-NEXT: vmovnb.i32 q0, q1
356 ; CHECK-NEXT: vstrw.32 q0, [r0]
359 %out = shufflevector <8 x i16> %src1, <8 x i16> %src2, <8 x i32> <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>
360 store <8 x i16> %out, <8 x i16> *%dest, align 8
365 define arm_aapcs_vfpcc void @vmovn8_b1(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> *%dest) {
366 ; CHECK-LABEL: vmovn8_b1:
367 ; CHECK: @ %bb.0: @ %entry
368 ; CHECK-NEXT: vmovnt.i16 q0, q1
369 ; CHECK-NEXT: vstrw.32 q0, [r0]
372 %out = shufflevector <16 x i8> %src1, <16 x i8> %src2, <16 x i32> <i32 0, i32 16, i32 2, i32 18, i32 4, i32 20, i32 6, i32 22, i32 8, i32 24, i32 10, i32 26, i32 12, i32 28, i32 14, i32 30>
373 store <16 x i8> %out, <16 x i8> *%dest, align 8
377 define arm_aapcs_vfpcc void @vmovn8_b2(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> *%dest) {
378 ; CHECK-LABEL: vmovn8_b2:
379 ; CHECK: @ %bb.0: @ %entry
380 ; CHECK-NEXT: vmovnt.i16 q1, q0
381 ; CHECK-NEXT: vstrw.32 q1, [r0]
384 %out = shufflevector <16 x i8> %src1, <16 x i8> %src2, <16 x i32> <i32 16, i32 0, i32 18, i32 2, i32 20, i32 4, i32 22, i32 6, i32 24, i32 8, i32 26, i32 10, i32 28, i32 12, i32 30, i32 14>
385 store <16 x i8> %out, <16 x i8> *%dest, align 8
389 define arm_aapcs_vfpcc void @vmovn8_t1(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> *%dest) {
390 ; CHECK-LABEL: vmovn8_t1:
391 ; CHECK: @ %bb.0: @ %entry
392 ; CHECK-NEXT: vmovnb.i16 q1, q0
393 ; CHECK-NEXT: vstrw.32 q1, [r0]
396 %out = shufflevector <16 x i8> %src1, <16 x i8> %src2, <16 x i32> <i32 0, i32 17, i32 2, i32 19, i32 4, i32 21, i32 6, i32 23, i32 8, i32 25, i32 10, i32 27, i32 12, i32 29, i32 14, i32 31>
397 store <16 x i8> %out, <16 x i8> *%dest, align 8
401 define arm_aapcs_vfpcc void @vmovn8_t2(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> *%dest) {
402 ; CHECK-LABEL: vmovn8_t2:
403 ; CHECK: @ %bb.0: @ %entry
404 ; CHECK-NEXT: vmov.u8 r1, q1[1]
405 ; CHECK-NEXT: vmov.8 q2[0], r1
406 ; CHECK-NEXT: vmov.u8 r1, q0[0]
407 ; CHECK-NEXT: vmov.8 q2[1], r1
408 ; CHECK-NEXT: vmov.u8 r1, q1[3]
409 ; CHECK-NEXT: vmov.8 q2[2], r1
410 ; CHECK-NEXT: vmov.u8 r1, q0[2]
411 ; CHECK-NEXT: vmov.8 q2[3], r1
412 ; CHECK-NEXT: vmov.u8 r1, q1[5]
413 ; CHECK-NEXT: vmov.8 q2[4], r1
414 ; CHECK-NEXT: vmov.u8 r1, q0[4]
415 ; CHECK-NEXT: vmov.8 q2[5], r1
416 ; CHECK-NEXT: vmov.u8 r1, q1[7]
417 ; CHECK-NEXT: vmov.8 q2[6], r1
418 ; CHECK-NEXT: vmov.u8 r1, q0[6]
419 ; CHECK-NEXT: vmov.8 q2[7], r1
420 ; CHECK-NEXT: vmov.u8 r1, q1[9]
421 ; CHECK-NEXT: vmov.8 q2[8], r1
422 ; CHECK-NEXT: vmov.u8 r1, q0[8]
423 ; CHECK-NEXT: vmov.8 q2[9], r1
424 ; CHECK-NEXT: vmov.u8 r1, q1[11]
425 ; CHECK-NEXT: vmov.8 q2[10], r1
426 ; CHECK-NEXT: vmov.u8 r1, q0[10]
427 ; CHECK-NEXT: vmov.8 q2[11], r1
428 ; CHECK-NEXT: vmov.u8 r1, q1[13]
429 ; CHECK-NEXT: vmov.8 q2[12], r1
430 ; CHECK-NEXT: vmov.u8 r1, q0[12]
431 ; CHECK-NEXT: vmov.8 q2[13], r1
432 ; CHECK-NEXT: vmov.u8 r1, q1[15]
433 ; CHECK-NEXT: vmov.8 q2[14], r1
434 ; CHECK-NEXT: vmov.u8 r1, q0[14]
435 ; CHECK-NEXT: vmov.8 q2[15], r1
436 ; CHECK-NEXT: vstrw.32 q2, [r0]
439 %out = shufflevector <16 x i8> %src1, <16 x i8> %src2, <16 x i32> <i32 17, i32 0, i32 19, i32 2, i32 21, i32 4, i32 23, i32 6, i32 25, i32 8, i32 27, i32 10, i32 29, i32 12, i32 31, i32 14>
440 store <16 x i8> %out, <16 x i8> *%dest, align 8
444 define arm_aapcs_vfpcc void @vmovn8_t3(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> *%dest) {
445 ; CHECK-LABEL: vmovn8_t3:
446 ; CHECK: @ %bb.0: @ %entry
447 ; CHECK-NEXT: vmov.u8 r1, q0[1]
448 ; CHECK-NEXT: vmov.8 q2[0], r1
449 ; CHECK-NEXT: vmov.u8 r1, q1[0]
450 ; CHECK-NEXT: vmov.8 q2[1], r1
451 ; CHECK-NEXT: vmov.u8 r1, q0[3]
452 ; CHECK-NEXT: vmov.8 q2[2], r1
453 ; CHECK-NEXT: vmov.u8 r1, q1[2]
454 ; CHECK-NEXT: vmov.8 q2[3], r1
455 ; CHECK-NEXT: vmov.u8 r1, q0[5]
456 ; CHECK-NEXT: vmov.8 q2[4], r1
457 ; CHECK-NEXT: vmov.u8 r1, q1[4]
458 ; CHECK-NEXT: vmov.8 q2[5], r1
459 ; CHECK-NEXT: vmov.u8 r1, q0[7]
460 ; CHECK-NEXT: vmov.8 q2[6], r1
461 ; CHECK-NEXT: vmov.u8 r1, q1[6]
462 ; CHECK-NEXT: vmov.8 q2[7], r1
463 ; CHECK-NEXT: vmov.u8 r1, q0[9]
464 ; CHECK-NEXT: vmov.8 q2[8], r1
465 ; CHECK-NEXT: vmov.u8 r1, q1[8]
466 ; CHECK-NEXT: vmov.8 q2[9], r1
467 ; CHECK-NEXT: vmov.u8 r1, q0[11]
468 ; CHECK-NEXT: vmov.8 q2[10], r1
469 ; CHECK-NEXT: vmov.u8 r1, q1[10]
470 ; CHECK-NEXT: vmov.8 q2[11], r1
471 ; CHECK-NEXT: vmov.u8 r1, q0[13]
472 ; CHECK-NEXT: vmov.8 q2[12], r1
473 ; CHECK-NEXT: vmov.u8 r1, q1[12]
474 ; CHECK-NEXT: vmov.8 q2[13], r1
475 ; CHECK-NEXT: vmov.u8 r1, q0[15]
476 ; CHECK-NEXT: vmov.8 q2[14], r1
477 ; CHECK-NEXT: vmov.u8 r1, q1[14]
478 ; CHECK-NEXT: vmov.8 q2[15], r1
479 ; CHECK-NEXT: vstrw.32 q2, [r0]
482 %out = shufflevector <16 x i8> %src1, <16 x i8> %src2, <16 x i32> <i32 1, i32 16, i32 3, i32 18, i32 5, i32 20, i32 7, i32 22, i32 9, i32 24, i32 11, i32 26, i32 13, i32 28, i32 15, i32 30>
483 store <16 x i8> %out, <16 x i8> *%dest, align 8
487 define arm_aapcs_vfpcc void @vmovn8_t4(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> *%dest) {
488 ; CHECK-LABEL: vmovn8_t4:
489 ; CHECK: @ %bb.0: @ %entry
490 ; CHECK-NEXT: vmovnb.i16 q0, q1
491 ; CHECK-NEXT: vstrw.32 q0, [r0]
494 %out = shufflevector <16 x i8> %src1, <16 x i8> %src2, <16 x i32> <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15>
495 store <16 x i8> %out, <16 x i8> *%dest, align 8