1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s
4 define arm_aapcs_vfpcc <8 x i16> @sext_v8i8_v8i16(<8 x i8> %src) {
5 ; CHECK-LABEL: sext_v8i8_v8i16:
6 ; CHECK: @ %bb.0: @ %entry
7 ; CHECK-NEXT: vmovlb.s8 q0, q0
10 %0 = sext <8 x i8> %src to <8 x i16>
14 define arm_aapcs_vfpcc <4 x i32> @sext_v4i16_v4i32(<4 x i16> %src) {
15 ; CHECK-LABEL: sext_v4i16_v4i32:
16 ; CHECK: @ %bb.0: @ %entry
17 ; CHECK-NEXT: vmovlb.s16 q0, q0
20 %0 = sext <4 x i16> %src to <4 x i32>
24 define arm_aapcs_vfpcc <4 x i32> @sext_v4i8_v4i32(<4 x i8> %src) {
25 ; CHECK-LABEL: sext_v4i8_v4i32:
26 ; CHECK: @ %bb.0: @ %entry
27 ; CHECK-NEXT: vmovlb.s8 q0, q0
28 ; CHECK-NEXT: vmovlb.s16 q0, q0
31 %0 = sext <4 x i8> %src to <4 x i32>
35 define arm_aapcs_vfpcc <16 x i16> @sext_v16i8_v16i16(<16 x i8> %src) {
36 ; CHECK-LABEL: sext_v16i8_v16i16:
37 ; CHECK: @ %bb.0: @ %entry
38 ; CHECK-NEXT: vmov.u8 r0, q0[0]
39 ; CHECK-NEXT: vmov.16 q1[0], r0
40 ; CHECK-NEXT: vmov.u8 r0, q0[1]
41 ; CHECK-NEXT: vmov.16 q1[1], r0
42 ; CHECK-NEXT: vmov.u8 r0, q0[2]
43 ; CHECK-NEXT: vmov.16 q1[2], r0
44 ; CHECK-NEXT: vmov.u8 r0, q0[3]
45 ; CHECK-NEXT: vmov.16 q1[3], r0
46 ; CHECK-NEXT: vmov.u8 r0, q0[4]
47 ; CHECK-NEXT: vmov.16 q1[4], r0
48 ; CHECK-NEXT: vmov.u8 r0, q0[5]
49 ; CHECK-NEXT: vmov.16 q1[5], r0
50 ; CHECK-NEXT: vmov.u8 r0, q0[6]
51 ; CHECK-NEXT: vmov.16 q1[6], r0
52 ; CHECK-NEXT: vmov.u8 r0, q0[7]
53 ; CHECK-NEXT: vmov.16 q1[7], r0
54 ; CHECK-NEXT: vmov.u8 r0, q0[8]
55 ; CHECK-NEXT: vmovlb.s8 q2, q1
56 ; CHECK-NEXT: vmov.16 q1[0], r0
57 ; CHECK-NEXT: vmov.u8 r0, q0[9]
58 ; CHECK-NEXT: vmov.16 q1[1], r0
59 ; CHECK-NEXT: vmov.u8 r0, q0[10]
60 ; CHECK-NEXT: vmov.16 q1[2], r0
61 ; CHECK-NEXT: vmov.u8 r0, q0[11]
62 ; CHECK-NEXT: vmov.16 q1[3], r0
63 ; CHECK-NEXT: vmov.u8 r0, q0[12]
64 ; CHECK-NEXT: vmov.16 q1[4], r0
65 ; CHECK-NEXT: vmov.u8 r0, q0[13]
66 ; CHECK-NEXT: vmov.16 q1[5], r0
67 ; CHECK-NEXT: vmov.u8 r0, q0[14]
68 ; CHECK-NEXT: vmov.16 q1[6], r0
69 ; CHECK-NEXT: vmov.u8 r0, q0[15]
70 ; CHECK-NEXT: vmov.16 q1[7], r0
71 ; CHECK-NEXT: vmov q0, q2
72 ; CHECK-NEXT: vmovlb.s8 q1, q1
75 %0 = sext <16 x i8> %src to <16 x i16>
79 define arm_aapcs_vfpcc <8 x i32> @sext_v8i16_v8i32(<8 x i16> %src) {
80 ; CHECK-LABEL: sext_v8i16_v8i32:
81 ; CHECK: @ %bb.0: @ %entry
82 ; CHECK-NEXT: vmov.u16 r0, q0[0]
83 ; CHECK-NEXT: vmov.32 q1[0], r0
84 ; CHECK-NEXT: vmov.u16 r0, q0[1]
85 ; CHECK-NEXT: vmov.32 q1[1], r0
86 ; CHECK-NEXT: vmov.u16 r0, q0[2]
87 ; CHECK-NEXT: vmov.32 q1[2], r0
88 ; CHECK-NEXT: vmov.u16 r0, q0[3]
89 ; CHECK-NEXT: vmov.32 q1[3], r0
90 ; CHECK-NEXT: vmov.u16 r0, q0[4]
91 ; CHECK-NEXT: vmovlb.s16 q2, q1
92 ; CHECK-NEXT: vmov.32 q1[0], r0
93 ; CHECK-NEXT: vmov.u16 r0, q0[5]
94 ; CHECK-NEXT: vmov.32 q1[1], r0
95 ; CHECK-NEXT: vmov.u16 r0, q0[6]
96 ; CHECK-NEXT: vmov.32 q1[2], r0
97 ; CHECK-NEXT: vmov.u16 r0, q0[7]
98 ; CHECK-NEXT: vmov.32 q1[3], r0
99 ; CHECK-NEXT: vmov q0, q2
100 ; CHECK-NEXT: vmovlb.s16 q1, q1
103 %0 = sext <8 x i16> %src to <8 x i32>
107 define arm_aapcs_vfpcc <16 x i32> @sext_v16i8_v16i32(<16 x i8> %src) {
108 ; CHECK-LABEL: sext_v16i8_v16i32:
109 ; CHECK: @ %bb.0: @ %entry
110 ; CHECK-NEXT: .vsave {d8, d9}
111 ; CHECK-NEXT: vpush {d8, d9}
112 ; CHECK-NEXT: vmov.u8 r0, q0[0]
113 ; CHECK-NEXT: vmov.32 q1[0], r0
114 ; CHECK-NEXT: vmov.u8 r0, q0[1]
115 ; CHECK-NEXT: vmov.32 q1[1], r0
116 ; CHECK-NEXT: vmov.u8 r0, q0[2]
117 ; CHECK-NEXT: vmov.32 q1[2], r0
118 ; CHECK-NEXT: vmov.u8 r0, q0[3]
119 ; CHECK-NEXT: vmov.32 q1[3], r0
120 ; CHECK-NEXT: vmov.u8 r0, q0[4]
121 ; CHECK-NEXT: vmovlb.s8 q1, q1
122 ; CHECK-NEXT: vmovlb.s16 q4, q1
123 ; CHECK-NEXT: vmov.32 q1[0], r0
124 ; CHECK-NEXT: vmov.u8 r0, q0[5]
125 ; CHECK-NEXT: vmov.32 q1[1], r0
126 ; CHECK-NEXT: vmov.u8 r0, q0[6]
127 ; CHECK-NEXT: vmov.32 q1[2], r0
128 ; CHECK-NEXT: vmov.u8 r0, q0[7]
129 ; CHECK-NEXT: vmov.32 q1[3], r0
130 ; CHECK-NEXT: vmov.u8 r0, q0[8]
131 ; CHECK-NEXT: vmov.32 q2[0], r0
132 ; CHECK-NEXT: vmov.u8 r0, q0[9]
133 ; CHECK-NEXT: vmov.32 q2[1], r0
134 ; CHECK-NEXT: vmov.u8 r0, q0[10]
135 ; CHECK-NEXT: vmov.32 q2[2], r0
136 ; CHECK-NEXT: vmov.u8 r0, q0[11]
137 ; CHECK-NEXT: vmov.32 q2[3], r0
138 ; CHECK-NEXT: vmov.u8 r0, q0[12]
139 ; CHECK-NEXT: vmov.32 q3[0], r0
140 ; CHECK-NEXT: vmov.u8 r0, q0[13]
141 ; CHECK-NEXT: vmov.32 q3[1], r0
142 ; CHECK-NEXT: vmov.u8 r0, q0[14]
143 ; CHECK-NEXT: vmov.32 q3[2], r0
144 ; CHECK-NEXT: vmov.u8 r0, q0[15]
145 ; CHECK-NEXT: vmov.32 q3[3], r0
146 ; CHECK-NEXT: vmovlb.s8 q1, q1
147 ; CHECK-NEXT: vmovlb.s8 q2, q2
148 ; CHECK-NEXT: vmovlb.s8 q0, q3
149 ; CHECK-NEXT: vmovlb.s16 q3, q0
150 ; CHECK-NEXT: vmovlb.s16 q1, q1
151 ; CHECK-NEXT: vmovlb.s16 q2, q2
152 ; CHECK-NEXT: vmov q0, q4
153 ; CHECK-NEXT: vpop {d8, d9}
156 %0 = sext <16 x i8> %src to <16 x i32>
160 define arm_aapcs_vfpcc <2 x i64> @sext_v2i32_v2i64(<2 x i32> %src) {
161 ; CHECK-LABEL: sext_v2i32_v2i64:
162 ; CHECK: @ %bb.0: @ %entry
163 ; CHECK-NEXT: vmov r0, s0
164 ; CHECK-NEXT: vmov.32 q1[0], r0
165 ; CHECK-NEXT: asrs r0, r0, #31
166 ; CHECK-NEXT: vmov.32 q1[1], r0
167 ; CHECK-NEXT: vmov r0, s2
168 ; CHECK-NEXT: vmov.32 q1[2], r0
169 ; CHECK-NEXT: asrs r0, r0, #31
170 ; CHECK-NEXT: vmov.32 q1[3], r0
171 ; CHECK-NEXT: vmov q0, q1
174 %0 = sext <2 x i32> %src to <2 x i64>
179 define arm_aapcs_vfpcc <8 x i16> @zext_v8i8_v8i16(<8 x i8> %src) {
180 ; CHECK-LABEL: zext_v8i8_v8i16:
181 ; CHECK: @ %bb.0: @ %entry
182 ; CHECK-NEXT: vmovlb.u8 q0, q0
185 %0 = zext <8 x i8> %src to <8 x i16>
189 define arm_aapcs_vfpcc <4 x i32> @zext_v4i16_v4i32(<4 x i16> %src) {
190 ; CHECK-LABEL: zext_v4i16_v4i32:
191 ; CHECK: @ %bb.0: @ %entry
192 ; CHECK-NEXT: vmovlb.u16 q0, q0
195 %0 = zext <4 x i16> %src to <4 x i32>
199 define arm_aapcs_vfpcc <4 x i32> @zext_v4i8_v4i32(<4 x i8> %src) {
200 ; CHECK-LABEL: zext_v4i8_v4i32:
201 ; CHECK: @ %bb.0: @ %entry
202 ; CHECK-NEXT: vmov.i32 q1, #0xff
203 ; CHECK-NEXT: vand q0, q0, q1
206 %0 = zext <4 x i8> %src to <4 x i32>
210 define arm_aapcs_vfpcc <16 x i16> @zext_v16i8_v16i16(<16 x i8> %src) {
211 ; CHECK-LABEL: zext_v16i8_v16i16:
212 ; CHECK: @ %bb.0: @ %entry
213 ; CHECK-NEXT: vmov.u8 r0, q0[0]
214 ; CHECK-NEXT: vmov.16 q1[0], r0
215 ; CHECK-NEXT: vmov.u8 r0, q0[1]
216 ; CHECK-NEXT: vmov.16 q1[1], r0
217 ; CHECK-NEXT: vmov.u8 r0, q0[2]
218 ; CHECK-NEXT: vmov.16 q1[2], r0
219 ; CHECK-NEXT: vmov.u8 r0, q0[3]
220 ; CHECK-NEXT: vmov.16 q1[3], r0
221 ; CHECK-NEXT: vmov.u8 r0, q0[4]
222 ; CHECK-NEXT: vmov.16 q1[4], r0
223 ; CHECK-NEXT: vmov.u8 r0, q0[5]
224 ; CHECK-NEXT: vmov.16 q1[5], r0
225 ; CHECK-NEXT: vmov.u8 r0, q0[6]
226 ; CHECK-NEXT: vmov.16 q1[6], r0
227 ; CHECK-NEXT: vmov.u8 r0, q0[7]
228 ; CHECK-NEXT: vmov.16 q1[7], r0
229 ; CHECK-NEXT: vmov.u8 r0, q0[8]
230 ; CHECK-NEXT: vmovlb.u8 q2, q1
231 ; CHECK-NEXT: vmov.16 q1[0], r0
232 ; CHECK-NEXT: vmov.u8 r0, q0[9]
233 ; CHECK-NEXT: vmov.16 q1[1], r0
234 ; CHECK-NEXT: vmov.u8 r0, q0[10]
235 ; CHECK-NEXT: vmov.16 q1[2], r0
236 ; CHECK-NEXT: vmov.u8 r0, q0[11]
237 ; CHECK-NEXT: vmov.16 q1[3], r0
238 ; CHECK-NEXT: vmov.u8 r0, q0[12]
239 ; CHECK-NEXT: vmov.16 q1[4], r0
240 ; CHECK-NEXT: vmov.u8 r0, q0[13]
241 ; CHECK-NEXT: vmov.16 q1[5], r0
242 ; CHECK-NEXT: vmov.u8 r0, q0[14]
243 ; CHECK-NEXT: vmov.16 q1[6], r0
244 ; CHECK-NEXT: vmov.u8 r0, q0[15]
245 ; CHECK-NEXT: vmov.16 q1[7], r0
246 ; CHECK-NEXT: vmov q0, q2
247 ; CHECK-NEXT: vmovlb.u8 q1, q1
250 %0 = zext <16 x i8> %src to <16 x i16>
254 define arm_aapcs_vfpcc <8 x i32> @zext_v8i16_v8i32(<8 x i16> %src) {
255 ; CHECK-LABEL: zext_v8i16_v8i32:
256 ; CHECK: @ %bb.0: @ %entry
257 ; CHECK-NEXT: vmov.u16 r0, q0[0]
258 ; CHECK-NEXT: vmov.32 q1[0], r0
259 ; CHECK-NEXT: vmov.u16 r0, q0[1]
260 ; CHECK-NEXT: vmov.32 q1[1], r0
261 ; CHECK-NEXT: vmov.u16 r0, q0[2]
262 ; CHECK-NEXT: vmov.32 q1[2], r0
263 ; CHECK-NEXT: vmov.u16 r0, q0[3]
264 ; CHECK-NEXT: vmov.32 q1[3], r0
265 ; CHECK-NEXT: vmov.u16 r0, q0[4]
266 ; CHECK-NEXT: vmovlb.u16 q2, q1
267 ; CHECK-NEXT: vmov.32 q1[0], r0
268 ; CHECK-NEXT: vmov.u16 r0, q0[5]
269 ; CHECK-NEXT: vmov.32 q1[1], r0
270 ; CHECK-NEXT: vmov.u16 r0, q0[6]
271 ; CHECK-NEXT: vmov.32 q1[2], r0
272 ; CHECK-NEXT: vmov.u16 r0, q0[7]
273 ; CHECK-NEXT: vmov.32 q1[3], r0
274 ; CHECK-NEXT: vmov q0, q2
275 ; CHECK-NEXT: vmovlb.u16 q1, q1
278 %0 = zext <8 x i16> %src to <8 x i32>
282 define arm_aapcs_vfpcc <16 x i32> @zext_v16i8_v16i32(<16 x i8> %src) {
283 ; CHECK-LABEL: zext_v16i8_v16i32:
284 ; CHECK: @ %bb.0: @ %entry
285 ; CHECK-NEXT: .vsave {d8, d9, d10, d11}
286 ; CHECK-NEXT: vpush {d8, d9, d10, d11}
287 ; CHECK-NEXT: vmov.u8 r0, q0[0]
288 ; CHECK-NEXT: vmov.i32 q3, #0xff
289 ; CHECK-NEXT: vmov.32 q1[0], r0
290 ; CHECK-NEXT: vmov.u8 r0, q0[1]
291 ; CHECK-NEXT: vmov.32 q1[1], r0
292 ; CHECK-NEXT: vmov.u8 r0, q0[2]
293 ; CHECK-NEXT: vmov.32 q1[2], r0
294 ; CHECK-NEXT: vmov.u8 r0, q0[3]
295 ; CHECK-NEXT: vmov.32 q1[3], r0
296 ; CHECK-NEXT: vmov.u8 r0, q0[4]
297 ; CHECK-NEXT: vand q4, q1, q3
298 ; CHECK-NEXT: vmov.32 q1[0], r0
299 ; CHECK-NEXT: vmov.u8 r0, q0[5]
300 ; CHECK-NEXT: vmov.32 q1[1], r0
301 ; CHECK-NEXT: vmov.u8 r0, q0[6]
302 ; CHECK-NEXT: vmov.32 q1[2], r0
303 ; CHECK-NEXT: vmov.u8 r0, q0[7]
304 ; CHECK-NEXT: vmov.32 q1[3], r0
305 ; CHECK-NEXT: vmov.u8 r0, q0[8]
306 ; CHECK-NEXT: vmov.32 q2[0], r0
307 ; CHECK-NEXT: vmov.u8 r0, q0[9]
308 ; CHECK-NEXT: vmov.32 q2[1], r0
309 ; CHECK-NEXT: vmov.u8 r0, q0[10]
310 ; CHECK-NEXT: vmov.32 q2[2], r0
311 ; CHECK-NEXT: vmov.u8 r0, q0[11]
312 ; CHECK-NEXT: vmov.32 q2[3], r0
313 ; CHECK-NEXT: vmov.u8 r0, q0[12]
314 ; CHECK-NEXT: vmov.32 q5[0], r0
315 ; CHECK-NEXT: vmov.u8 r0, q0[13]
316 ; CHECK-NEXT: vmov.32 q5[1], r0
317 ; CHECK-NEXT: vmov.u8 r0, q0[14]
318 ; CHECK-NEXT: vmov.32 q5[2], r0
319 ; CHECK-NEXT: vmov.u8 r0, q0[15]
320 ; CHECK-NEXT: vmov.32 q5[3], r0
321 ; CHECK-NEXT: vand q1, q1, q3
322 ; CHECK-NEXT: vand q2, q2, q3
323 ; CHECK-NEXT: vand q3, q5, q3
324 ; CHECK-NEXT: vmov q0, q4
325 ; CHECK-NEXT: vpop {d8, d9, d10, d11}
328 %0 = zext <16 x i8> %src to <16 x i32>
332 define arm_aapcs_vfpcc <2 x i64> @zext_v2i32_v2i64(<2 x i32> %src) {
333 ; CHECK-LABEL: zext_v2i32_v2i64:
334 ; CHECK: @ %bb.0: @ %entry
335 ; CHECK-NEXT: adr r0, .LCPI13_0
336 ; CHECK-NEXT: vldrw.u32 q1, [r0]
337 ; CHECK-NEXT: vand q0, q0, q1
339 ; CHECK-NEXT: .p2align 4
340 ; CHECK-NEXT: @ %bb.1:
341 ; CHECK-NEXT: .LCPI13_0:
342 ; CHECK-NEXT: .long 4294967295 @ 0xffffffff
343 ; CHECK-NEXT: .long 0 @ 0x0
344 ; CHECK-NEXT: .long 4294967295 @ 0xffffffff
345 ; CHECK-NEXT: .long 0 @ 0x0
347 %0 = zext <2 x i32> %src to <2 x i64>
352 define arm_aapcs_vfpcc <8 x i8> @trunc_v8i16_v8i8(<8 x i16> %src) {
353 ; CHECK-LABEL: trunc_v8i16_v8i8:
354 ; CHECK: @ %bb.0: @ %entry
357 %0 = trunc <8 x i16> %src to <8 x i8>
361 define arm_aapcs_vfpcc <4 x i16> @trunc_v4i32_v4i16(<4 x i32> %src) {
362 ; CHECK-LABEL: trunc_v4i32_v4i16:
363 ; CHECK: @ %bb.0: @ %entry
366 %0 = trunc <4 x i32> %src to <4 x i16>
370 define arm_aapcs_vfpcc <4 x i8> @trunc_v4i32_v4i8(<4 x i32> %src) {
371 ; CHECK-LABEL: trunc_v4i32_v4i8:
372 ; CHECK: @ %bb.0: @ %entry
375 %0 = trunc <4 x i32> %src to <4 x i8>
379 define arm_aapcs_vfpcc <16 x i8> @trunc_v16i16_v16i8(<16 x i16> %src) {
380 ; CHECK-LABEL: trunc_v16i16_v16i8:
381 ; CHECK: @ %bb.0: @ %entry
382 ; CHECK-NEXT: vmov q2, q0
383 ; CHECK-NEXT: vmov.u16 r0, q0[0]
384 ; CHECK-NEXT: vmov.8 q0[0], r0
385 ; CHECK-NEXT: vmov.u16 r0, q2[1]
386 ; CHECK-NEXT: vmov.8 q0[1], r0
387 ; CHECK-NEXT: vmov.u16 r0, q2[2]
388 ; CHECK-NEXT: vmov.8 q0[2], r0
389 ; CHECK-NEXT: vmov.u16 r0, q2[3]
390 ; CHECK-NEXT: vmov.8 q0[3], r0
391 ; CHECK-NEXT: vmov.u16 r0, q2[4]
392 ; CHECK-NEXT: vmov.8 q0[4], r0
393 ; CHECK-NEXT: vmov.u16 r0, q2[5]
394 ; CHECK-NEXT: vmov.8 q0[5], r0
395 ; CHECK-NEXT: vmov.u16 r0, q2[6]
396 ; CHECK-NEXT: vmov.8 q0[6], r0
397 ; CHECK-NEXT: vmov.u16 r0, q2[7]
398 ; CHECK-NEXT: vmov.8 q0[7], r0
399 ; CHECK-NEXT: vmov.u16 r0, q1[0]
400 ; CHECK-NEXT: vmov.8 q0[8], r0
401 ; CHECK-NEXT: vmov.u16 r0, q1[1]
402 ; CHECK-NEXT: vmov.8 q0[9], r0
403 ; CHECK-NEXT: vmov.u16 r0, q1[2]
404 ; CHECK-NEXT: vmov.8 q0[10], r0
405 ; CHECK-NEXT: vmov.u16 r0, q1[3]
406 ; CHECK-NEXT: vmov.8 q0[11], r0
407 ; CHECK-NEXT: vmov.u16 r0, q1[4]
408 ; CHECK-NEXT: vmov.8 q0[12], r0
409 ; CHECK-NEXT: vmov.u16 r0, q1[5]
410 ; CHECK-NEXT: vmov.8 q0[13], r0
411 ; CHECK-NEXT: vmov.u16 r0, q1[6]
412 ; CHECK-NEXT: vmov.8 q0[14], r0
413 ; CHECK-NEXT: vmov.u16 r0, q1[7]
414 ; CHECK-NEXT: vmov.8 q0[15], r0
417 %0 = trunc <16 x i16> %src to <16 x i8>
421 define arm_aapcs_vfpcc <8 x i16> @trunc_v8i32_v8i16(<8 x i32> %src) {
422 ; CHECK-LABEL: trunc_v8i32_v8i16:
423 ; CHECK: @ %bb.0: @ %entry
424 ; CHECK-NEXT: vmov q2, q0
425 ; CHECK-NEXT: vmov r0, s8
426 ; CHECK-NEXT: vmov.16 q0[0], r0
427 ; CHECK-NEXT: vmov r0, s9
428 ; CHECK-NEXT: vmov.16 q0[1], r0
429 ; CHECK-NEXT: vmov r0, s10
430 ; CHECK-NEXT: vmov.16 q0[2], r0
431 ; CHECK-NEXT: vmov r0, s11
432 ; CHECK-NEXT: vmov.16 q0[3], r0
433 ; CHECK-NEXT: vmov r0, s4
434 ; CHECK-NEXT: vmov.16 q0[4], r0
435 ; CHECK-NEXT: vmov r0, s5
436 ; CHECK-NEXT: vmov.16 q0[5], r0
437 ; CHECK-NEXT: vmov r0, s6
438 ; CHECK-NEXT: vmov.16 q0[6], r0
439 ; CHECK-NEXT: vmov r0, s7
440 ; CHECK-NEXT: vmov.16 q0[7], r0
443 %0 = trunc <8 x i32> %src to <8 x i16>
447 define arm_aapcs_vfpcc <16 x i8> @trunc_v16i32_v16i8(<16 x i32> %src) {
448 ; CHECK-LABEL: trunc_v16i32_v16i8:
449 ; CHECK: @ %bb.0: @ %entry
450 ; CHECK-NEXT: .vsave {d8, d9}
451 ; CHECK-NEXT: vpush {d8, d9}
452 ; CHECK-NEXT: vmov q4, q0
453 ; CHECK-NEXT: vmov r0, s16
454 ; CHECK-NEXT: vmov.8 q0[0], r0
455 ; CHECK-NEXT: vmov r0, s17
456 ; CHECK-NEXT: vmov.8 q0[1], r0
457 ; CHECK-NEXT: vmov r0, s18
458 ; CHECK-NEXT: vmov.8 q0[2], r0
459 ; CHECK-NEXT: vmov r0, s19
460 ; CHECK-NEXT: vmov.8 q0[3], r0
461 ; CHECK-NEXT: vmov r0, s4
462 ; CHECK-NEXT: vmov.8 q0[4], r0
463 ; CHECK-NEXT: vmov r0, s5
464 ; CHECK-NEXT: vmov.8 q0[5], r0
465 ; CHECK-NEXT: vmov r0, s6
466 ; CHECK-NEXT: vmov.8 q0[6], r0
467 ; CHECK-NEXT: vmov r0, s7
468 ; CHECK-NEXT: vmov.8 q0[7], r0
469 ; CHECK-NEXT: vmov r0, s8
470 ; CHECK-NEXT: vmov.8 q0[8], r0
471 ; CHECK-NEXT: vmov r0, s9
472 ; CHECK-NEXT: vmov.8 q0[9], r0
473 ; CHECK-NEXT: vmov r0, s10
474 ; CHECK-NEXT: vmov.8 q0[10], r0
475 ; CHECK-NEXT: vmov r0, s11
476 ; CHECK-NEXT: vmov.8 q0[11], r0
477 ; CHECK-NEXT: vmov r0, s12
478 ; CHECK-NEXT: vmov.8 q0[12], r0
479 ; CHECK-NEXT: vmov r0, s13
480 ; CHECK-NEXT: vmov.8 q0[13], r0
481 ; CHECK-NEXT: vmov r0, s14
482 ; CHECK-NEXT: vmov.8 q0[14], r0
483 ; CHECK-NEXT: vmov r0, s15
484 ; CHECK-NEXT: vmov.8 q0[15], r0
485 ; CHECK-NEXT: vpop {d8, d9}
488 %0 = trunc <16 x i32> %src to <16 x i8>
492 define arm_aapcs_vfpcc <2 x i32> @trunc_v2i64_v2i32(<2 x i64> %src) {
493 ; CHECK-LABEL: trunc_v2i64_v2i32:
494 ; CHECK: @ %bb.0: @ %entry
497 %0 = trunc <2 x i64> %src to <2 x i32>