[lit] Add argument check: --timeout must be non-negative integer
[llvm-core.git] / test / CodeGen / Thumb2 / mve-sext.ll
blobbe4148821815c7c69c636598cad33c62634589c3
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
8 ; CHECK-NEXT:    bx lr
9 entry:
10   %0 = sext <8 x i8> %src to <8 x i16>
11   ret <8 x i16> %0
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
18 ; CHECK-NEXT:    bx lr
19 entry:
20   %0 = sext <4 x i16> %src to <4 x i32>
21   ret <4 x i32> %0
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
29 ; CHECK-NEXT:    bx lr
30 entry:
31   %0 = sext <4 x i8> %src to <4 x i32>
32   ret <4 x i32> %0
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
73 ; CHECK-NEXT:    bx lr
74 entry:
75   %0 = sext <16 x i8> %src to <16 x i16>
76   ret <16 x i16> %0
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
101 ; CHECK-NEXT:    bx lr
102 entry:
103   %0 = sext <8 x i16> %src to <8 x i32>
104   ret <8 x i32> %0
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}
154 ; CHECK-NEXT:    bx lr
155 entry:
156   %0 = sext <16 x i8> %src to <16 x i32>
157   ret <16 x i32> %0
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
172 ; CHECK-NEXT:    bx lr
173 entry:
174   %0 = sext <2 x i32> %src to <2 x i64>
175   ret <2 x i64> %0
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
183 ; CHECK-NEXT:    bx lr
184 entry:
185   %0 = zext <8 x i8> %src to <8 x i16>
186   ret <8 x i16> %0
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
193 ; CHECK-NEXT:    bx lr
194 entry:
195   %0 = zext <4 x i16> %src to <4 x i32>
196   ret <4 x i32> %0
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
204 ; CHECK-NEXT:    bx lr
205 entry:
206   %0 = zext <4 x i8> %src to <4 x i32>
207   ret <4 x i32> %0
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
248 ; CHECK-NEXT:    bx lr
249 entry:
250   %0 = zext <16 x i8> %src to <16 x i16>
251   ret <16 x i16> %0
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
276 ; CHECK-NEXT:    bx lr
277 entry:
278   %0 = zext <8 x i16> %src to <8 x i32>
279   ret <8 x i32> %0
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}
326 ; CHECK-NEXT:    bx lr
327 entry:
328   %0 = zext <16 x i8> %src to <16 x i32>
329   ret <16 x i32> %0
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
338 ; CHECK-NEXT:    bx lr
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
346 entry:
347   %0 = zext <2 x i32> %src to <2 x i64>
348   ret <2 x i64> %0
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
355 ; CHECK-NEXT:    bx lr
356 entry:
357   %0 = trunc <8 x i16> %src to <8 x i8>
358   ret <8 x i8> %0
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
364 ; CHECK-NEXT:    bx lr
365 entry:
366   %0 = trunc <4 x i32> %src to <4 x i16>
367   ret <4 x i16> %0
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
373 ; CHECK-NEXT:    bx lr
374 entry:
375   %0 = trunc <4 x i32> %src to <4 x i8>
376   ret <4 x i8> %0
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
415 ; CHECK-NEXT:    bx lr
416 entry:
417   %0 = trunc <16 x i16> %src to <16 x i8>
418   ret <16 x i8> %0
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
441 ; CHECK-NEXT:    bx lr
442 entry:
443   %0 = trunc <8 x i32> %src to <8 x i16>
444   ret <8 x i16> %0
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}
486 ; CHECK-NEXT:    bx lr
487 entry:
488   %0 = trunc <16 x i32> %src to <16 x i8>
489   ret <16 x i8> %0
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
495 ; CHECK-NEXT:    bx lr
496 entry:
497   %0 = trunc <2 x i64> %src to <2 x i32>
498   ret <2 x i32> %0