[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AArch64 / zext.ll
blob8573a8a2d2571d64973482770f14ba399eea7886
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-SD
3 ; RUN: llc -mtriple=aarch64 -global-isel -global-isel-abort=2 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI
5 define i16 @zext_i8_to_i16(i8 %a) {
6 ; CHECK-LABEL: zext_i8_to_i16:
7 ; CHECK:       // %bb.0: // %entry
8 ; CHECK-NEXT:    and w0, w0, #0xff
9 ; CHECK-NEXT:    ret
10 entry:
11   %c = zext i8 %a to i16
12   ret i16 %c
15 define i32 @zext_i8_to_i32(i8 %a) {
16 ; CHECK-LABEL: zext_i8_to_i32:
17 ; CHECK:       // %bb.0: // %entry
18 ; CHECK-NEXT:    and w0, w0, #0xff
19 ; CHECK-NEXT:    ret
20 entry:
21   %c = zext i8 %a to i32
22   ret i32 %c
25 define i64 @zext_i8_to_i64(i8 %a) {
26 ; CHECK-LABEL: zext_i8_to_i64:
27 ; CHECK:       // %bb.0: // %entry
28 ; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0
29 ; CHECK-NEXT:    and x0, x0, #0xff
30 ; CHECK-NEXT:    ret
31 entry:
32   %c = zext i8 %a to i64
33   ret i64 %c
36 define i10 @zext_i8_to_i10(i8 %a) {
37 ; CHECK-LABEL: zext_i8_to_i10:
38 ; CHECK:       // %bb.0: // %entry
39 ; CHECK-NEXT:    and w0, w0, #0xff
40 ; CHECK-NEXT:    ret
41 entry:
42   %c = zext i8 %a to i10
43   ret i10 %c
46 define i32 @zext_i16_to_i32(i16 %a) {
47 ; CHECK-LABEL: zext_i16_to_i32:
48 ; CHECK:       // %bb.0: // %entry
49 ; CHECK-NEXT:    and w0, w0, #0xffff
50 ; CHECK-NEXT:    ret
51 entry:
52   %c = zext i16 %a to i32
53   ret i32 %c
56 define i64 @zext_i16_to_i64(i16 %a) {
57 ; CHECK-LABEL: zext_i16_to_i64:
58 ; CHECK:       // %bb.0: // %entry
59 ; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0
60 ; CHECK-NEXT:    and x0, x0, #0xffff
61 ; CHECK-NEXT:    ret
62 entry:
63   %c = zext i16 %a to i64
64   ret i64 %c
67 define i64 @zext_i32_to_i64(i32 %a) {
68 ; CHECK-LABEL: zext_i32_to_i64:
69 ; CHECK:       // %bb.0: // %entry
70 ; CHECK-NEXT:    mov w0, w0
71 ; CHECK-NEXT:    ret
72 entry:
73   %c = zext i32 %a to i64
74   ret i64 %c
77 define i16 @zext_i10_to_i16(i10 %a) {
78 ; CHECK-LABEL: zext_i10_to_i16:
79 ; CHECK:       // %bb.0: // %entry
80 ; CHECK-NEXT:    and w0, w0, #0x3ff
81 ; CHECK-NEXT:    ret
82 entry:
83   %c = zext i10 %a to i16
84   ret i16 %c
87 define i32 @zext_i10_to_i32(i10 %a) {
88 ; CHECK-LABEL: zext_i10_to_i32:
89 ; CHECK:       // %bb.0: // %entry
90 ; CHECK-NEXT:    and w0, w0, #0x3ff
91 ; CHECK-NEXT:    ret
92 entry:
93   %c = zext i10 %a to i32
94   ret i32 %c
97 define i64 @zext_i10_to_i64(i10 %a) {
98 ; CHECK-LABEL: zext_i10_to_i64:
99 ; CHECK:       // %bb.0: // %entry
100 ; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0
101 ; CHECK-NEXT:    and x0, x0, #0x3ff
102 ; CHECK-NEXT:    ret
103 entry:
104   %c = zext i10 %a to i64
105   ret i64 %c
108 define <2 x i16> @zext_v2i8_v2i16(<2 x i8> %a) {
109 ; CHECK-LABEL: zext_v2i8_v2i16:
110 ; CHECK:       // %bb.0: // %entry
111 ; CHECK-NEXT:    movi d1, #0x0000ff000000ff
112 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
113 ; CHECK-NEXT:    ret
114 entry:
115   %c = zext <2 x i8> %a to <2 x i16>
116   ret <2 x i16> %c
119 define <2 x i32> @zext_v2i8_v2i32(<2 x i8> %a) {
120 ; CHECK-LABEL: zext_v2i8_v2i32:
121 ; CHECK:       // %bb.0: // %entry
122 ; CHECK-NEXT:    movi d1, #0x0000ff000000ff
123 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
124 ; CHECK-NEXT:    ret
125 entry:
126   %c = zext <2 x i8> %a to <2 x i32>
127   ret <2 x i32> %c
130 define <2 x i64> @zext_v2i8_v2i64(<2 x i8> %a) {
131 ; CHECK-SD-LABEL: zext_v2i8_v2i64:
132 ; CHECK-SD:       // %bb.0: // %entry
133 ; CHECK-SD-NEXT:    movi d1, #0x0000ff000000ff
134 ; CHECK-SD-NEXT:    and v0.8b, v0.8b, v1.8b
135 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
136 ; CHECK-SD-NEXT:    ret
138 ; CHECK-GI-LABEL: zext_v2i8_v2i64:
139 ; CHECK-GI:       // %bb.0: // %entry
140 ; CHECK-GI-NEXT:    movi v1.2d, #0x000000000000ff
141 ; CHECK-GI-NEXT:    ushll v0.2d, v0.2s, #0
142 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
143 ; CHECK-GI-NEXT:    ret
144 entry:
145   %c = zext <2 x i8> %a to <2 x i64>
146   ret <2 x i64> %c
149 define <2 x i32> @zext_v2i16_v2i32(<2 x i16> %a) {
150 ; CHECK-LABEL: zext_v2i16_v2i32:
151 ; CHECK:       // %bb.0: // %entry
152 ; CHECK-NEXT:    movi d1, #0x00ffff0000ffff
153 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
154 ; CHECK-NEXT:    ret
155 entry:
156   %c = zext <2 x i16> %a to <2 x i32>
157   ret <2 x i32> %c
160 define <2 x i64> @zext_v2i16_v2i64(<2 x i16> %a) {
161 ; CHECK-SD-LABEL: zext_v2i16_v2i64:
162 ; CHECK-SD:       // %bb.0: // %entry
163 ; CHECK-SD-NEXT:    movi d1, #0x00ffff0000ffff
164 ; CHECK-SD-NEXT:    and v0.8b, v0.8b, v1.8b
165 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
166 ; CHECK-SD-NEXT:    ret
168 ; CHECK-GI-LABEL: zext_v2i16_v2i64:
169 ; CHECK-GI:       // %bb.0: // %entry
170 ; CHECK-GI-NEXT:    movi v1.2d, #0x0000000000ffff
171 ; CHECK-GI-NEXT:    ushll v0.2d, v0.2s, #0
172 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
173 ; CHECK-GI-NEXT:    ret
174 entry:
175   %c = zext <2 x i16> %a to <2 x i64>
176   ret <2 x i64> %c
179 define <2 x i64> @zext_v2i32_v2i64(<2 x i32> %a) {
180 ; CHECK-LABEL: zext_v2i32_v2i64:
181 ; CHECK:       // %bb.0: // %entry
182 ; CHECK-NEXT:    ushll v0.2d, v0.2s, #0
183 ; CHECK-NEXT:    ret
184 entry:
185   %c = zext <2 x i32> %a to <2 x i64>
186   ret <2 x i64> %c
189 define <2 x i16> @zext_v2i10_v2i16(<2 x i10> %a) {
190 ; CHECK-LABEL: zext_v2i10_v2i16:
191 ; CHECK:       // %bb.0: // %entry
192 ; CHECK-NEXT:    movi v1.2s, #3, msl #8
193 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
194 ; CHECK-NEXT:    ret
195 entry:
196   %c = zext <2 x i10> %a to <2 x i16>
197   ret <2 x i16> %c
200 define <2 x i32> @zext_v2i10_v2i32(<2 x i10> %a) {
201 ; CHECK-LABEL: zext_v2i10_v2i32:
202 ; CHECK:       // %bb.0: // %entry
203 ; CHECK-NEXT:    movi v1.2s, #3, msl #8
204 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
205 ; CHECK-NEXT:    ret
206 entry:
207   %c = zext <2 x i10> %a to <2 x i32>
208   ret <2 x i32> %c
211 define <2 x i64> @zext_v2i10_v2i64(<2 x i10> %a) {
212 ; CHECK-SD-LABEL: zext_v2i10_v2i64:
213 ; CHECK-SD:       // %bb.0: // %entry
214 ; CHECK-SD-NEXT:    movi v1.2s, #3, msl #8
215 ; CHECK-SD-NEXT:    and v0.8b, v0.8b, v1.8b
216 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
217 ; CHECK-SD-NEXT:    ret
219 ; CHECK-GI-LABEL: zext_v2i10_v2i64:
220 ; CHECK-GI:       // %bb.0: // %entry
221 ; CHECK-GI-NEXT:    adrp x8, .LCPI18_0
222 ; CHECK-GI-NEXT:    ushll v0.2d, v0.2s, #0
223 ; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI18_0]
224 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
225 ; CHECK-GI-NEXT:    ret
226 entry:
227   %c = zext <2 x i10> %a to <2 x i64>
228   ret <2 x i64> %c
231 define <3 x i16> @zext_v3i8_v3i16(<3 x i8> %a) {
232 ; CHECK-SD-LABEL: zext_v3i8_v3i16:
233 ; CHECK-SD:       // %bb.0: // %entry
234 ; CHECK-SD-NEXT:    fmov s0, w0
235 ; CHECK-SD-NEXT:    mov v0.h[1], w1
236 ; CHECK-SD-NEXT:    mov v0.h[2], w2
237 ; CHECK-SD-NEXT:    bic v0.4h, #255, lsl #8
238 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0
239 ; CHECK-SD-NEXT:    ret
241 ; CHECK-GI-LABEL: zext_v3i8_v3i16:
242 ; CHECK-GI:       // %bb.0: // %entry
243 ; CHECK-GI-NEXT:    fmov s0, w0
244 ; CHECK-GI-NEXT:    mov w8, #255 // =0xff
245 ; CHECK-GI-NEXT:    fmov s1, w8
246 ; CHECK-GI-NEXT:    mov v0.s[1], w1
247 ; CHECK-GI-NEXT:    mov v2.16b, v1.16b
248 ; CHECK-GI-NEXT:    mov v0.s[2], w2
249 ; CHECK-GI-NEXT:    mov v2.h[1], v1.h[0]
250 ; CHECK-GI-NEXT:    mov v0.s[3], w8
251 ; CHECK-GI-NEXT:    mov v2.h[2], v1.h[0]
252 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
253 ; CHECK-GI-NEXT:    mov v2.h[3], v0.h[0]
254 ; CHECK-GI-NEXT:    and v0.8b, v0.8b, v2.8b
255 ; CHECK-GI-NEXT:    ret
256 entry:
257   %c = zext <3 x i8> %a to <3 x i16>
258   ret <3 x i16> %c
261 define <3 x i32> @zext_v3i8_v3i32(<3 x i8> %a) {
262 ; CHECK-SD-LABEL: zext_v3i8_v3i32:
263 ; CHECK-SD:       // %bb.0: // %entry
264 ; CHECK-SD-NEXT:    fmov s0, w0
265 ; CHECK-SD-NEXT:    movi v1.2d, #0x0000ff000000ff
266 ; CHECK-SD-NEXT:    mov v0.h[1], w1
267 ; CHECK-SD-NEXT:    mov v0.h[2], w2
268 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
269 ; CHECK-SD-NEXT:    and v0.16b, v0.16b, v1.16b
270 ; CHECK-SD-NEXT:    ret
272 ; CHECK-GI-LABEL: zext_v3i8_v3i32:
273 ; CHECK-GI:       // %bb.0: // %entry
274 ; CHECK-GI-NEXT:    mov w8, #255 // =0xff
275 ; CHECK-GI-NEXT:    fmov s0, w0
276 ; CHECK-GI-NEXT:    fmov s1, w8
277 ; CHECK-GI-NEXT:    mov v0.s[1], w1
278 ; CHECK-GI-NEXT:    mov v1.s[1], w8
279 ; CHECK-GI-NEXT:    mov v0.s[2], w2
280 ; CHECK-GI-NEXT:    mov v1.s[2], w8
281 ; CHECK-GI-NEXT:    mov v0.s[3], w8
282 ; CHECK-GI-NEXT:    mov v1.s[3], w8
283 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
284 ; CHECK-GI-NEXT:    ret
285 entry:
286   %c = zext <3 x i8> %a to <3 x i32>
287   ret <3 x i32> %c
290 define <3 x i64> @zext_v3i8_v3i64(<3 x i8> %a) {
291 ; CHECK-SD-LABEL: zext_v3i8_v3i64:
292 ; CHECK-SD:       // %bb.0: // %entry
293 ; CHECK-SD-NEXT:    fmov s0, w0
294 ; CHECK-SD-NEXT:    movi v1.2d, #0x000000000000ff
295 ; CHECK-SD-NEXT:    fmov s3, w2
296 ; CHECK-SD-NEXT:    movi v2.2d, #0000000000000000
297 ; CHECK-SD-NEXT:    mov v0.s[1], w1
298 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
299 ; CHECK-SD-NEXT:    and v0.16b, v0.16b, v1.16b
300 ; CHECK-SD-NEXT:    ushll v1.2d, v3.2s, #0
301 ; CHECK-SD-NEXT:    mov v2.b[0], v1.b[0]
302 ; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #8
303 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0
304 ; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1
305 ; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q2
306 ; CHECK-SD-NEXT:    ret
308 ; CHECK-GI-LABEL: zext_v3i8_v3i64:
309 ; CHECK-GI:       // %bb.0: // %entry
310 ; CHECK-GI-NEXT:    // kill: def $w0 killed $w0 def $x0
311 ; CHECK-GI-NEXT:    fmov d1, x0
312 ; CHECK-GI-NEXT:    // kill: def $w1 killed $w1 def $x1
313 ; CHECK-GI-NEXT:    movi v0.2d, #0x000000000000ff
314 ; CHECK-GI-NEXT:    // kill: def $w2 killed $w2 def $x2
315 ; CHECK-GI-NEXT:    and x8, x2, #0xff
316 ; CHECK-GI-NEXT:    fmov d2, x8
317 ; CHECK-GI-NEXT:    mov v1.d[1], x1
318 ; CHECK-GI-NEXT:    and v0.16b, v1.16b, v0.16b
319 ; CHECK-GI-NEXT:    mov d1, v0.d[1]
320 ; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0
321 ; CHECK-GI-NEXT:    ret
322 entry:
323   %c = zext <3 x i8> %a to <3 x i64>
324   ret <3 x i64> %c
327 define <3 x i32> @zext_v3i16_v3i32(<3 x i16> %a) {
328 ; CHECK-SD-LABEL: zext_v3i16_v3i32:
329 ; CHECK-SD:       // %bb.0: // %entry
330 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
331 ; CHECK-SD-NEXT:    ret
333 ; CHECK-GI-LABEL: zext_v3i16_v3i32:
334 ; CHECK-GI:       // %bb.0: // %entry
335 ; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0
336 ; CHECK-GI-NEXT:    mov h1, v0.h[1]
337 ; CHECK-GI-NEXT:    fmov w8, s0
338 ; CHECK-GI-NEXT:    mov h2, v0.h[2]
339 ; CHECK-GI-NEXT:    uxth w8, w8
340 ; CHECK-GI-NEXT:    fmov w9, s1
341 ; CHECK-GI-NEXT:    fmov s0, w8
342 ; CHECK-GI-NEXT:    fmov w8, s2
343 ; CHECK-GI-NEXT:    uxth w9, w9
344 ; CHECK-GI-NEXT:    uxth w8, w8
345 ; CHECK-GI-NEXT:    mov v0.s[1], w9
346 ; CHECK-GI-NEXT:    mov v0.s[2], w8
347 ; CHECK-GI-NEXT:    mov v0.s[3], w8
348 ; CHECK-GI-NEXT:    ret
349 entry:
350   %c = zext <3 x i16> %a to <3 x i32>
351   ret <3 x i32> %c
354 define <3 x i64> @zext_v3i16_v3i64(<3 x i16> %a) {
355 ; CHECK-SD-LABEL: zext_v3i16_v3i64:
356 ; CHECK-SD:       // %bb.0: // %entry
357 ; CHECK-SD-NEXT:    ushll v2.4s, v0.4h, #0
358 ; CHECK-SD-NEXT:    ushll v0.2d, v2.2s, #0
359 ; CHECK-SD-NEXT:    ushll2 v2.2d, v2.4s, #0
360 ; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q2
361 ; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #8
362 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0
363 ; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1
364 ; CHECK-SD-NEXT:    ret
366 ; CHECK-GI-LABEL: zext_v3i16_v3i64:
367 ; CHECK-GI:       // %bb.0: // %entry
368 ; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0
369 ; CHECK-GI-NEXT:    mov h1, v0.h[1]
370 ; CHECK-GI-NEXT:    mov h2, v0.h[2]
371 ; CHECK-GI-NEXT:    fmov w8, s0
372 ; CHECK-GI-NEXT:    ubfx x8, x8, #0, #16
373 ; CHECK-GI-NEXT:    fmov w9, s1
374 ; CHECK-GI-NEXT:    fmov w10, s2
375 ; CHECK-GI-NEXT:    fmov d0, x8
376 ; CHECK-GI-NEXT:    ubfx x9, x9, #0, #16
377 ; CHECK-GI-NEXT:    ubfx x10, x10, #0, #16
378 ; CHECK-GI-NEXT:    fmov d1, x9
379 ; CHECK-GI-NEXT:    fmov d2, x10
380 ; CHECK-GI-NEXT:    ret
381 entry:
382   %c = zext <3 x i16> %a to <3 x i64>
383   ret <3 x i64> %c
386 define <3 x i64> @zext_v3i32_v3i64(<3 x i32> %a) {
387 ; CHECK-SD-LABEL: zext_v3i32_v3i64:
388 ; CHECK-SD:       // %bb.0: // %entry
389 ; CHECK-SD-NEXT:    ushll v3.2d, v0.2s, #0
390 ; CHECK-SD-NEXT:    ushll2 v2.2d, v0.4s, #0
391 ; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q2
392 ; CHECK-SD-NEXT:    fmov d0, d3
393 ; CHECK-SD-NEXT:    ext v1.16b, v3.16b, v3.16b, #8
394 ; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1
395 ; CHECK-SD-NEXT:    ret
397 ; CHECK-GI-LABEL: zext_v3i32_v3i64:
398 ; CHECK-GI:       // %bb.0: // %entry
399 ; CHECK-GI-NEXT:    mov s1, v0.s[1]
400 ; CHECK-GI-NEXT:    mov s2, v0.s[2]
401 ; CHECK-GI-NEXT:    fmov w8, s0
402 ; CHECK-GI-NEXT:    fmov d0, x8
403 ; CHECK-GI-NEXT:    fmov w9, s1
404 ; CHECK-GI-NEXT:    fmov w10, s2
405 ; CHECK-GI-NEXT:    fmov d1, x9
406 ; CHECK-GI-NEXT:    fmov d2, x10
407 ; CHECK-GI-NEXT:    ret
408 entry:
409   %c = zext <3 x i32> %a to <3 x i64>
410   ret <3 x i64> %c
413 define <3 x i16> @zext_v3i10_v3i16(<3 x i10> %a) {
414 ; CHECK-SD-LABEL: zext_v3i10_v3i16:
415 ; CHECK-SD:       // %bb.0: // %entry
416 ; CHECK-SD-NEXT:    fmov s0, w0
417 ; CHECK-SD-NEXT:    mov v0.h[1], w1
418 ; CHECK-SD-NEXT:    mov v0.h[2], w2
419 ; CHECK-SD-NEXT:    bic v0.4h, #252, lsl #8
420 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0
421 ; CHECK-SD-NEXT:    ret
423 ; CHECK-GI-LABEL: zext_v3i10_v3i16:
424 ; CHECK-GI:       // %bb.0: // %entry
425 ; CHECK-GI-NEXT:    fmov s0, w0
426 ; CHECK-GI-NEXT:    mov w8, #1023 // =0x3ff
427 ; CHECK-GI-NEXT:    fmov s1, w8
428 ; CHECK-GI-NEXT:    mov v0.s[1], w1
429 ; CHECK-GI-NEXT:    mov v2.16b, v1.16b
430 ; CHECK-GI-NEXT:    mov v0.s[2], w2
431 ; CHECK-GI-NEXT:    mov v2.h[1], v1.h[0]
432 ; CHECK-GI-NEXT:    mov v0.s[3], w8
433 ; CHECK-GI-NEXT:    mov v2.h[2], v1.h[0]
434 ; CHECK-GI-NEXT:    xtn v0.4h, v0.4s
435 ; CHECK-GI-NEXT:    mov v2.h[3], v0.h[0]
436 ; CHECK-GI-NEXT:    and v0.8b, v0.8b, v2.8b
437 ; CHECK-GI-NEXT:    ret
438 entry:
439   %c = zext <3 x i10> %a to <3 x i16>
440   ret <3 x i16> %c
443 define <3 x i32> @zext_v3i10_v3i32(<3 x i10> %a) {
444 ; CHECK-SD-LABEL: zext_v3i10_v3i32:
445 ; CHECK-SD:       // %bb.0: // %entry
446 ; CHECK-SD-NEXT:    fmov s0, w0
447 ; CHECK-SD-NEXT:    movi v1.4s, #3, msl #8
448 ; CHECK-SD-NEXT:    mov v0.h[1], w1
449 ; CHECK-SD-NEXT:    mov v0.h[2], w2
450 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
451 ; CHECK-SD-NEXT:    and v0.16b, v0.16b, v1.16b
452 ; CHECK-SD-NEXT:    ret
454 ; CHECK-GI-LABEL: zext_v3i10_v3i32:
455 ; CHECK-GI:       // %bb.0: // %entry
456 ; CHECK-GI-NEXT:    mov w8, #1023 // =0x3ff
457 ; CHECK-GI-NEXT:    fmov s0, w0
458 ; CHECK-GI-NEXT:    fmov s1, w8
459 ; CHECK-GI-NEXT:    mov v0.s[1], w1
460 ; CHECK-GI-NEXT:    mov v1.s[1], w8
461 ; CHECK-GI-NEXT:    mov v0.s[2], w2
462 ; CHECK-GI-NEXT:    mov v1.s[2], w8
463 ; CHECK-GI-NEXT:    mov v0.s[3], w8
464 ; CHECK-GI-NEXT:    mov v1.s[3], w8
465 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
466 ; CHECK-GI-NEXT:    ret
467 entry:
468   %c = zext <3 x i10> %a to <3 x i32>
469   ret <3 x i32> %c
472 define <3 x i64> @zext_v3i10_v3i64(<3 x i10> %a) {
473 ; CHECK-SD-LABEL: zext_v3i10_v3i64:
474 ; CHECK-SD:       // %bb.0: // %entry
475 ; CHECK-SD-NEXT:    fmov s0, w0
476 ; CHECK-SD-NEXT:    fmov s1, w2
477 ; CHECK-SD-NEXT:    mov w8, #1023 // =0x3ff
478 ; CHECK-SD-NEXT:    dup v2.2d, x8
479 ; CHECK-SD-NEXT:    mov v0.s[1], w1
480 ; CHECK-SD-NEXT:    ushll v3.2d, v1.2s, #0
481 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
482 ; CHECK-SD-NEXT:    and v0.16b, v0.16b, v2.16b
483 ; CHECK-SD-NEXT:    and v2.8b, v3.8b, v2.8b
484 ; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #8
485 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0
486 ; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1
487 ; CHECK-SD-NEXT:    ret
489 ; CHECK-GI-LABEL: zext_v3i10_v3i64:
490 ; CHECK-GI:       // %bb.0: // %entry
491 ; CHECK-GI-NEXT:    // kill: def $w0 killed $w0 def $x0
492 ; CHECK-GI-NEXT:    fmov d0, x0
493 ; CHECK-GI-NEXT:    // kill: def $w1 killed $w1 def $x1
494 ; CHECK-GI-NEXT:    adrp x8, .LCPI27_0
495 ; CHECK-GI-NEXT:    // kill: def $w2 killed $w2 def $x2
496 ; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI27_0]
497 ; CHECK-GI-NEXT:    and x8, x2, #0x3ff
498 ; CHECK-GI-NEXT:    fmov d2, x8
499 ; CHECK-GI-NEXT:    mov v0.d[1], x1
500 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
501 ; CHECK-GI-NEXT:    mov d1, v0.d[1]
502 ; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0
503 ; CHECK-GI-NEXT:    ret
504 entry:
505   %c = zext <3 x i10> %a to <3 x i64>
506   ret <3 x i64> %c
509 define <4 x i16> @zext_v4i8_v4i16(<4 x i8> %a) {
510 ; CHECK-SD-LABEL: zext_v4i8_v4i16:
511 ; CHECK-SD:       // %bb.0: // %entry
512 ; CHECK-SD-NEXT:    bic v0.4h, #255, lsl #8
513 ; CHECK-SD-NEXT:    ret
515 ; CHECK-GI-LABEL: zext_v4i8_v4i16:
516 ; CHECK-GI:       // %bb.0: // %entry
517 ; CHECK-GI-NEXT:    movi d1, #0xff00ff00ff00ff
518 ; CHECK-GI-NEXT:    and v0.8b, v0.8b, v1.8b
519 ; CHECK-GI-NEXT:    ret
520 entry:
521   %c = zext <4 x i8> %a to <4 x i16>
522   ret <4 x i16> %c
525 define <4 x i32> @zext_v4i8_v4i32(<4 x i8> %a) {
526 ; CHECK-SD-LABEL: zext_v4i8_v4i32:
527 ; CHECK-SD:       // %bb.0: // %entry
528 ; CHECK-SD-NEXT:    bic v0.4h, #255, lsl #8
529 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
530 ; CHECK-SD-NEXT:    ret
532 ; CHECK-GI-LABEL: zext_v4i8_v4i32:
533 ; CHECK-GI:       // %bb.0: // %entry
534 ; CHECK-GI-NEXT:    movi v1.2d, #0x0000ff000000ff
535 ; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #0
536 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
537 ; CHECK-GI-NEXT:    ret
538 entry:
539   %c = zext <4 x i8> %a to <4 x i32>
540   ret <4 x i32> %c
543 define <4 x i64> @zext_v4i8_v4i64(<4 x i8> %a) {
544 ; CHECK-SD-LABEL: zext_v4i8_v4i64:
545 ; CHECK-SD:       // %bb.0: // %entry
546 ; CHECK-SD-NEXT:    bic v0.4h, #255, lsl #8
547 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
548 ; CHECK-SD-NEXT:    ushll2 v1.2d, v0.4s, #0
549 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
550 ; CHECK-SD-NEXT:    ret
552 ; CHECK-GI-LABEL: zext_v4i8_v4i64:
553 ; CHECK-GI:       // %bb.0: // %entry
554 ; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #0
555 ; CHECK-GI-NEXT:    movi v1.2d, #0x000000000000ff
556 ; CHECK-GI-NEXT:    ushll v2.2d, v0.2s, #0
557 ; CHECK-GI-NEXT:    ushll2 v3.2d, v0.4s, #0
558 ; CHECK-GI-NEXT:    and v0.16b, v2.16b, v1.16b
559 ; CHECK-GI-NEXT:    and v1.16b, v3.16b, v1.16b
560 ; CHECK-GI-NEXT:    ret
561 entry:
562   %c = zext <4 x i8> %a to <4 x i64>
563   ret <4 x i64> %c
566 define <4 x i32> @zext_v4i16_v4i32(<4 x i16> %a) {
567 ; CHECK-LABEL: zext_v4i16_v4i32:
568 ; CHECK:       // %bb.0: // %entry
569 ; CHECK-NEXT:    ushll v0.4s, v0.4h, #0
570 ; CHECK-NEXT:    ret
571 entry:
572   %c = zext <4 x i16> %a to <4 x i32>
573   ret <4 x i32> %c
576 define <4 x i64> @zext_v4i16_v4i64(<4 x i16> %a) {
577 ; CHECK-SD-LABEL: zext_v4i16_v4i64:
578 ; CHECK-SD:       // %bb.0: // %entry
579 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
580 ; CHECK-SD-NEXT:    ushll2 v1.2d, v0.4s, #0
581 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
582 ; CHECK-SD-NEXT:    ret
584 ; CHECK-GI-LABEL: zext_v4i16_v4i64:
585 ; CHECK-GI:       // %bb.0: // %entry
586 ; CHECK-GI-NEXT:    ushll v1.4s, v0.4h, #0
587 ; CHECK-GI-NEXT:    ushll v0.2d, v1.2s, #0
588 ; CHECK-GI-NEXT:    ushll2 v1.2d, v1.4s, #0
589 ; CHECK-GI-NEXT:    ret
590 entry:
591   %c = zext <4 x i16> %a to <4 x i64>
592   ret <4 x i64> %c
595 define <4 x i64> @zext_v4i32_v4i64(<4 x i32> %a) {
596 ; CHECK-SD-LABEL: zext_v4i32_v4i64:
597 ; CHECK-SD:       // %bb.0: // %entry
598 ; CHECK-SD-NEXT:    ushll2 v1.2d, v0.4s, #0
599 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
600 ; CHECK-SD-NEXT:    ret
602 ; CHECK-GI-LABEL: zext_v4i32_v4i64:
603 ; CHECK-GI:       // %bb.0: // %entry
604 ; CHECK-GI-NEXT:    ushll v2.2d, v0.2s, #0
605 ; CHECK-GI-NEXT:    ushll2 v1.2d, v0.4s, #0
606 ; CHECK-GI-NEXT:    mov v0.16b, v2.16b
607 ; CHECK-GI-NEXT:    ret
608 entry:
609   %c = zext <4 x i32> %a to <4 x i64>
610   ret <4 x i64> %c
613 define <4 x i16> @zext_v4i10_v4i16(<4 x i10> %a) {
614 ; CHECK-SD-LABEL: zext_v4i10_v4i16:
615 ; CHECK-SD:       // %bb.0: // %entry
616 ; CHECK-SD-NEXT:    bic v0.4h, #252, lsl #8
617 ; CHECK-SD-NEXT:    ret
619 ; CHECK-GI-LABEL: zext_v4i10_v4i16:
620 ; CHECK-GI:       // %bb.0: // %entry
621 ; CHECK-GI-NEXT:    mvni v1.4h, #252, lsl #8
622 ; CHECK-GI-NEXT:    and v0.8b, v0.8b, v1.8b
623 ; CHECK-GI-NEXT:    ret
624 entry:
625   %c = zext <4 x i10> %a to <4 x i16>
626   ret <4 x i16> %c
629 define <4 x i32> @zext_v4i10_v4i32(<4 x i10> %a) {
630 ; CHECK-SD-LABEL: zext_v4i10_v4i32:
631 ; CHECK-SD:       // %bb.0: // %entry
632 ; CHECK-SD-NEXT:    bic v0.4h, #252, lsl #8
633 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
634 ; CHECK-SD-NEXT:    ret
636 ; CHECK-GI-LABEL: zext_v4i10_v4i32:
637 ; CHECK-GI:       // %bb.0: // %entry
638 ; CHECK-GI-NEXT:    movi v1.4s, #3, msl #8
639 ; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #0
640 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
641 ; CHECK-GI-NEXT:    ret
642 entry:
643   %c = zext <4 x i10> %a to <4 x i32>
644   ret <4 x i32> %c
647 define <4 x i64> @zext_v4i10_v4i64(<4 x i10> %a) {
648 ; CHECK-SD-LABEL: zext_v4i10_v4i64:
649 ; CHECK-SD:       // %bb.0: // %entry
650 ; CHECK-SD-NEXT:    bic v0.4h, #252, lsl #8
651 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
652 ; CHECK-SD-NEXT:    ushll2 v1.2d, v0.4s, #0
653 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
654 ; CHECK-SD-NEXT:    ret
656 ; CHECK-GI-LABEL: zext_v4i10_v4i64:
657 ; CHECK-GI:       // %bb.0: // %entry
658 ; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #0
659 ; CHECK-GI-NEXT:    adrp x8, .LCPI36_0
660 ; CHECK-GI-NEXT:    ldr q3, [x8, :lo12:.LCPI36_0]
661 ; CHECK-GI-NEXT:    ushll v1.2d, v0.2s, #0
662 ; CHECK-GI-NEXT:    ushll2 v2.2d, v0.4s, #0
663 ; CHECK-GI-NEXT:    and v0.16b, v1.16b, v3.16b
664 ; CHECK-GI-NEXT:    and v1.16b, v2.16b, v3.16b
665 ; CHECK-GI-NEXT:    ret
666 entry:
667   %c = zext <4 x i10> %a to <4 x i64>
668   ret <4 x i64> %c
671 define <8 x i16> @zext_v8i8_v8i16(<8 x i8> %a) {
672 ; CHECK-LABEL: zext_v8i8_v8i16:
673 ; CHECK:       // %bb.0: // %entry
674 ; CHECK-NEXT:    ushll v0.8h, v0.8b, #0
675 ; CHECK-NEXT:    ret
676 entry:
677   %c = zext <8 x i8> %a to <8 x i16>
678   ret <8 x i16> %c
681 define <8 x i32> @zext_v8i8_v8i32(<8 x i8> %a) {
682 ; CHECK-SD-LABEL: zext_v8i8_v8i32:
683 ; CHECK-SD:       // %bb.0: // %entry
684 ; CHECK-SD-NEXT:    ushll v0.8h, v0.8b, #0
685 ; CHECK-SD-NEXT:    ushll2 v1.4s, v0.8h, #0
686 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
687 ; CHECK-SD-NEXT:    ret
689 ; CHECK-GI-LABEL: zext_v8i8_v8i32:
690 ; CHECK-GI:       // %bb.0: // %entry
691 ; CHECK-GI-NEXT:    ushll v1.8h, v0.8b, #0
692 ; CHECK-GI-NEXT:    ushll v0.4s, v1.4h, #0
693 ; CHECK-GI-NEXT:    ushll2 v1.4s, v1.8h, #0
694 ; CHECK-GI-NEXT:    ret
695 entry:
696   %c = zext <8 x i8> %a to <8 x i32>
697   ret <8 x i32> %c
700 define <8 x i64> @zext_v8i8_v8i64(<8 x i8> %a) {
701 ; CHECK-SD-LABEL: zext_v8i8_v8i64:
702 ; CHECK-SD:       // %bb.0: // %entry
703 ; CHECK-SD-NEXT:    ushll v0.8h, v0.8b, #0
704 ; CHECK-SD-NEXT:    ushll v1.4s, v0.4h, #0
705 ; CHECK-SD-NEXT:    ushll2 v2.4s, v0.8h, #0
706 ; CHECK-SD-NEXT:    ushll v0.2d, v1.2s, #0
707 ; CHECK-SD-NEXT:    ushll2 v3.2d, v2.4s, #0
708 ; CHECK-SD-NEXT:    ushll2 v1.2d, v1.4s, #0
709 ; CHECK-SD-NEXT:    ushll v2.2d, v2.2s, #0
710 ; CHECK-SD-NEXT:    ret
712 ; CHECK-GI-LABEL: zext_v8i8_v8i64:
713 ; CHECK-GI:       // %bb.0: // %entry
714 ; CHECK-GI-NEXT:    ushll v0.8h, v0.8b, #0
715 ; CHECK-GI-NEXT:    ushll v1.4s, v0.4h, #0
716 ; CHECK-GI-NEXT:    ushll2 v3.4s, v0.8h, #0
717 ; CHECK-GI-NEXT:    ushll v0.2d, v1.2s, #0
718 ; CHECK-GI-NEXT:    ushll2 v1.2d, v1.4s, #0
719 ; CHECK-GI-NEXT:    ushll v2.2d, v3.2s, #0
720 ; CHECK-GI-NEXT:    ushll2 v3.2d, v3.4s, #0
721 ; CHECK-GI-NEXT:    ret
722 entry:
723   %c = zext <8 x i8> %a to <8 x i64>
724   ret <8 x i64> %c
727 define <8 x i32> @zext_v8i16_v8i32(<8 x i16> %a) {
728 ; CHECK-SD-LABEL: zext_v8i16_v8i32:
729 ; CHECK-SD:       // %bb.0: // %entry
730 ; CHECK-SD-NEXT:    ushll2 v1.4s, v0.8h, #0
731 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
732 ; CHECK-SD-NEXT:    ret
734 ; CHECK-GI-LABEL: zext_v8i16_v8i32:
735 ; CHECK-GI:       // %bb.0: // %entry
736 ; CHECK-GI-NEXT:    ushll v2.4s, v0.4h, #0
737 ; CHECK-GI-NEXT:    ushll2 v1.4s, v0.8h, #0
738 ; CHECK-GI-NEXT:    mov v0.16b, v2.16b
739 ; CHECK-GI-NEXT:    ret
740 entry:
741   %c = zext <8 x i16> %a to <8 x i32>
742   ret <8 x i32> %c
745 define <8 x i64> @zext_v8i16_v8i64(<8 x i16> %a) {
746 ; CHECK-SD-LABEL: zext_v8i16_v8i64:
747 ; CHECK-SD:       // %bb.0: // %entry
748 ; CHECK-SD-NEXT:    ushll v1.4s, v0.4h, #0
749 ; CHECK-SD-NEXT:    ushll2 v2.4s, v0.8h, #0
750 ; CHECK-SD-NEXT:    ushll v0.2d, v1.2s, #0
751 ; CHECK-SD-NEXT:    ushll2 v3.2d, v2.4s, #0
752 ; CHECK-SD-NEXT:    ushll2 v1.2d, v1.4s, #0
753 ; CHECK-SD-NEXT:    ushll v2.2d, v2.2s, #0
754 ; CHECK-SD-NEXT:    ret
756 ; CHECK-GI-LABEL: zext_v8i16_v8i64:
757 ; CHECK-GI:       // %bb.0: // %entry
758 ; CHECK-GI-NEXT:    ushll v1.4s, v0.4h, #0
759 ; CHECK-GI-NEXT:    ushll2 v3.4s, v0.8h, #0
760 ; CHECK-GI-NEXT:    ushll v0.2d, v1.2s, #0
761 ; CHECK-GI-NEXT:    ushll2 v1.2d, v1.4s, #0
762 ; CHECK-GI-NEXT:    ushll v2.2d, v3.2s, #0
763 ; CHECK-GI-NEXT:    ushll2 v3.2d, v3.4s, #0
764 ; CHECK-GI-NEXT:    ret
765 entry:
766   %c = zext <8 x i16> %a to <8 x i64>
767   ret <8 x i64> %c
770 define <8 x i64> @zext_v8i32_v8i64(<8 x i32> %a) {
771 ; CHECK-SD-LABEL: zext_v8i32_v8i64:
772 ; CHECK-SD:       // %bb.0: // %entry
773 ; CHECK-SD-NEXT:    ushll v5.2d, v0.2s, #0
774 ; CHECK-SD-NEXT:    ushll2 v4.2d, v0.4s, #0
775 ; CHECK-SD-NEXT:    ushll2 v3.2d, v1.4s, #0
776 ; CHECK-SD-NEXT:    ushll v2.2d, v1.2s, #0
777 ; CHECK-SD-NEXT:    mov v0.16b, v5.16b
778 ; CHECK-SD-NEXT:    mov v1.16b, v4.16b
779 ; CHECK-SD-NEXT:    ret
781 ; CHECK-GI-LABEL: zext_v8i32_v8i64:
782 ; CHECK-GI:       // %bb.0: // %entry
783 ; CHECK-GI-NEXT:    ushll v4.2d, v0.2s, #0
784 ; CHECK-GI-NEXT:    ushll2 v5.2d, v0.4s, #0
785 ; CHECK-GI-NEXT:    ushll v2.2d, v1.2s, #0
786 ; CHECK-GI-NEXT:    ushll2 v3.2d, v1.4s, #0
787 ; CHECK-GI-NEXT:    mov v0.16b, v4.16b
788 ; CHECK-GI-NEXT:    mov v1.16b, v5.16b
789 ; CHECK-GI-NEXT:    ret
790 entry:
791   %c = zext <8 x i32> %a to <8 x i64>
792   ret <8 x i64> %c
795 define <8 x i16> @zext_v8i10_v8i16(<8 x i10> %a) {
796 ; CHECK-SD-LABEL: zext_v8i10_v8i16:
797 ; CHECK-SD:       // %bb.0: // %entry
798 ; CHECK-SD-NEXT:    bic v0.8h, #252, lsl #8
799 ; CHECK-SD-NEXT:    ret
801 ; CHECK-GI-LABEL: zext_v8i10_v8i16:
802 ; CHECK-GI:       // %bb.0: // %entry
803 ; CHECK-GI-NEXT:    mvni v1.8h, #252, lsl #8
804 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
805 ; CHECK-GI-NEXT:    ret
806 entry:
807   %c = zext <8 x i10> %a to <8 x i16>
808   ret <8 x i16> %c
811 define <8 x i32> @zext_v8i10_v8i32(<8 x i10> %a) {
812 ; CHECK-SD-LABEL: zext_v8i10_v8i32:
813 ; CHECK-SD:       // %bb.0: // %entry
814 ; CHECK-SD-NEXT:    bic v0.8h, #252, lsl #8
815 ; CHECK-SD-NEXT:    ushll2 v1.4s, v0.8h, #0
816 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
817 ; CHECK-SD-NEXT:    ret
819 ; CHECK-GI-LABEL: zext_v8i10_v8i32:
820 ; CHECK-GI:       // %bb.0: // %entry
821 ; CHECK-GI-NEXT:    movi v1.4s, #3, msl #8
822 ; CHECK-GI-NEXT:    ushll v2.4s, v0.4h, #0
823 ; CHECK-GI-NEXT:    ushll2 v3.4s, v0.8h, #0
824 ; CHECK-GI-NEXT:    and v0.16b, v2.16b, v1.16b
825 ; CHECK-GI-NEXT:    and v1.16b, v3.16b, v1.16b
826 ; CHECK-GI-NEXT:    ret
827 entry:
828   %c = zext <8 x i10> %a to <8 x i32>
829   ret <8 x i32> %c
832 define <8 x i64> @zext_v8i10_v8i64(<8 x i10> %a) {
833 ; CHECK-SD-LABEL: zext_v8i10_v8i64:
834 ; CHECK-SD:       // %bb.0: // %entry
835 ; CHECK-SD-NEXT:    bic v0.8h, #252, lsl #8
836 ; CHECK-SD-NEXT:    ushll v1.4s, v0.4h, #0
837 ; CHECK-SD-NEXT:    ushll2 v2.4s, v0.8h, #0
838 ; CHECK-SD-NEXT:    ushll v0.2d, v1.2s, #0
839 ; CHECK-SD-NEXT:    ushll2 v3.2d, v2.4s, #0
840 ; CHECK-SD-NEXT:    ushll2 v1.2d, v1.4s, #0
841 ; CHECK-SD-NEXT:    ushll v2.2d, v2.2s, #0
842 ; CHECK-SD-NEXT:    ret
844 ; CHECK-GI-LABEL: zext_v8i10_v8i64:
845 ; CHECK-GI:       // %bb.0: // %entry
846 ; CHECK-GI-NEXT:    ushll v1.4s, v0.4h, #0
847 ; CHECK-GI-NEXT:    ushll2 v0.4s, v0.8h, #0
848 ; CHECK-GI-NEXT:    adrp x8, .LCPI45_0
849 ; CHECK-GI-NEXT:    ldr q3, [x8, :lo12:.LCPI45_0]
850 ; CHECK-GI-NEXT:    ushll v2.2d, v1.2s, #0
851 ; CHECK-GI-NEXT:    ushll2 v1.2d, v1.4s, #0
852 ; CHECK-GI-NEXT:    ushll v4.2d, v0.2s, #0
853 ; CHECK-GI-NEXT:    ushll2 v5.2d, v0.4s, #0
854 ; CHECK-GI-NEXT:    and v0.16b, v2.16b, v3.16b
855 ; CHECK-GI-NEXT:    and v1.16b, v1.16b, v3.16b
856 ; CHECK-GI-NEXT:    and v2.16b, v4.16b, v3.16b
857 ; CHECK-GI-NEXT:    and v3.16b, v5.16b, v3.16b
858 ; CHECK-GI-NEXT:    ret
859 entry:
860   %c = zext <8 x i10> %a to <8 x i64>
861   ret <8 x i64> %c
864 define <16 x i16> @zext_v16i8_v16i16(<16 x i8> %a) {
865 ; CHECK-SD-LABEL: zext_v16i8_v16i16:
866 ; CHECK-SD:       // %bb.0: // %entry
867 ; CHECK-SD-NEXT:    ushll2 v1.8h, v0.16b, #0
868 ; CHECK-SD-NEXT:    ushll v0.8h, v0.8b, #0
869 ; CHECK-SD-NEXT:    ret
871 ; CHECK-GI-LABEL: zext_v16i8_v16i16:
872 ; CHECK-GI:       // %bb.0: // %entry
873 ; CHECK-GI-NEXT:    ushll v2.8h, v0.8b, #0
874 ; CHECK-GI-NEXT:    ushll2 v1.8h, v0.16b, #0
875 ; CHECK-GI-NEXT:    mov v0.16b, v2.16b
876 ; CHECK-GI-NEXT:    ret
877 entry:
878   %c = zext <16 x i8> %a to <16 x i16>
879   ret <16 x i16> %c
882 define <16 x i32> @zext_v16i8_v16i32(<16 x i8> %a) {
883 ; CHECK-SD-LABEL: zext_v16i8_v16i32:
884 ; CHECK-SD:       // %bb.0: // %entry
885 ; CHECK-SD-NEXT:    ushll v1.8h, v0.8b, #0
886 ; CHECK-SD-NEXT:    ushll2 v2.8h, v0.16b, #0
887 ; CHECK-SD-NEXT:    ushll v0.4s, v1.4h, #0
888 ; CHECK-SD-NEXT:    ushll2 v3.4s, v2.8h, #0
889 ; CHECK-SD-NEXT:    ushll2 v1.4s, v1.8h, #0
890 ; CHECK-SD-NEXT:    ushll v2.4s, v2.4h, #0
891 ; CHECK-SD-NEXT:    ret
893 ; CHECK-GI-LABEL: zext_v16i8_v16i32:
894 ; CHECK-GI:       // %bb.0: // %entry
895 ; CHECK-GI-NEXT:    ushll v1.8h, v0.8b, #0
896 ; CHECK-GI-NEXT:    ushll2 v3.8h, v0.16b, #0
897 ; CHECK-GI-NEXT:    ushll v0.4s, v1.4h, #0
898 ; CHECK-GI-NEXT:    ushll2 v1.4s, v1.8h, #0
899 ; CHECK-GI-NEXT:    ushll v2.4s, v3.4h, #0
900 ; CHECK-GI-NEXT:    ushll2 v3.4s, v3.8h, #0
901 ; CHECK-GI-NEXT:    ret
902 entry:
903   %c = zext <16 x i8> %a to <16 x i32>
904   ret <16 x i32> %c
907 define <16 x i64> @zext_v16i8_v16i64(<16 x i8> %a) {
908 ; CHECK-SD-LABEL: zext_v16i8_v16i64:
909 ; CHECK-SD:       // %bb.0: // %entry
910 ; CHECK-SD-NEXT:    ushll v1.8h, v0.8b, #0
911 ; CHECK-SD-NEXT:    ushll2 v0.8h, v0.16b, #0
912 ; CHECK-SD-NEXT:    ushll v2.4s, v1.4h, #0
913 ; CHECK-SD-NEXT:    ushll2 v4.4s, v1.8h, #0
914 ; CHECK-SD-NEXT:    ushll v5.4s, v0.4h, #0
915 ; CHECK-SD-NEXT:    ushll2 v6.4s, v0.8h, #0
916 ; CHECK-SD-NEXT:    ushll2 v1.2d, v2.4s, #0
917 ; CHECK-SD-NEXT:    ushll v0.2d, v2.2s, #0
918 ; CHECK-SD-NEXT:    ushll2 v3.2d, v4.4s, #0
919 ; CHECK-SD-NEXT:    ushll v2.2d, v4.2s, #0
920 ; CHECK-SD-NEXT:    ushll v4.2d, v5.2s, #0
921 ; CHECK-SD-NEXT:    ushll2 v7.2d, v6.4s, #0
922 ; CHECK-SD-NEXT:    ushll2 v5.2d, v5.4s, #0
923 ; CHECK-SD-NEXT:    ushll v6.2d, v6.2s, #0
924 ; CHECK-SD-NEXT:    ret
926 ; CHECK-GI-LABEL: zext_v16i8_v16i64:
927 ; CHECK-GI:       // %bb.0: // %entry
928 ; CHECK-GI-NEXT:    ushll v1.8h, v0.8b, #0
929 ; CHECK-GI-NEXT:    ushll2 v0.8h, v0.16b, #0
930 ; CHECK-GI-NEXT:    ushll v2.4s, v1.4h, #0
931 ; CHECK-GI-NEXT:    ushll2 v3.4s, v1.8h, #0
932 ; CHECK-GI-NEXT:    ushll v5.4s, v0.4h, #0
933 ; CHECK-GI-NEXT:    ushll2 v7.4s, v0.8h, #0
934 ; CHECK-GI-NEXT:    ushll v0.2d, v2.2s, #0
935 ; CHECK-GI-NEXT:    ushll2 v1.2d, v2.4s, #0
936 ; CHECK-GI-NEXT:    ushll v2.2d, v3.2s, #0
937 ; CHECK-GI-NEXT:    ushll2 v3.2d, v3.4s, #0
938 ; CHECK-GI-NEXT:    ushll v4.2d, v5.2s, #0
939 ; CHECK-GI-NEXT:    ushll2 v5.2d, v5.4s, #0
940 ; CHECK-GI-NEXT:    ushll v6.2d, v7.2s, #0
941 ; CHECK-GI-NEXT:    ushll2 v7.2d, v7.4s, #0
942 ; CHECK-GI-NEXT:    ret
943 entry:
944   %c = zext <16 x i8> %a to <16 x i64>
945   ret <16 x i64> %c
948 define <16 x i32> @zext_v16i16_v16i32(<16 x i16> %a) {
949 ; CHECK-SD-LABEL: zext_v16i16_v16i32:
950 ; CHECK-SD:       // %bb.0: // %entry
951 ; CHECK-SD-NEXT:    ushll v5.4s, v0.4h, #0
952 ; CHECK-SD-NEXT:    ushll2 v4.4s, v0.8h, #0
953 ; CHECK-SD-NEXT:    ushll2 v3.4s, v1.8h, #0
954 ; CHECK-SD-NEXT:    ushll v2.4s, v1.4h, #0
955 ; CHECK-SD-NEXT:    mov v0.16b, v5.16b
956 ; CHECK-SD-NEXT:    mov v1.16b, v4.16b
957 ; CHECK-SD-NEXT:    ret
959 ; CHECK-GI-LABEL: zext_v16i16_v16i32:
960 ; CHECK-GI:       // %bb.0: // %entry
961 ; CHECK-GI-NEXT:    ushll v4.4s, v0.4h, #0
962 ; CHECK-GI-NEXT:    ushll2 v5.4s, v0.8h, #0
963 ; CHECK-GI-NEXT:    ushll v2.4s, v1.4h, #0
964 ; CHECK-GI-NEXT:    ushll2 v3.4s, v1.8h, #0
965 ; CHECK-GI-NEXT:    mov v0.16b, v4.16b
966 ; CHECK-GI-NEXT:    mov v1.16b, v5.16b
967 ; CHECK-GI-NEXT:    ret
968 entry:
969   %c = zext <16 x i16> %a to <16 x i32>
970   ret <16 x i32> %c
973 define <16 x i64> @zext_v16i16_v16i64(<16 x i16> %a) {
974 ; CHECK-SD-LABEL: zext_v16i16_v16i64:
975 ; CHECK-SD:       // %bb.0: // %entry
976 ; CHECK-SD-NEXT:    ushll v2.4s, v0.4h, #0
977 ; CHECK-SD-NEXT:    ushll2 v4.4s, v0.8h, #0
978 ; CHECK-SD-NEXT:    ushll v5.4s, v1.4h, #0
979 ; CHECK-SD-NEXT:    ushll2 v6.4s, v1.8h, #0
980 ; CHECK-SD-NEXT:    ushll2 v1.2d, v2.4s, #0
981 ; CHECK-SD-NEXT:    ushll v0.2d, v2.2s, #0
982 ; CHECK-SD-NEXT:    ushll2 v3.2d, v4.4s, #0
983 ; CHECK-SD-NEXT:    ushll v2.2d, v4.2s, #0
984 ; CHECK-SD-NEXT:    ushll v4.2d, v5.2s, #0
985 ; CHECK-SD-NEXT:    ushll2 v7.2d, v6.4s, #0
986 ; CHECK-SD-NEXT:    ushll2 v5.2d, v5.4s, #0
987 ; CHECK-SD-NEXT:    ushll v6.2d, v6.2s, #0
988 ; CHECK-SD-NEXT:    ret
990 ; CHECK-GI-LABEL: zext_v16i16_v16i64:
991 ; CHECK-GI:       // %bb.0: // %entry
992 ; CHECK-GI-NEXT:    ushll v2.4s, v0.4h, #0
993 ; CHECK-GI-NEXT:    ushll2 v3.4s, v0.8h, #0
994 ; CHECK-GI-NEXT:    ushll v5.4s, v1.4h, #0
995 ; CHECK-GI-NEXT:    ushll2 v7.4s, v1.8h, #0
996 ; CHECK-GI-NEXT:    ushll v0.2d, v2.2s, #0
997 ; CHECK-GI-NEXT:    ushll2 v1.2d, v2.4s, #0
998 ; CHECK-GI-NEXT:    ushll v2.2d, v3.2s, #0
999 ; CHECK-GI-NEXT:    ushll2 v3.2d, v3.4s, #0
1000 ; CHECK-GI-NEXT:    ushll v4.2d, v5.2s, #0
1001 ; CHECK-GI-NEXT:    ushll2 v5.2d, v5.4s, #0
1002 ; CHECK-GI-NEXT:    ushll v6.2d, v7.2s, #0
1003 ; CHECK-GI-NEXT:    ushll2 v7.2d, v7.4s, #0
1004 ; CHECK-GI-NEXT:    ret
1005 entry:
1006   %c = zext <16 x i16> %a to <16 x i64>
1007   ret <16 x i64> %c
1010 define <16 x i64> @zext_v16i32_v16i64(<16 x i32> %a) {
1011 ; CHECK-SD-LABEL: zext_v16i32_v16i64:
1012 ; CHECK-SD:       // %bb.0: // %entry
1013 ; CHECK-SD-NEXT:    ushll2 v17.2d, v0.4s, #0
1014 ; CHECK-SD-NEXT:    ushll2 v16.2d, v1.4s, #0
1015 ; CHECK-SD-NEXT:    ushll v18.2d, v1.2s, #0
1016 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
1017 ; CHECK-SD-NEXT:    ushll v4.2d, v2.2s, #0
1018 ; CHECK-SD-NEXT:    ushll2 v5.2d, v2.4s, #0
1019 ; CHECK-SD-NEXT:    ushll2 v7.2d, v3.4s, #0
1020 ; CHECK-SD-NEXT:    ushll v6.2d, v3.2s, #0
1021 ; CHECK-SD-NEXT:    mov v1.16b, v17.16b
1022 ; CHECK-SD-NEXT:    mov v2.16b, v18.16b
1023 ; CHECK-SD-NEXT:    mov v3.16b, v16.16b
1024 ; CHECK-SD-NEXT:    ret
1026 ; CHECK-GI-LABEL: zext_v16i32_v16i64:
1027 ; CHECK-GI:       // %bb.0: // %entry
1028 ; CHECK-GI-NEXT:    ushll v16.2d, v0.2s, #0
1029 ; CHECK-GI-NEXT:    ushll2 v17.2d, v0.4s, #0
1030 ; CHECK-GI-NEXT:    ushll v18.2d, v1.2s, #0
1031 ; CHECK-GI-NEXT:    ushll2 v19.2d, v1.4s, #0
1032 ; CHECK-GI-NEXT:    ushll v4.2d, v2.2s, #0
1033 ; CHECK-GI-NEXT:    ushll2 v5.2d, v2.4s, #0
1034 ; CHECK-GI-NEXT:    ushll v6.2d, v3.2s, #0
1035 ; CHECK-GI-NEXT:    ushll2 v7.2d, v3.4s, #0
1036 ; CHECK-GI-NEXT:    mov v0.16b, v16.16b
1037 ; CHECK-GI-NEXT:    mov v1.16b, v17.16b
1038 ; CHECK-GI-NEXT:    mov v2.16b, v18.16b
1039 ; CHECK-GI-NEXT:    mov v3.16b, v19.16b
1040 ; CHECK-GI-NEXT:    ret
1041 entry:
1042   %c = zext <16 x i32> %a to <16 x i64>
1043   ret <16 x i64> %c
1046 define <16 x i16> @zext_v16i10_v16i16(<16 x i10> %a) {
1047 ; CHECK-LABEL: zext_v16i10_v16i16:
1048 ; CHECK:       // %bb.0: // %entry
1049 ; CHECK-NEXT:    ldr w8, [sp]
1050 ; CHECK-NEXT:    fmov s0, w0
1051 ; CHECK-NEXT:    ldr w9, [sp, #8]
1052 ; CHECK-NEXT:    fmov s1, w8
1053 ; CHECK-NEXT:    ldr w8, [sp, #16]
1054 ; CHECK-NEXT:    mov v0.h[1], w1
1055 ; CHECK-NEXT:    mov v1.h[1], w9
1056 ; CHECK-NEXT:    mov v0.h[2], w2
1057 ; CHECK-NEXT:    mov v1.h[2], w8
1058 ; CHECK-NEXT:    ldr w8, [sp, #24]
1059 ; CHECK-NEXT:    mov v0.h[3], w3
1060 ; CHECK-NEXT:    mov v1.h[3], w8
1061 ; CHECK-NEXT:    ldr w8, [sp, #32]
1062 ; CHECK-NEXT:    mov v0.h[4], w4
1063 ; CHECK-NEXT:    mov v1.h[4], w8
1064 ; CHECK-NEXT:    ldr w8, [sp, #40]
1065 ; CHECK-NEXT:    mov v0.h[5], w5
1066 ; CHECK-NEXT:    mov v1.h[5], w8
1067 ; CHECK-NEXT:    ldr w8, [sp, #48]
1068 ; CHECK-NEXT:    mov v0.h[6], w6
1069 ; CHECK-NEXT:    mov v1.h[6], w8
1070 ; CHECK-NEXT:    ldr w8, [sp, #56]
1071 ; CHECK-NEXT:    mov v0.h[7], w7
1072 ; CHECK-NEXT:    mov v1.h[7], w8
1073 ; CHECK-NEXT:    bic v0.8h, #252, lsl #8
1074 ; CHECK-NEXT:    bic v1.8h, #252, lsl #8
1075 ; CHECK-NEXT:    ret
1076 entry:
1077   %c = zext <16 x i10> %a to <16 x i16>
1078   ret <16 x i16> %c
1081 define <16 x i32> @zext_v16i10_v16i32(<16 x i10> %a) {
1082 ; CHECK-SD-LABEL: zext_v16i10_v16i32:
1083 ; CHECK-SD:       // %bb.0: // %entry
1084 ; CHECK-SD-NEXT:    ldr w8, [sp, #32]
1085 ; CHECK-SD-NEXT:    ldr w9, [sp]
1086 ; CHECK-SD-NEXT:    fmov s0, w0
1087 ; CHECK-SD-NEXT:    fmov s1, w4
1088 ; CHECK-SD-NEXT:    ldr w10, [sp, #40]
1089 ; CHECK-SD-NEXT:    ldr w11, [sp, #8]
1090 ; CHECK-SD-NEXT:    fmov s2, w9
1091 ; CHECK-SD-NEXT:    fmov s3, w8
1092 ; CHECK-SD-NEXT:    ldr w8, [sp, #48]
1093 ; CHECK-SD-NEXT:    mov v0.h[1], w1
1094 ; CHECK-SD-NEXT:    ldr w9, [sp, #16]
1095 ; CHECK-SD-NEXT:    movi v4.4s, #3, msl #8
1096 ; CHECK-SD-NEXT:    mov v1.h[1], w5
1097 ; CHECK-SD-NEXT:    mov v2.h[1], w11
1098 ; CHECK-SD-NEXT:    mov v3.h[1], w10
1099 ; CHECK-SD-NEXT:    mov v0.h[2], w2
1100 ; CHECK-SD-NEXT:    mov v1.h[2], w6
1101 ; CHECK-SD-NEXT:    mov v2.h[2], w9
1102 ; CHECK-SD-NEXT:    mov v3.h[2], w8
1103 ; CHECK-SD-NEXT:    ldr w8, [sp, #56]
1104 ; CHECK-SD-NEXT:    ldr w9, [sp, #24]
1105 ; CHECK-SD-NEXT:    mov v0.h[3], w3
1106 ; CHECK-SD-NEXT:    mov v1.h[3], w7
1107 ; CHECK-SD-NEXT:    mov v2.h[3], w9
1108 ; CHECK-SD-NEXT:    mov v3.h[3], w8
1109 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
1110 ; CHECK-SD-NEXT:    ushll v1.4s, v1.4h, #0
1111 ; CHECK-SD-NEXT:    ushll v2.4s, v2.4h, #0
1112 ; CHECK-SD-NEXT:    ushll v3.4s, v3.4h, #0
1113 ; CHECK-SD-NEXT:    and v0.16b, v0.16b, v4.16b
1114 ; CHECK-SD-NEXT:    and v1.16b, v1.16b, v4.16b
1115 ; CHECK-SD-NEXT:    and v2.16b, v2.16b, v4.16b
1116 ; CHECK-SD-NEXT:    and v3.16b, v3.16b, v4.16b
1117 ; CHECK-SD-NEXT:    ret
1119 ; CHECK-GI-LABEL: zext_v16i10_v16i32:
1120 ; CHECK-GI:       // %bb.0: // %entry
1121 ; CHECK-GI-NEXT:    fmov s4, w0
1122 ; CHECK-GI-NEXT:    fmov s5, w4
1123 ; CHECK-GI-NEXT:    ldr s2, [sp]
1124 ; CHECK-GI-NEXT:    ldr s0, [sp, #8]
1125 ; CHECK-GI-NEXT:    ldr s3, [sp, #32]
1126 ; CHECK-GI-NEXT:    ldr s1, [sp, #40]
1127 ; CHECK-GI-NEXT:    movi v6.4s, #3, msl #8
1128 ; CHECK-GI-NEXT:    mov v4.s[1], w1
1129 ; CHECK-GI-NEXT:    mov v5.s[1], w5
1130 ; CHECK-GI-NEXT:    mov v2.s[1], v0.s[0]
1131 ; CHECK-GI-NEXT:    mov v3.s[1], v1.s[0]
1132 ; CHECK-GI-NEXT:    ldr s0, [sp, #16]
1133 ; CHECK-GI-NEXT:    ldr s1, [sp, #48]
1134 ; CHECK-GI-NEXT:    mov v4.s[2], w2
1135 ; CHECK-GI-NEXT:    mov v5.s[2], w6
1136 ; CHECK-GI-NEXT:    mov v2.s[2], v0.s[0]
1137 ; CHECK-GI-NEXT:    mov v3.s[2], v1.s[0]
1138 ; CHECK-GI-NEXT:    ldr s0, [sp, #24]
1139 ; CHECK-GI-NEXT:    ldr s1, [sp, #56]
1140 ; CHECK-GI-NEXT:    mov v4.s[3], w3
1141 ; CHECK-GI-NEXT:    mov v5.s[3], w7
1142 ; CHECK-GI-NEXT:    mov v2.s[3], v0.s[0]
1143 ; CHECK-GI-NEXT:    mov v3.s[3], v1.s[0]
1144 ; CHECK-GI-NEXT:    and v0.16b, v4.16b, v6.16b
1145 ; CHECK-GI-NEXT:    and v1.16b, v5.16b, v6.16b
1146 ; CHECK-GI-NEXT:    and v2.16b, v2.16b, v6.16b
1147 ; CHECK-GI-NEXT:    and v3.16b, v3.16b, v6.16b
1148 ; CHECK-GI-NEXT:    ret
1149 entry:
1150   %c = zext <16 x i10> %a to <16 x i32>
1151   ret <16 x i32> %c
1154 define <16 x i64> @zext_v16i10_v16i64(<16 x i10> %a) {
1155 ; CHECK-SD-LABEL: zext_v16i10_v16i64:
1156 ; CHECK-SD:       // %bb.0: // %entry
1157 ; CHECK-SD-NEXT:    fmov s0, w2
1158 ; CHECK-SD-NEXT:    fmov s1, w0
1159 ; CHECK-SD-NEXT:    ldr s2, [sp]
1160 ; CHECK-SD-NEXT:    fmov s3, w4
1161 ; CHECK-SD-NEXT:    fmov s4, w6
1162 ; CHECK-SD-NEXT:    add x9, sp, #8
1163 ; CHECK-SD-NEXT:    ldr s5, [sp, #16]
1164 ; CHECK-SD-NEXT:    ldr s6, [sp, #32]
1165 ; CHECK-SD-NEXT:    ldr s7, [sp, #48]
1166 ; CHECK-SD-NEXT:    mov v1.s[1], w1
1167 ; CHECK-SD-NEXT:    mov v0.s[1], w3
1168 ; CHECK-SD-NEXT:    ld1 { v2.s }[1], [x9]
1169 ; CHECK-SD-NEXT:    mov v3.s[1], w5
1170 ; CHECK-SD-NEXT:    mov v4.s[1], w7
1171 ; CHECK-SD-NEXT:    add x9, sp, #24
1172 ; CHECK-SD-NEXT:    add x10, sp, #40
1173 ; CHECK-SD-NEXT:    add x11, sp, #56
1174 ; CHECK-SD-NEXT:    ld1 { v5.s }[1], [x9]
1175 ; CHECK-SD-NEXT:    ld1 { v6.s }[1], [x10]
1176 ; CHECK-SD-NEXT:    ld1 { v7.s }[1], [x11]
1177 ; CHECK-SD-NEXT:    mov w8, #1023 // =0x3ff
1178 ; CHECK-SD-NEXT:    ushll v1.2d, v1.2s, #0
1179 ; CHECK-SD-NEXT:    dup v16.2d, x8
1180 ; CHECK-SD-NEXT:    ushll v17.2d, v0.2s, #0
1181 ; CHECK-SD-NEXT:    ushll v3.2d, v3.2s, #0
1182 ; CHECK-SD-NEXT:    ushll v4.2d, v4.2s, #0
1183 ; CHECK-SD-NEXT:    ushll v18.2d, v2.2s, #0
1184 ; CHECK-SD-NEXT:    ushll v5.2d, v5.2s, #0
1185 ; CHECK-SD-NEXT:    ushll v6.2d, v6.2s, #0
1186 ; CHECK-SD-NEXT:    ushll v7.2d, v7.2s, #0
1187 ; CHECK-SD-NEXT:    and v0.16b, v1.16b, v16.16b
1188 ; CHECK-SD-NEXT:    and v1.16b, v17.16b, v16.16b
1189 ; CHECK-SD-NEXT:    and v2.16b, v3.16b, v16.16b
1190 ; CHECK-SD-NEXT:    and v3.16b, v4.16b, v16.16b
1191 ; CHECK-SD-NEXT:    and v4.16b, v18.16b, v16.16b
1192 ; CHECK-SD-NEXT:    and v5.16b, v5.16b, v16.16b
1193 ; CHECK-SD-NEXT:    and v6.16b, v6.16b, v16.16b
1194 ; CHECK-SD-NEXT:    and v7.16b, v7.16b, v16.16b
1195 ; CHECK-SD-NEXT:    ret
1197 ; CHECK-GI-LABEL: zext_v16i10_v16i64:
1198 ; CHECK-GI:       // %bb.0: // %entry
1199 ; CHECK-GI-NEXT:    fmov s7, w0
1200 ; CHECK-GI-NEXT:    fmov s17, w2
1201 ; CHECK-GI-NEXT:    ldr s0, [sp]
1202 ; CHECK-GI-NEXT:    fmov s18, w4
1203 ; CHECK-GI-NEXT:    fmov s19, w6
1204 ; CHECK-GI-NEXT:    ldr s1, [sp, #8]
1205 ; CHECK-GI-NEXT:    ldr s2, [sp, #16]
1206 ; CHECK-GI-NEXT:    ldr s3, [sp, #24]
1207 ; CHECK-GI-NEXT:    ldr s4, [sp, #32]
1208 ; CHECK-GI-NEXT:    ldr s5, [sp, #40]
1209 ; CHECK-GI-NEXT:    ldr s6, [sp, #48]
1210 ; CHECK-GI-NEXT:    ldr s16, [sp, #56]
1211 ; CHECK-GI-NEXT:    mov v7.s[1], w1
1212 ; CHECK-GI-NEXT:    mov v17.s[1], w3
1213 ; CHECK-GI-NEXT:    mov v18.s[1], w5
1214 ; CHECK-GI-NEXT:    mov v19.s[1], w7
1215 ; CHECK-GI-NEXT:    mov v0.s[1], v1.s[0]
1216 ; CHECK-GI-NEXT:    mov v2.s[1], v3.s[0]
1217 ; CHECK-GI-NEXT:    mov v4.s[1], v5.s[0]
1218 ; CHECK-GI-NEXT:    mov v6.s[1], v16.s[0]
1219 ; CHECK-GI-NEXT:    adrp x8, .LCPI54_0
1220 ; CHECK-GI-NEXT:    ldr q16, [x8, :lo12:.LCPI54_0]
1221 ; CHECK-GI-NEXT:    ushll v1.2d, v7.2s, #0
1222 ; CHECK-GI-NEXT:    ushll v3.2d, v17.2s, #0
1223 ; CHECK-GI-NEXT:    ushll v5.2d, v18.2s, #0
1224 ; CHECK-GI-NEXT:    ushll v7.2d, v19.2s, #0
1225 ; CHECK-GI-NEXT:    ushll v17.2d, v0.2s, #0
1226 ; CHECK-GI-NEXT:    ushll v18.2d, v2.2s, #0
1227 ; CHECK-GI-NEXT:    ushll v19.2d, v4.2s, #0
1228 ; CHECK-GI-NEXT:    ushll v20.2d, v6.2s, #0
1229 ; CHECK-GI-NEXT:    and v0.16b, v1.16b, v16.16b
1230 ; CHECK-GI-NEXT:    and v1.16b, v3.16b, v16.16b
1231 ; CHECK-GI-NEXT:    and v2.16b, v5.16b, v16.16b
1232 ; CHECK-GI-NEXT:    and v3.16b, v7.16b, v16.16b
1233 ; CHECK-GI-NEXT:    and v4.16b, v17.16b, v16.16b
1234 ; CHECK-GI-NEXT:    and v5.16b, v18.16b, v16.16b
1235 ; CHECK-GI-NEXT:    and v6.16b, v19.16b, v16.16b
1236 ; CHECK-GI-NEXT:    and v7.16b, v20.16b, v16.16b
1237 ; CHECK-GI-NEXT:    ret
1238 entry:
1239   %c = zext <16 x i10> %a to <16 x i64>
1240   ret <16 x i64> %c