DAG: Fix assuming f16 is the only 16-bit fp type in concat vector combine (#121637)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / zext.ll
blob0d5010113ce0b225557885e79a33156d580813d4
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 ; CHECK-GI:       warning: Instruction selection used fallback path for zext_v16i10_v16i16
7 define i16 @zext_i8_to_i16(i8 %a) {
8 ; CHECK-LABEL: zext_i8_to_i16:
9 ; CHECK:       // %bb.0: // %entry
10 ; CHECK-NEXT:    and w0, w0, #0xff
11 ; CHECK-NEXT:    ret
12 entry:
13   %c = zext i8 %a to i16
14   ret i16 %c
17 define i32 @zext_i8_to_i32(i8 %a) {
18 ; CHECK-LABEL: zext_i8_to_i32:
19 ; CHECK:       // %bb.0: // %entry
20 ; CHECK-NEXT:    and w0, w0, #0xff
21 ; CHECK-NEXT:    ret
22 entry:
23   %c = zext i8 %a to i32
24   ret i32 %c
27 define i64 @zext_i8_to_i64(i8 %a) {
28 ; CHECK-LABEL: zext_i8_to_i64:
29 ; CHECK:       // %bb.0: // %entry
30 ; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0
31 ; CHECK-NEXT:    and x0, x0, #0xff
32 ; CHECK-NEXT:    ret
33 entry:
34   %c = zext i8 %a to i64
35   ret i64 %c
38 define i10 @zext_i8_to_i10(i8 %a) {
39 ; CHECK-LABEL: zext_i8_to_i10:
40 ; CHECK:       // %bb.0: // %entry
41 ; CHECK-NEXT:    and w0, w0, #0xff
42 ; CHECK-NEXT:    ret
43 entry:
44   %c = zext i8 %a to i10
45   ret i10 %c
48 define i32 @zext_i16_to_i32(i16 %a) {
49 ; CHECK-LABEL: zext_i16_to_i32:
50 ; CHECK:       // %bb.0: // %entry
51 ; CHECK-NEXT:    and w0, w0, #0xffff
52 ; CHECK-NEXT:    ret
53 entry:
54   %c = zext i16 %a to i32
55   ret i32 %c
58 define i64 @zext_i16_to_i64(i16 %a) {
59 ; CHECK-LABEL: zext_i16_to_i64:
60 ; CHECK:       // %bb.0: // %entry
61 ; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0
62 ; CHECK-NEXT:    and x0, x0, #0xffff
63 ; CHECK-NEXT:    ret
64 entry:
65   %c = zext i16 %a to i64
66   ret i64 %c
69 define i64 @zext_i32_to_i64(i32 %a) {
70 ; CHECK-LABEL: zext_i32_to_i64:
71 ; CHECK:       // %bb.0: // %entry
72 ; CHECK-NEXT:    mov w0, w0
73 ; CHECK-NEXT:    ret
74 entry:
75   %c = zext i32 %a to i64
76   ret i64 %c
79 define i16 @zext_i10_to_i16(i10 %a) {
80 ; CHECK-LABEL: zext_i10_to_i16:
81 ; CHECK:       // %bb.0: // %entry
82 ; CHECK-NEXT:    and w0, w0, #0x3ff
83 ; CHECK-NEXT:    ret
84 entry:
85   %c = zext i10 %a to i16
86   ret i16 %c
89 define i32 @zext_i10_to_i32(i10 %a) {
90 ; CHECK-LABEL: zext_i10_to_i32:
91 ; CHECK:       // %bb.0: // %entry
92 ; CHECK-NEXT:    and w0, w0, #0x3ff
93 ; CHECK-NEXT:    ret
94 entry:
95   %c = zext i10 %a to i32
96   ret i32 %c
99 define i64 @zext_i10_to_i64(i10 %a) {
100 ; CHECK-LABEL: zext_i10_to_i64:
101 ; CHECK:       // %bb.0: // %entry
102 ; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0
103 ; CHECK-NEXT:    and x0, x0, #0x3ff
104 ; CHECK-NEXT:    ret
105 entry:
106   %c = zext i10 %a to i64
107   ret i64 %c
110 define <2 x i16> @zext_v2i8_v2i16(<2 x i8> %a) {
111 ; CHECK-LABEL: zext_v2i8_v2i16:
112 ; CHECK:       // %bb.0: // %entry
113 ; CHECK-NEXT:    movi d1, #0x0000ff000000ff
114 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
115 ; CHECK-NEXT:    ret
116 entry:
117   %c = zext <2 x i8> %a to <2 x i16>
118   ret <2 x i16> %c
121 define <2 x i32> @zext_v2i8_v2i32(<2 x i8> %a) {
122 ; CHECK-LABEL: zext_v2i8_v2i32:
123 ; CHECK:       // %bb.0: // %entry
124 ; CHECK-NEXT:    movi d1, #0x0000ff000000ff
125 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
126 ; CHECK-NEXT:    ret
127 entry:
128   %c = zext <2 x i8> %a to <2 x i32>
129   ret <2 x i32> %c
132 define <2 x i64> @zext_v2i8_v2i64(<2 x i8> %a) {
133 ; CHECK-SD-LABEL: zext_v2i8_v2i64:
134 ; CHECK-SD:       // %bb.0: // %entry
135 ; CHECK-SD-NEXT:    movi d1, #0x0000ff000000ff
136 ; CHECK-SD-NEXT:    and v0.8b, v0.8b, v1.8b
137 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
138 ; CHECK-SD-NEXT:    ret
140 ; CHECK-GI-LABEL: zext_v2i8_v2i64:
141 ; CHECK-GI:       // %bb.0: // %entry
142 ; CHECK-GI-NEXT:    movi v1.2d, #0x000000000000ff
143 ; CHECK-GI-NEXT:    ushll v0.2d, v0.2s, #0
144 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
145 ; CHECK-GI-NEXT:    ret
146 entry:
147   %c = zext <2 x i8> %a to <2 x i64>
148   ret <2 x i64> %c
151 define <2 x i32> @zext_v2i16_v2i32(<2 x i16> %a) {
152 ; CHECK-LABEL: zext_v2i16_v2i32:
153 ; CHECK:       // %bb.0: // %entry
154 ; CHECK-NEXT:    movi d1, #0x00ffff0000ffff
155 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
156 ; CHECK-NEXT:    ret
157 entry:
158   %c = zext <2 x i16> %a to <2 x i32>
159   ret <2 x i32> %c
162 define <2 x i64> @zext_v2i16_v2i64(<2 x i16> %a) {
163 ; CHECK-SD-LABEL: zext_v2i16_v2i64:
164 ; CHECK-SD:       // %bb.0: // %entry
165 ; CHECK-SD-NEXT:    movi d1, #0x00ffff0000ffff
166 ; CHECK-SD-NEXT:    and v0.8b, v0.8b, v1.8b
167 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
168 ; CHECK-SD-NEXT:    ret
170 ; CHECK-GI-LABEL: zext_v2i16_v2i64:
171 ; CHECK-GI:       // %bb.0: // %entry
172 ; CHECK-GI-NEXT:    movi v1.2d, #0x0000000000ffff
173 ; CHECK-GI-NEXT:    ushll v0.2d, v0.2s, #0
174 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
175 ; CHECK-GI-NEXT:    ret
176 entry:
177   %c = zext <2 x i16> %a to <2 x i64>
178   ret <2 x i64> %c
181 define <2 x i64> @zext_v2i32_v2i64(<2 x i32> %a) {
182 ; CHECK-LABEL: zext_v2i32_v2i64:
183 ; CHECK:       // %bb.0: // %entry
184 ; CHECK-NEXT:    ushll v0.2d, v0.2s, #0
185 ; CHECK-NEXT:    ret
186 entry:
187   %c = zext <2 x i32> %a to <2 x i64>
188   ret <2 x i64> %c
191 define <2 x i16> @zext_v2i10_v2i16(<2 x i10> %a) {
192 ; CHECK-LABEL: zext_v2i10_v2i16:
193 ; CHECK:       // %bb.0: // %entry
194 ; CHECK-NEXT:    movi v1.2s, #3, msl #8
195 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
196 ; CHECK-NEXT:    ret
197 entry:
198   %c = zext <2 x i10> %a to <2 x i16>
199   ret <2 x i16> %c
202 define <2 x i32> @zext_v2i10_v2i32(<2 x i10> %a) {
203 ; CHECK-LABEL: zext_v2i10_v2i32:
204 ; CHECK:       // %bb.0: // %entry
205 ; CHECK-NEXT:    movi v1.2s, #3, msl #8
206 ; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b
207 ; CHECK-NEXT:    ret
208 entry:
209   %c = zext <2 x i10> %a to <2 x i32>
210   ret <2 x i32> %c
213 define <2 x i64> @zext_v2i10_v2i64(<2 x i10> %a) {
214 ; CHECK-SD-LABEL: zext_v2i10_v2i64:
215 ; CHECK-SD:       // %bb.0: // %entry
216 ; CHECK-SD-NEXT:    movi v1.2s, #3, msl #8
217 ; CHECK-SD-NEXT:    and v0.8b, v0.8b, v1.8b
218 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
219 ; CHECK-SD-NEXT:    ret
221 ; CHECK-GI-LABEL: zext_v2i10_v2i64:
222 ; CHECK-GI:       // %bb.0: // %entry
223 ; CHECK-GI-NEXT:    adrp x8, .LCPI18_0
224 ; CHECK-GI-NEXT:    ushll v0.2d, v0.2s, #0
225 ; CHECK-GI-NEXT:    ldr q1, [x8, :lo12:.LCPI18_0]
226 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
227 ; CHECK-GI-NEXT:    ret
228 entry:
229   %c = zext <2 x i10> %a to <2 x i64>
230   ret <2 x i64> %c
233 define <3 x i16> @zext_v3i8_v3i16(<3 x i8> %a) {
234 ; CHECK-SD-LABEL: zext_v3i8_v3i16:
235 ; CHECK-SD:       // %bb.0: // %entry
236 ; CHECK-SD-NEXT:    fmov s0, w0
237 ; CHECK-SD-NEXT:    mov v0.h[1], w1
238 ; CHECK-SD-NEXT:    mov v0.h[2], w2
239 ; CHECK-SD-NEXT:    bic v0.4h, #255, lsl #8
240 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0
241 ; CHECK-SD-NEXT:    ret
243 ; CHECK-GI-LABEL: zext_v3i8_v3i16:
244 ; CHECK-GI:       // %bb.0: // %entry
245 ; CHECK-GI-NEXT:    and w8, w0, #0xff
246 ; CHECK-GI-NEXT:    and w9, w1, #0xff
247 ; CHECK-GI-NEXT:    fmov s0, w8
248 ; CHECK-GI-NEXT:    and w8, w2, #0xff
249 ; CHECK-GI-NEXT:    mov v0.h[1], w9
250 ; CHECK-GI-NEXT:    mov v0.h[2], w8
251 ; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0
252 ; CHECK-GI-NEXT:    ret
253 entry:
254   %c = zext <3 x i8> %a to <3 x i16>
255   ret <3 x i16> %c
258 define <3 x i32> @zext_v3i8_v3i32(<3 x i8> %a) {
259 ; CHECK-SD-LABEL: zext_v3i8_v3i32:
260 ; CHECK-SD:       // %bb.0: // %entry
261 ; CHECK-SD-NEXT:    fmov s0, w0
262 ; CHECK-SD-NEXT:    movi v1.2d, #0x0000ff000000ff
263 ; CHECK-SD-NEXT:    mov v0.h[1], w1
264 ; CHECK-SD-NEXT:    mov v0.h[2], w2
265 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
266 ; CHECK-SD-NEXT:    and v0.16b, v0.16b, v1.16b
267 ; CHECK-SD-NEXT:    ret
269 ; CHECK-GI-LABEL: zext_v3i8_v3i32:
270 ; CHECK-GI:       // %bb.0: // %entry
271 ; CHECK-GI-NEXT:    and w8, w0, #0xff
272 ; CHECK-GI-NEXT:    mov v0.s[0], w8
273 ; CHECK-GI-NEXT:    and w8, w1, #0xff
274 ; CHECK-GI-NEXT:    mov v0.s[1], w8
275 ; CHECK-GI-NEXT:    and w8, w2, #0xff
276 ; CHECK-GI-NEXT:    mov v0.s[2], w8
277 ; CHECK-GI-NEXT:    ret
278 entry:
279   %c = zext <3 x i8> %a to <3 x i32>
280   ret <3 x i32> %c
283 define <3 x i64> @zext_v3i8_v3i64(<3 x i8> %a) {
284 ; CHECK-SD-LABEL: zext_v3i8_v3i64:
285 ; CHECK-SD:       // %bb.0: // %entry
286 ; CHECK-SD-NEXT:    fmov s0, w0
287 ; CHECK-SD-NEXT:    movi v1.2d, #0x000000000000ff
288 ; CHECK-SD-NEXT:    fmov s3, w2
289 ; CHECK-SD-NEXT:    movi v2.2d, #0000000000000000
290 ; CHECK-SD-NEXT:    mov v0.s[1], w1
291 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
292 ; CHECK-SD-NEXT:    and v0.16b, v0.16b, v1.16b
293 ; CHECK-SD-NEXT:    ushll v1.2d, v3.2s, #0
294 ; CHECK-SD-NEXT:    mov v2.b[0], v1.b[0]
295 ; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #8
296 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0
297 ; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1
298 ; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q2
299 ; CHECK-SD-NEXT:    ret
301 ; CHECK-GI-LABEL: zext_v3i8_v3i64:
302 ; CHECK-GI:       // %bb.0: // %entry
303 ; CHECK-GI-NEXT:    // kill: def $w0 killed $w0 def $x0
304 ; CHECK-GI-NEXT:    // kill: def $w1 killed $w1 def $x1
305 ; CHECK-GI-NEXT:    // kill: def $w2 killed $w2 def $x2
306 ; CHECK-GI-NEXT:    and x8, x0, #0xff
307 ; CHECK-GI-NEXT:    and x9, x1, #0xff
308 ; CHECK-GI-NEXT:    and x10, x2, #0xff
309 ; CHECK-GI-NEXT:    fmov d0, x8
310 ; CHECK-GI-NEXT:    fmov d1, x9
311 ; CHECK-GI-NEXT:    fmov d2, x10
312 ; CHECK-GI-NEXT:    ret
313 entry:
314   %c = zext <3 x i8> %a to <3 x i64>
315   ret <3 x i64> %c
318 define <3 x i32> @zext_v3i16_v3i32(<3 x i16> %a) {
319 ; CHECK-SD-LABEL: zext_v3i16_v3i32:
320 ; CHECK-SD:       // %bb.0: // %entry
321 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
322 ; CHECK-SD-NEXT:    ret
324 ; CHECK-GI-LABEL: zext_v3i16_v3i32:
325 ; CHECK-GI:       // %bb.0: // %entry
326 ; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0
327 ; CHECK-GI-NEXT:    umov w8, v0.h[0]
328 ; CHECK-GI-NEXT:    umov w9, v0.h[1]
329 ; CHECK-GI-NEXT:    mov v1.s[0], w8
330 ; CHECK-GI-NEXT:    umov w8, v0.h[2]
331 ; CHECK-GI-NEXT:    mov v1.s[1], w9
332 ; CHECK-GI-NEXT:    mov v1.s[2], w8
333 ; CHECK-GI-NEXT:    mov v0.16b, v1.16b
334 ; CHECK-GI-NEXT:    ret
335 entry:
336   %c = zext <3 x i16> %a to <3 x i32>
337   ret <3 x i32> %c
340 define <3 x i64> @zext_v3i16_v3i64(<3 x i16> %a) {
341 ; CHECK-SD-LABEL: zext_v3i16_v3i64:
342 ; CHECK-SD:       // %bb.0: // %entry
343 ; CHECK-SD-NEXT:    ushll v2.4s, v0.4h, #0
344 ; CHECK-SD-NEXT:    ushll v0.2d, v2.2s, #0
345 ; CHECK-SD-NEXT:    ushll2 v2.2d, v2.4s, #0
346 ; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q2
347 ; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #8
348 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0
349 ; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1
350 ; CHECK-SD-NEXT:    ret
352 ; CHECK-GI-LABEL: zext_v3i16_v3i64:
353 ; CHECK-GI:       // %bb.0: // %entry
354 ; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0
355 ; CHECK-GI-NEXT:    umov w8, v0.h[0]
356 ; CHECK-GI-NEXT:    umov w9, v0.h[1]
357 ; CHECK-GI-NEXT:    umov w10, v0.h[2]
358 ; CHECK-GI-NEXT:    fmov d0, x8
359 ; CHECK-GI-NEXT:    fmov d1, x9
360 ; CHECK-GI-NEXT:    fmov d2, x10
361 ; CHECK-GI-NEXT:    ret
362 entry:
363   %c = zext <3 x i16> %a to <3 x i64>
364   ret <3 x i64> %c
367 define <3 x i64> @zext_v3i32_v3i64(<3 x i32> %a) {
368 ; CHECK-SD-LABEL: zext_v3i32_v3i64:
369 ; CHECK-SD:       // %bb.0: // %entry
370 ; CHECK-SD-NEXT:    ushll v3.2d, v0.2s, #0
371 ; CHECK-SD-NEXT:    ushll2 v2.2d, v0.4s, #0
372 ; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q2
373 ; CHECK-SD-NEXT:    fmov d0, d3
374 ; CHECK-SD-NEXT:    ext v1.16b, v3.16b, v3.16b, #8
375 ; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1
376 ; CHECK-SD-NEXT:    ret
378 ; CHECK-GI-LABEL: zext_v3i32_v3i64:
379 ; CHECK-GI:       // %bb.0: // %entry
380 ; CHECK-GI-NEXT:    mov w8, v0.s[0]
381 ; CHECK-GI-NEXT:    mov w9, v0.s[1]
382 ; CHECK-GI-NEXT:    mov w10, v0.s[2]
383 ; CHECK-GI-NEXT:    fmov d0, x8
384 ; CHECK-GI-NEXT:    fmov d1, x9
385 ; CHECK-GI-NEXT:    fmov d2, x10
386 ; CHECK-GI-NEXT:    ret
387 entry:
388   %c = zext <3 x i32> %a to <3 x i64>
389   ret <3 x i64> %c
392 define <3 x i16> @zext_v3i10_v3i16(<3 x i10> %a) {
393 ; CHECK-SD-LABEL: zext_v3i10_v3i16:
394 ; CHECK-SD:       // %bb.0: // %entry
395 ; CHECK-SD-NEXT:    fmov s0, w0
396 ; CHECK-SD-NEXT:    mov v0.h[1], w1
397 ; CHECK-SD-NEXT:    mov v0.h[2], w2
398 ; CHECK-SD-NEXT:    bic v0.4h, #252, lsl #8
399 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0
400 ; CHECK-SD-NEXT:    ret
402 ; CHECK-GI-LABEL: zext_v3i10_v3i16:
403 ; CHECK-GI:       // %bb.0: // %entry
404 ; CHECK-GI-NEXT:    and w8, w0, #0x3ff
405 ; CHECK-GI-NEXT:    and w9, w1, #0x3ff
406 ; CHECK-GI-NEXT:    fmov s0, w8
407 ; CHECK-GI-NEXT:    and w8, w2, #0x3ff
408 ; CHECK-GI-NEXT:    mov v0.h[1], w9
409 ; CHECK-GI-NEXT:    mov v0.h[2], w8
410 ; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0
411 ; CHECK-GI-NEXT:    ret
412 entry:
413   %c = zext <3 x i10> %a to <3 x i16>
414   ret <3 x i16> %c
417 define <3 x i32> @zext_v3i10_v3i32(<3 x i10> %a) {
418 ; CHECK-SD-LABEL: zext_v3i10_v3i32:
419 ; CHECK-SD:       // %bb.0: // %entry
420 ; CHECK-SD-NEXT:    fmov s0, w0
421 ; CHECK-SD-NEXT:    movi v1.4s, #3, msl #8
422 ; CHECK-SD-NEXT:    mov v0.h[1], w1
423 ; CHECK-SD-NEXT:    mov v0.h[2], w2
424 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
425 ; CHECK-SD-NEXT:    and v0.16b, v0.16b, v1.16b
426 ; CHECK-SD-NEXT:    ret
428 ; CHECK-GI-LABEL: zext_v3i10_v3i32:
429 ; CHECK-GI:       // %bb.0: // %entry
430 ; CHECK-GI-NEXT:    and w8, w0, #0x3ff
431 ; CHECK-GI-NEXT:    mov v0.s[0], w8
432 ; CHECK-GI-NEXT:    and w8, w1, #0x3ff
433 ; CHECK-GI-NEXT:    mov v0.s[1], w8
434 ; CHECK-GI-NEXT:    and w8, w2, #0x3ff
435 ; CHECK-GI-NEXT:    mov v0.s[2], w8
436 ; CHECK-GI-NEXT:    ret
437 entry:
438   %c = zext <3 x i10> %a to <3 x i32>
439   ret <3 x i32> %c
442 define <3 x i64> @zext_v3i10_v3i64(<3 x i10> %a) {
443 ; CHECK-SD-LABEL: zext_v3i10_v3i64:
444 ; CHECK-SD:       // %bb.0: // %entry
445 ; CHECK-SD-NEXT:    fmov s0, w0
446 ; CHECK-SD-NEXT:    fmov s1, w2
447 ; CHECK-SD-NEXT:    mov w8, #1023 // =0x3ff
448 ; CHECK-SD-NEXT:    dup v2.2d, x8
449 ; CHECK-SD-NEXT:    mov v0.s[1], w1
450 ; CHECK-SD-NEXT:    ushll v3.2d, v1.2s, #0
451 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
452 ; CHECK-SD-NEXT:    and v0.16b, v0.16b, v2.16b
453 ; CHECK-SD-NEXT:    and v2.8b, v3.8b, v2.8b
454 ; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #8
455 ; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0
456 ; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1
457 ; CHECK-SD-NEXT:    ret
459 ; CHECK-GI-LABEL: zext_v3i10_v3i64:
460 ; CHECK-GI:       // %bb.0: // %entry
461 ; CHECK-GI-NEXT:    // kill: def $w0 killed $w0 def $x0
462 ; CHECK-GI-NEXT:    // kill: def $w1 killed $w1 def $x1
463 ; CHECK-GI-NEXT:    // kill: def $w2 killed $w2 def $x2
464 ; CHECK-GI-NEXT:    and x8, x0, #0x3ff
465 ; CHECK-GI-NEXT:    and x9, x1, #0x3ff
466 ; CHECK-GI-NEXT:    and x10, x2, #0x3ff
467 ; CHECK-GI-NEXT:    fmov d0, x8
468 ; CHECK-GI-NEXT:    fmov d1, x9
469 ; CHECK-GI-NEXT:    fmov d2, x10
470 ; CHECK-GI-NEXT:    ret
471 entry:
472   %c = zext <3 x i10> %a to <3 x i64>
473   ret <3 x i64> %c
476 define <4 x i16> @zext_v4i8_v4i16(<4 x i8> %a) {
477 ; CHECK-SD-LABEL: zext_v4i8_v4i16:
478 ; CHECK-SD:       // %bb.0: // %entry
479 ; CHECK-SD-NEXT:    bic v0.4h, #255, lsl #8
480 ; CHECK-SD-NEXT:    ret
482 ; CHECK-GI-LABEL: zext_v4i8_v4i16:
483 ; CHECK-GI:       // %bb.0: // %entry
484 ; CHECK-GI-NEXT:    movi d1, #0xff00ff00ff00ff
485 ; CHECK-GI-NEXT:    and v0.8b, v0.8b, v1.8b
486 ; CHECK-GI-NEXT:    ret
487 entry:
488   %c = zext <4 x i8> %a to <4 x i16>
489   ret <4 x i16> %c
492 define <4 x i32> @zext_v4i8_v4i32(<4 x i8> %a) {
493 ; CHECK-SD-LABEL: zext_v4i8_v4i32:
494 ; CHECK-SD:       // %bb.0: // %entry
495 ; CHECK-SD-NEXT:    bic v0.4h, #255, lsl #8
496 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
497 ; CHECK-SD-NEXT:    ret
499 ; CHECK-GI-LABEL: zext_v4i8_v4i32:
500 ; CHECK-GI:       // %bb.0: // %entry
501 ; CHECK-GI-NEXT:    movi v1.2d, #0x0000ff000000ff
502 ; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #0
503 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
504 ; CHECK-GI-NEXT:    ret
505 entry:
506   %c = zext <4 x i8> %a to <4 x i32>
507   ret <4 x i32> %c
510 define <4 x i64> @zext_v4i8_v4i64(<4 x i8> %a) {
511 ; CHECK-SD-LABEL: zext_v4i8_v4i64:
512 ; CHECK-SD:       // %bb.0: // %entry
513 ; CHECK-SD-NEXT:    bic v0.4h, #255, lsl #8
514 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
515 ; CHECK-SD-NEXT:    ushll2 v1.2d, v0.4s, #0
516 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
517 ; CHECK-SD-NEXT:    ret
519 ; CHECK-GI-LABEL: zext_v4i8_v4i64:
520 ; CHECK-GI:       // %bb.0: // %entry
521 ; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #0
522 ; CHECK-GI-NEXT:    movi v1.2d, #0x000000000000ff
523 ; CHECK-GI-NEXT:    ushll v2.2d, v0.2s, #0
524 ; CHECK-GI-NEXT:    ushll2 v3.2d, v0.4s, #0
525 ; CHECK-GI-NEXT:    and v0.16b, v2.16b, v1.16b
526 ; CHECK-GI-NEXT:    and v1.16b, v3.16b, v1.16b
527 ; CHECK-GI-NEXT:    ret
528 entry:
529   %c = zext <4 x i8> %a to <4 x i64>
530   ret <4 x i64> %c
533 define <4 x i32> @zext_v4i16_v4i32(<4 x i16> %a) {
534 ; CHECK-LABEL: zext_v4i16_v4i32:
535 ; CHECK:       // %bb.0: // %entry
536 ; CHECK-NEXT:    ushll v0.4s, v0.4h, #0
537 ; CHECK-NEXT:    ret
538 entry:
539   %c = zext <4 x i16> %a to <4 x i32>
540   ret <4 x i32> %c
543 define <4 x i64> @zext_v4i16_v4i64(<4 x i16> %a) {
544 ; CHECK-SD-LABEL: zext_v4i16_v4i64:
545 ; CHECK-SD:       // %bb.0: // %entry
546 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
547 ; CHECK-SD-NEXT:    ushll2 v1.2d, v0.4s, #0
548 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
549 ; CHECK-SD-NEXT:    ret
551 ; CHECK-GI-LABEL: zext_v4i16_v4i64:
552 ; CHECK-GI:       // %bb.0: // %entry
553 ; CHECK-GI-NEXT:    ushll v1.4s, v0.4h, #0
554 ; CHECK-GI-NEXT:    ushll v0.2d, v1.2s, #0
555 ; CHECK-GI-NEXT:    ushll2 v1.2d, v1.4s, #0
556 ; CHECK-GI-NEXT:    ret
557 entry:
558   %c = zext <4 x i16> %a to <4 x i64>
559   ret <4 x i64> %c
562 define <4 x i64> @zext_v4i32_v4i64(<4 x i32> %a) {
563 ; CHECK-SD-LABEL: zext_v4i32_v4i64:
564 ; CHECK-SD:       // %bb.0: // %entry
565 ; CHECK-SD-NEXT:    ushll2 v1.2d, v0.4s, #0
566 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
567 ; CHECK-SD-NEXT:    ret
569 ; CHECK-GI-LABEL: zext_v4i32_v4i64:
570 ; CHECK-GI:       // %bb.0: // %entry
571 ; CHECK-GI-NEXT:    ushll v2.2d, v0.2s, #0
572 ; CHECK-GI-NEXT:    ushll2 v1.2d, v0.4s, #0
573 ; CHECK-GI-NEXT:    mov v0.16b, v2.16b
574 ; CHECK-GI-NEXT:    ret
575 entry:
576   %c = zext <4 x i32> %a to <4 x i64>
577   ret <4 x i64> %c
580 define <4 x i16> @zext_v4i10_v4i16(<4 x i10> %a) {
581 ; CHECK-SD-LABEL: zext_v4i10_v4i16:
582 ; CHECK-SD:       // %bb.0: // %entry
583 ; CHECK-SD-NEXT:    bic v0.4h, #252, lsl #8
584 ; CHECK-SD-NEXT:    ret
586 ; CHECK-GI-LABEL: zext_v4i10_v4i16:
587 ; CHECK-GI:       // %bb.0: // %entry
588 ; CHECK-GI-NEXT:    mvni v1.4h, #252, lsl #8
589 ; CHECK-GI-NEXT:    and v0.8b, v0.8b, v1.8b
590 ; CHECK-GI-NEXT:    ret
591 entry:
592   %c = zext <4 x i10> %a to <4 x i16>
593   ret <4 x i16> %c
596 define <4 x i32> @zext_v4i10_v4i32(<4 x i10> %a) {
597 ; CHECK-SD-LABEL: zext_v4i10_v4i32:
598 ; CHECK-SD:       // %bb.0: // %entry
599 ; CHECK-SD-NEXT:    bic v0.4h, #252, lsl #8
600 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
601 ; CHECK-SD-NEXT:    ret
603 ; CHECK-GI-LABEL: zext_v4i10_v4i32:
604 ; CHECK-GI:       // %bb.0: // %entry
605 ; CHECK-GI-NEXT:    movi v1.4s, #3, msl #8
606 ; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #0
607 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
608 ; CHECK-GI-NEXT:    ret
609 entry:
610   %c = zext <4 x i10> %a to <4 x i32>
611   ret <4 x i32> %c
614 define <4 x i64> @zext_v4i10_v4i64(<4 x i10> %a) {
615 ; CHECK-SD-LABEL: zext_v4i10_v4i64:
616 ; CHECK-SD:       // %bb.0: // %entry
617 ; CHECK-SD-NEXT:    bic v0.4h, #252, lsl #8
618 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
619 ; CHECK-SD-NEXT:    ushll2 v1.2d, v0.4s, #0
620 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
621 ; CHECK-SD-NEXT:    ret
623 ; CHECK-GI-LABEL: zext_v4i10_v4i64:
624 ; CHECK-GI:       // %bb.0: // %entry
625 ; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #0
626 ; CHECK-GI-NEXT:    adrp x8, .LCPI36_0
627 ; CHECK-GI-NEXT:    ldr q3, [x8, :lo12:.LCPI36_0]
628 ; CHECK-GI-NEXT:    ushll v1.2d, v0.2s, #0
629 ; CHECK-GI-NEXT:    ushll2 v2.2d, v0.4s, #0
630 ; CHECK-GI-NEXT:    and v0.16b, v1.16b, v3.16b
631 ; CHECK-GI-NEXT:    and v1.16b, v2.16b, v3.16b
632 ; CHECK-GI-NEXT:    ret
633 entry:
634   %c = zext <4 x i10> %a to <4 x i64>
635   ret <4 x i64> %c
638 define <8 x i16> @zext_v8i8_v8i16(<8 x i8> %a) {
639 ; CHECK-LABEL: zext_v8i8_v8i16:
640 ; CHECK:       // %bb.0: // %entry
641 ; CHECK-NEXT:    ushll v0.8h, v0.8b, #0
642 ; CHECK-NEXT:    ret
643 entry:
644   %c = zext <8 x i8> %a to <8 x i16>
645   ret <8 x i16> %c
648 define <8 x i32> @zext_v8i8_v8i32(<8 x i8> %a) {
649 ; CHECK-SD-LABEL: zext_v8i8_v8i32:
650 ; CHECK-SD:       // %bb.0: // %entry
651 ; CHECK-SD-NEXT:    ushll v0.8h, v0.8b, #0
652 ; CHECK-SD-NEXT:    ushll2 v1.4s, v0.8h, #0
653 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
654 ; CHECK-SD-NEXT:    ret
656 ; CHECK-GI-LABEL: zext_v8i8_v8i32:
657 ; CHECK-GI:       // %bb.0: // %entry
658 ; CHECK-GI-NEXT:    ushll v1.8h, v0.8b, #0
659 ; CHECK-GI-NEXT:    ushll v0.4s, v1.4h, #0
660 ; CHECK-GI-NEXT:    ushll2 v1.4s, v1.8h, #0
661 ; CHECK-GI-NEXT:    ret
662 entry:
663   %c = zext <8 x i8> %a to <8 x i32>
664   ret <8 x i32> %c
667 define <8 x i64> @zext_v8i8_v8i64(<8 x i8> %a) {
668 ; CHECK-SD-LABEL: zext_v8i8_v8i64:
669 ; CHECK-SD:       // %bb.0: // %entry
670 ; CHECK-SD-NEXT:    ushll v0.8h, v0.8b, #0
671 ; CHECK-SD-NEXT:    ushll v1.4s, v0.4h, #0
672 ; CHECK-SD-NEXT:    ushll2 v2.4s, v0.8h, #0
673 ; CHECK-SD-NEXT:    ushll v0.2d, v1.2s, #0
674 ; CHECK-SD-NEXT:    ushll2 v3.2d, v2.4s, #0
675 ; CHECK-SD-NEXT:    ushll2 v1.2d, v1.4s, #0
676 ; CHECK-SD-NEXT:    ushll v2.2d, v2.2s, #0
677 ; CHECK-SD-NEXT:    ret
679 ; CHECK-GI-LABEL: zext_v8i8_v8i64:
680 ; CHECK-GI:       // %bb.0: // %entry
681 ; CHECK-GI-NEXT:    ushll v0.8h, v0.8b, #0
682 ; CHECK-GI-NEXT:    ushll v1.4s, v0.4h, #0
683 ; CHECK-GI-NEXT:    ushll2 v3.4s, v0.8h, #0
684 ; CHECK-GI-NEXT:    ushll v0.2d, v1.2s, #0
685 ; CHECK-GI-NEXT:    ushll2 v1.2d, v1.4s, #0
686 ; CHECK-GI-NEXT:    ushll v2.2d, v3.2s, #0
687 ; CHECK-GI-NEXT:    ushll2 v3.2d, v3.4s, #0
688 ; CHECK-GI-NEXT:    ret
689 entry:
690   %c = zext <8 x i8> %a to <8 x i64>
691   ret <8 x i64> %c
694 define <8 x i32> @zext_v8i16_v8i32(<8 x i16> %a) {
695 ; CHECK-SD-LABEL: zext_v8i16_v8i32:
696 ; CHECK-SD:       // %bb.0: // %entry
697 ; CHECK-SD-NEXT:    ushll2 v1.4s, v0.8h, #0
698 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
699 ; CHECK-SD-NEXT:    ret
701 ; CHECK-GI-LABEL: zext_v8i16_v8i32:
702 ; CHECK-GI:       // %bb.0: // %entry
703 ; CHECK-GI-NEXT:    ushll v2.4s, v0.4h, #0
704 ; CHECK-GI-NEXT:    ushll2 v1.4s, v0.8h, #0
705 ; CHECK-GI-NEXT:    mov v0.16b, v2.16b
706 ; CHECK-GI-NEXT:    ret
707 entry:
708   %c = zext <8 x i16> %a to <8 x i32>
709   ret <8 x i32> %c
712 define <8 x i64> @zext_v8i16_v8i64(<8 x i16> %a) {
713 ; CHECK-SD-LABEL: zext_v8i16_v8i64:
714 ; CHECK-SD:       // %bb.0: // %entry
715 ; CHECK-SD-NEXT:    ushll v1.4s, v0.4h, #0
716 ; CHECK-SD-NEXT:    ushll2 v2.4s, v0.8h, #0
717 ; CHECK-SD-NEXT:    ushll v0.2d, v1.2s, #0
718 ; CHECK-SD-NEXT:    ushll2 v3.2d, v2.4s, #0
719 ; CHECK-SD-NEXT:    ushll2 v1.2d, v1.4s, #0
720 ; CHECK-SD-NEXT:    ushll v2.2d, v2.2s, #0
721 ; CHECK-SD-NEXT:    ret
723 ; CHECK-GI-LABEL: zext_v8i16_v8i64:
724 ; CHECK-GI:       // %bb.0: // %entry
725 ; CHECK-GI-NEXT:    ushll v1.4s, v0.4h, #0
726 ; CHECK-GI-NEXT:    ushll2 v3.4s, v0.8h, #0
727 ; CHECK-GI-NEXT:    ushll v0.2d, v1.2s, #0
728 ; CHECK-GI-NEXT:    ushll2 v1.2d, v1.4s, #0
729 ; CHECK-GI-NEXT:    ushll v2.2d, v3.2s, #0
730 ; CHECK-GI-NEXT:    ushll2 v3.2d, v3.4s, #0
731 ; CHECK-GI-NEXT:    ret
732 entry:
733   %c = zext <8 x i16> %a to <8 x i64>
734   ret <8 x i64> %c
737 define <8 x i64> @zext_v8i32_v8i64(<8 x i32> %a) {
738 ; CHECK-SD-LABEL: zext_v8i32_v8i64:
739 ; CHECK-SD:       // %bb.0: // %entry
740 ; CHECK-SD-NEXT:    ushll v5.2d, v0.2s, #0
741 ; CHECK-SD-NEXT:    ushll2 v4.2d, v0.4s, #0
742 ; CHECK-SD-NEXT:    ushll2 v3.2d, v1.4s, #0
743 ; CHECK-SD-NEXT:    ushll v2.2d, v1.2s, #0
744 ; CHECK-SD-NEXT:    mov v0.16b, v5.16b
745 ; CHECK-SD-NEXT:    mov v1.16b, v4.16b
746 ; CHECK-SD-NEXT:    ret
748 ; CHECK-GI-LABEL: zext_v8i32_v8i64:
749 ; CHECK-GI:       // %bb.0: // %entry
750 ; CHECK-GI-NEXT:    ushll v4.2d, v0.2s, #0
751 ; CHECK-GI-NEXT:    ushll2 v5.2d, v0.4s, #0
752 ; CHECK-GI-NEXT:    ushll v2.2d, v1.2s, #0
753 ; CHECK-GI-NEXT:    ushll2 v3.2d, v1.4s, #0
754 ; CHECK-GI-NEXT:    mov v0.16b, v4.16b
755 ; CHECK-GI-NEXT:    mov v1.16b, v5.16b
756 ; CHECK-GI-NEXT:    ret
757 entry:
758   %c = zext <8 x i32> %a to <8 x i64>
759   ret <8 x i64> %c
762 define <8 x i16> @zext_v8i10_v8i16(<8 x i10> %a) {
763 ; CHECK-SD-LABEL: zext_v8i10_v8i16:
764 ; CHECK-SD:       // %bb.0: // %entry
765 ; CHECK-SD-NEXT:    bic v0.8h, #252, lsl #8
766 ; CHECK-SD-NEXT:    ret
768 ; CHECK-GI-LABEL: zext_v8i10_v8i16:
769 ; CHECK-GI:       // %bb.0: // %entry
770 ; CHECK-GI-NEXT:    mvni v1.8h, #252, lsl #8
771 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v1.16b
772 ; CHECK-GI-NEXT:    ret
773 entry:
774   %c = zext <8 x i10> %a to <8 x i16>
775   ret <8 x i16> %c
778 define <8 x i32> @zext_v8i10_v8i32(<8 x i10> %a) {
779 ; CHECK-SD-LABEL: zext_v8i10_v8i32:
780 ; CHECK-SD:       // %bb.0: // %entry
781 ; CHECK-SD-NEXT:    bic v0.8h, #252, lsl #8
782 ; CHECK-SD-NEXT:    ushll2 v1.4s, v0.8h, #0
783 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
784 ; CHECK-SD-NEXT:    ret
786 ; CHECK-GI-LABEL: zext_v8i10_v8i32:
787 ; CHECK-GI:       // %bb.0: // %entry
788 ; CHECK-GI-NEXT:    movi v1.4s, #3, msl #8
789 ; CHECK-GI-NEXT:    ushll v2.4s, v0.4h, #0
790 ; CHECK-GI-NEXT:    ushll2 v3.4s, v0.8h, #0
791 ; CHECK-GI-NEXT:    and v0.16b, v2.16b, v1.16b
792 ; CHECK-GI-NEXT:    and v1.16b, v3.16b, v1.16b
793 ; CHECK-GI-NEXT:    ret
794 entry:
795   %c = zext <8 x i10> %a to <8 x i32>
796   ret <8 x i32> %c
799 define <8 x i64> @zext_v8i10_v8i64(<8 x i10> %a) {
800 ; CHECK-SD-LABEL: zext_v8i10_v8i64:
801 ; CHECK-SD:       // %bb.0: // %entry
802 ; CHECK-SD-NEXT:    bic v0.8h, #252, lsl #8
803 ; CHECK-SD-NEXT:    ushll v1.4s, v0.4h, #0
804 ; CHECK-SD-NEXT:    ushll2 v2.4s, v0.8h, #0
805 ; CHECK-SD-NEXT:    ushll v0.2d, v1.2s, #0
806 ; CHECK-SD-NEXT:    ushll2 v3.2d, v2.4s, #0
807 ; CHECK-SD-NEXT:    ushll2 v1.2d, v1.4s, #0
808 ; CHECK-SD-NEXT:    ushll v2.2d, v2.2s, #0
809 ; CHECK-SD-NEXT:    ret
811 ; CHECK-GI-LABEL: zext_v8i10_v8i64:
812 ; CHECK-GI:       // %bb.0: // %entry
813 ; CHECK-GI-NEXT:    ushll v1.4s, v0.4h, #0
814 ; CHECK-GI-NEXT:    ushll2 v0.4s, v0.8h, #0
815 ; CHECK-GI-NEXT:    adrp x8, .LCPI45_0
816 ; CHECK-GI-NEXT:    ldr q3, [x8, :lo12:.LCPI45_0]
817 ; CHECK-GI-NEXT:    ushll v2.2d, v1.2s, #0
818 ; CHECK-GI-NEXT:    ushll2 v1.2d, v1.4s, #0
819 ; CHECK-GI-NEXT:    ushll v4.2d, v0.2s, #0
820 ; CHECK-GI-NEXT:    ushll2 v5.2d, v0.4s, #0
821 ; CHECK-GI-NEXT:    and v0.16b, v2.16b, v3.16b
822 ; CHECK-GI-NEXT:    and v1.16b, v1.16b, v3.16b
823 ; CHECK-GI-NEXT:    and v2.16b, v4.16b, v3.16b
824 ; CHECK-GI-NEXT:    and v3.16b, v5.16b, v3.16b
825 ; CHECK-GI-NEXT:    ret
826 entry:
827   %c = zext <8 x i10> %a to <8 x i64>
828   ret <8 x i64> %c
831 define <16 x i16> @zext_v16i8_v16i16(<16 x i8> %a) {
832 ; CHECK-SD-LABEL: zext_v16i8_v16i16:
833 ; CHECK-SD:       // %bb.0: // %entry
834 ; CHECK-SD-NEXT:    ushll2 v1.8h, v0.16b, #0
835 ; CHECK-SD-NEXT:    ushll v0.8h, v0.8b, #0
836 ; CHECK-SD-NEXT:    ret
838 ; CHECK-GI-LABEL: zext_v16i8_v16i16:
839 ; CHECK-GI:       // %bb.0: // %entry
840 ; CHECK-GI-NEXT:    ushll v2.8h, v0.8b, #0
841 ; CHECK-GI-NEXT:    ushll2 v1.8h, v0.16b, #0
842 ; CHECK-GI-NEXT:    mov v0.16b, v2.16b
843 ; CHECK-GI-NEXT:    ret
844 entry:
845   %c = zext <16 x i8> %a to <16 x i16>
846   ret <16 x i16> %c
849 define <16 x i32> @zext_v16i8_v16i32(<16 x i8> %a) {
850 ; CHECK-SD-LABEL: zext_v16i8_v16i32:
851 ; CHECK-SD:       // %bb.0: // %entry
852 ; CHECK-SD-NEXT:    ushll v1.8h, v0.8b, #0
853 ; CHECK-SD-NEXT:    ushll2 v2.8h, v0.16b, #0
854 ; CHECK-SD-NEXT:    ushll v0.4s, v1.4h, #0
855 ; CHECK-SD-NEXT:    ushll2 v3.4s, v2.8h, #0
856 ; CHECK-SD-NEXT:    ushll2 v1.4s, v1.8h, #0
857 ; CHECK-SD-NEXT:    ushll v2.4s, v2.4h, #0
858 ; CHECK-SD-NEXT:    ret
860 ; CHECK-GI-LABEL: zext_v16i8_v16i32:
861 ; CHECK-GI:       // %bb.0: // %entry
862 ; CHECK-GI-NEXT:    ushll v1.8h, v0.8b, #0
863 ; CHECK-GI-NEXT:    ushll2 v3.8h, v0.16b, #0
864 ; CHECK-GI-NEXT:    ushll v0.4s, v1.4h, #0
865 ; CHECK-GI-NEXT:    ushll2 v1.4s, v1.8h, #0
866 ; CHECK-GI-NEXT:    ushll v2.4s, v3.4h, #0
867 ; CHECK-GI-NEXT:    ushll2 v3.4s, v3.8h, #0
868 ; CHECK-GI-NEXT:    ret
869 entry:
870   %c = zext <16 x i8> %a to <16 x i32>
871   ret <16 x i32> %c
874 define <16 x i64> @zext_v16i8_v16i64(<16 x i8> %a) {
875 ; CHECK-SD-LABEL: zext_v16i8_v16i64:
876 ; CHECK-SD:       // %bb.0: // %entry
877 ; CHECK-SD-NEXT:    ushll v1.8h, v0.8b, #0
878 ; CHECK-SD-NEXT:    ushll2 v0.8h, v0.16b, #0
879 ; CHECK-SD-NEXT:    ushll v2.4s, v1.4h, #0
880 ; CHECK-SD-NEXT:    ushll2 v4.4s, v1.8h, #0
881 ; CHECK-SD-NEXT:    ushll v5.4s, v0.4h, #0
882 ; CHECK-SD-NEXT:    ushll2 v6.4s, v0.8h, #0
883 ; CHECK-SD-NEXT:    ushll2 v1.2d, v2.4s, #0
884 ; CHECK-SD-NEXT:    ushll v0.2d, v2.2s, #0
885 ; CHECK-SD-NEXT:    ushll2 v3.2d, v4.4s, #0
886 ; CHECK-SD-NEXT:    ushll v2.2d, v4.2s, #0
887 ; CHECK-SD-NEXT:    ushll v4.2d, v5.2s, #0
888 ; CHECK-SD-NEXT:    ushll2 v7.2d, v6.4s, #0
889 ; CHECK-SD-NEXT:    ushll2 v5.2d, v5.4s, #0
890 ; CHECK-SD-NEXT:    ushll v6.2d, v6.2s, #0
891 ; CHECK-SD-NEXT:    ret
893 ; CHECK-GI-LABEL: zext_v16i8_v16i64:
894 ; CHECK-GI:       // %bb.0: // %entry
895 ; CHECK-GI-NEXT:    ushll v1.8h, v0.8b, #0
896 ; CHECK-GI-NEXT:    ushll2 v0.8h, v0.16b, #0
897 ; CHECK-GI-NEXT:    ushll v2.4s, v1.4h, #0
898 ; CHECK-GI-NEXT:    ushll2 v3.4s, v1.8h, #0
899 ; CHECK-GI-NEXT:    ushll v5.4s, v0.4h, #0
900 ; CHECK-GI-NEXT:    ushll2 v7.4s, v0.8h, #0
901 ; CHECK-GI-NEXT:    ushll v0.2d, v2.2s, #0
902 ; CHECK-GI-NEXT:    ushll2 v1.2d, v2.4s, #0
903 ; CHECK-GI-NEXT:    ushll v2.2d, v3.2s, #0
904 ; CHECK-GI-NEXT:    ushll2 v3.2d, v3.4s, #0
905 ; CHECK-GI-NEXT:    ushll v4.2d, v5.2s, #0
906 ; CHECK-GI-NEXT:    ushll2 v5.2d, v5.4s, #0
907 ; CHECK-GI-NEXT:    ushll v6.2d, v7.2s, #0
908 ; CHECK-GI-NEXT:    ushll2 v7.2d, v7.4s, #0
909 ; CHECK-GI-NEXT:    ret
910 entry:
911   %c = zext <16 x i8> %a to <16 x i64>
912   ret <16 x i64> %c
915 define <16 x i32> @zext_v16i16_v16i32(<16 x i16> %a) {
916 ; CHECK-SD-LABEL: zext_v16i16_v16i32:
917 ; CHECK-SD:       // %bb.0: // %entry
918 ; CHECK-SD-NEXT:    ushll v5.4s, v0.4h, #0
919 ; CHECK-SD-NEXT:    ushll2 v4.4s, v0.8h, #0
920 ; CHECK-SD-NEXT:    ushll2 v3.4s, v1.8h, #0
921 ; CHECK-SD-NEXT:    ushll v2.4s, v1.4h, #0
922 ; CHECK-SD-NEXT:    mov v0.16b, v5.16b
923 ; CHECK-SD-NEXT:    mov v1.16b, v4.16b
924 ; CHECK-SD-NEXT:    ret
926 ; CHECK-GI-LABEL: zext_v16i16_v16i32:
927 ; CHECK-GI:       // %bb.0: // %entry
928 ; CHECK-GI-NEXT:    ushll v4.4s, v0.4h, #0
929 ; CHECK-GI-NEXT:    ushll2 v5.4s, v0.8h, #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:    mov v0.16b, v4.16b
933 ; CHECK-GI-NEXT:    mov v1.16b, v5.16b
934 ; CHECK-GI-NEXT:    ret
935 entry:
936   %c = zext <16 x i16> %a to <16 x i32>
937   ret <16 x i32> %c
940 define <16 x i64> @zext_v16i16_v16i64(<16 x i16> %a) {
941 ; CHECK-SD-LABEL: zext_v16i16_v16i64:
942 ; CHECK-SD:       // %bb.0: // %entry
943 ; CHECK-SD-NEXT:    ushll v2.4s, v0.4h, #0
944 ; CHECK-SD-NEXT:    ushll2 v4.4s, v0.8h, #0
945 ; CHECK-SD-NEXT:    ushll v5.4s, v1.4h, #0
946 ; CHECK-SD-NEXT:    ushll2 v6.4s, v1.8h, #0
947 ; CHECK-SD-NEXT:    ushll2 v1.2d, v2.4s, #0
948 ; CHECK-SD-NEXT:    ushll v0.2d, v2.2s, #0
949 ; CHECK-SD-NEXT:    ushll2 v3.2d, v4.4s, #0
950 ; CHECK-SD-NEXT:    ushll v2.2d, v4.2s, #0
951 ; CHECK-SD-NEXT:    ushll v4.2d, v5.2s, #0
952 ; CHECK-SD-NEXT:    ushll2 v7.2d, v6.4s, #0
953 ; CHECK-SD-NEXT:    ushll2 v5.2d, v5.4s, #0
954 ; CHECK-SD-NEXT:    ushll v6.2d, v6.2s, #0
955 ; CHECK-SD-NEXT:    ret
957 ; CHECK-GI-LABEL: zext_v16i16_v16i64:
958 ; CHECK-GI:       // %bb.0: // %entry
959 ; CHECK-GI-NEXT:    ushll v2.4s, v0.4h, #0
960 ; CHECK-GI-NEXT:    ushll2 v3.4s, v0.8h, #0
961 ; CHECK-GI-NEXT:    ushll v5.4s, v1.4h, #0
962 ; CHECK-GI-NEXT:    ushll2 v7.4s, v1.8h, #0
963 ; CHECK-GI-NEXT:    ushll v0.2d, v2.2s, #0
964 ; CHECK-GI-NEXT:    ushll2 v1.2d, v2.4s, #0
965 ; CHECK-GI-NEXT:    ushll v2.2d, v3.2s, #0
966 ; CHECK-GI-NEXT:    ushll2 v3.2d, v3.4s, #0
967 ; CHECK-GI-NEXT:    ushll v4.2d, v5.2s, #0
968 ; CHECK-GI-NEXT:    ushll2 v5.2d, v5.4s, #0
969 ; CHECK-GI-NEXT:    ushll v6.2d, v7.2s, #0
970 ; CHECK-GI-NEXT:    ushll2 v7.2d, v7.4s, #0
971 ; CHECK-GI-NEXT:    ret
972 entry:
973   %c = zext <16 x i16> %a to <16 x i64>
974   ret <16 x i64> %c
977 define <16 x i64> @zext_v16i32_v16i64(<16 x i32> %a) {
978 ; CHECK-SD-LABEL: zext_v16i32_v16i64:
979 ; CHECK-SD:       // %bb.0: // %entry
980 ; CHECK-SD-NEXT:    ushll2 v17.2d, v0.4s, #0
981 ; CHECK-SD-NEXT:    ushll2 v16.2d, v1.4s, #0
982 ; CHECK-SD-NEXT:    ushll v18.2d, v1.2s, #0
983 ; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0
984 ; CHECK-SD-NEXT:    ushll v4.2d, v2.2s, #0
985 ; CHECK-SD-NEXT:    ushll2 v5.2d, v2.4s, #0
986 ; CHECK-SD-NEXT:    ushll2 v7.2d, v3.4s, #0
987 ; CHECK-SD-NEXT:    ushll v6.2d, v3.2s, #0
988 ; CHECK-SD-NEXT:    mov v1.16b, v17.16b
989 ; CHECK-SD-NEXT:    mov v2.16b, v18.16b
990 ; CHECK-SD-NEXT:    mov v3.16b, v16.16b
991 ; CHECK-SD-NEXT:    ret
993 ; CHECK-GI-LABEL: zext_v16i32_v16i64:
994 ; CHECK-GI:       // %bb.0: // %entry
995 ; CHECK-GI-NEXT:    ushll v16.2d, v0.2s, #0
996 ; CHECK-GI-NEXT:    ushll2 v17.2d, v0.4s, #0
997 ; CHECK-GI-NEXT:    ushll v18.2d, v1.2s, #0
998 ; CHECK-GI-NEXT:    ushll2 v19.2d, v1.4s, #0
999 ; CHECK-GI-NEXT:    ushll v4.2d, v2.2s, #0
1000 ; CHECK-GI-NEXT:    ushll2 v5.2d, v2.4s, #0
1001 ; CHECK-GI-NEXT:    ushll v6.2d, v3.2s, #0
1002 ; CHECK-GI-NEXT:    ushll2 v7.2d, v3.4s, #0
1003 ; CHECK-GI-NEXT:    mov v0.16b, v16.16b
1004 ; CHECK-GI-NEXT:    mov v1.16b, v17.16b
1005 ; CHECK-GI-NEXT:    mov v2.16b, v18.16b
1006 ; CHECK-GI-NEXT:    mov v3.16b, v19.16b
1007 ; CHECK-GI-NEXT:    ret
1008 entry:
1009   %c = zext <16 x i32> %a to <16 x i64>
1010   ret <16 x i64> %c
1013 define <16 x i16> @zext_v16i10_v16i16(<16 x i10> %a) {
1014 ; CHECK-LABEL: zext_v16i10_v16i16:
1015 ; CHECK:       // %bb.0: // %entry
1016 ; CHECK-NEXT:    ldr w8, [sp]
1017 ; CHECK-NEXT:    fmov s0, w0
1018 ; CHECK-NEXT:    ldr w9, [sp, #8]
1019 ; CHECK-NEXT:    fmov s1, w8
1020 ; CHECK-NEXT:    ldr w8, [sp, #16]
1021 ; CHECK-NEXT:    mov v0.h[1], w1
1022 ; CHECK-NEXT:    mov v1.h[1], w9
1023 ; CHECK-NEXT:    mov v0.h[2], w2
1024 ; CHECK-NEXT:    mov v1.h[2], w8
1025 ; CHECK-NEXT:    ldr w8, [sp, #24]
1026 ; CHECK-NEXT:    mov v0.h[3], w3
1027 ; CHECK-NEXT:    mov v1.h[3], w8
1028 ; CHECK-NEXT:    ldr w8, [sp, #32]
1029 ; CHECK-NEXT:    mov v0.h[4], w4
1030 ; CHECK-NEXT:    mov v1.h[4], w8
1031 ; CHECK-NEXT:    ldr w8, [sp, #40]
1032 ; CHECK-NEXT:    mov v0.h[5], w5
1033 ; CHECK-NEXT:    mov v1.h[5], w8
1034 ; CHECK-NEXT:    ldr w8, [sp, #48]
1035 ; CHECK-NEXT:    mov v0.h[6], w6
1036 ; CHECK-NEXT:    mov v1.h[6], w8
1037 ; CHECK-NEXT:    ldr w8, [sp, #56]
1038 ; CHECK-NEXT:    mov v0.h[7], w7
1039 ; CHECK-NEXT:    mov v1.h[7], w8
1040 ; CHECK-NEXT:    bic v0.8h, #252, lsl #8
1041 ; CHECK-NEXT:    bic v1.8h, #252, lsl #8
1042 ; CHECK-NEXT:    ret
1043 entry:
1044   %c = zext <16 x i10> %a to <16 x i16>
1045   ret <16 x i16> %c
1048 define <16 x i32> @zext_v16i10_v16i32(<16 x i10> %a) {
1049 ; CHECK-SD-LABEL: zext_v16i10_v16i32:
1050 ; CHECK-SD:       // %bb.0: // %entry
1051 ; CHECK-SD-NEXT:    ldr w8, [sp, #32]
1052 ; CHECK-SD-NEXT:    ldr w9, [sp]
1053 ; CHECK-SD-NEXT:    fmov s0, w0
1054 ; CHECK-SD-NEXT:    fmov s1, w4
1055 ; CHECK-SD-NEXT:    ldr w10, [sp, #40]
1056 ; CHECK-SD-NEXT:    ldr w11, [sp, #8]
1057 ; CHECK-SD-NEXT:    fmov s2, w9
1058 ; CHECK-SD-NEXT:    fmov s3, w8
1059 ; CHECK-SD-NEXT:    ldr w8, [sp, #48]
1060 ; CHECK-SD-NEXT:    mov v0.h[1], w1
1061 ; CHECK-SD-NEXT:    ldr w9, [sp, #16]
1062 ; CHECK-SD-NEXT:    movi v4.4s, #3, msl #8
1063 ; CHECK-SD-NEXT:    mov v1.h[1], w5
1064 ; CHECK-SD-NEXT:    mov v2.h[1], w11
1065 ; CHECK-SD-NEXT:    mov v3.h[1], w10
1066 ; CHECK-SD-NEXT:    mov v0.h[2], w2
1067 ; CHECK-SD-NEXT:    mov v1.h[2], w6
1068 ; CHECK-SD-NEXT:    mov v2.h[2], w9
1069 ; CHECK-SD-NEXT:    mov v3.h[2], w8
1070 ; CHECK-SD-NEXT:    ldr w8, [sp, #56]
1071 ; CHECK-SD-NEXT:    ldr w9, [sp, #24]
1072 ; CHECK-SD-NEXT:    mov v0.h[3], w3
1073 ; CHECK-SD-NEXT:    mov v1.h[3], w7
1074 ; CHECK-SD-NEXT:    mov v2.h[3], w9
1075 ; CHECK-SD-NEXT:    mov v3.h[3], w8
1076 ; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0
1077 ; CHECK-SD-NEXT:    ushll v1.4s, v1.4h, #0
1078 ; CHECK-SD-NEXT:    ushll v2.4s, v2.4h, #0
1079 ; CHECK-SD-NEXT:    ushll v3.4s, v3.4h, #0
1080 ; CHECK-SD-NEXT:    and v0.16b, v0.16b, v4.16b
1081 ; CHECK-SD-NEXT:    and v1.16b, v1.16b, v4.16b
1082 ; CHECK-SD-NEXT:    and v2.16b, v2.16b, v4.16b
1083 ; CHECK-SD-NEXT:    and v3.16b, v3.16b, v4.16b
1084 ; CHECK-SD-NEXT:    ret
1086 ; CHECK-GI-LABEL: zext_v16i10_v16i32:
1087 ; CHECK-GI:       // %bb.0: // %entry
1088 ; CHECK-GI-NEXT:    ldr w8, [sp]
1089 ; CHECK-GI-NEXT:    ldr w9, [sp, #32]
1090 ; CHECK-GI-NEXT:    fmov s0, w0
1091 ; CHECK-GI-NEXT:    fmov s1, w4
1092 ; CHECK-GI-NEXT:    ldr w10, [sp, #8]
1093 ; CHECK-GI-NEXT:    ldr w11, [sp, #40]
1094 ; CHECK-GI-NEXT:    fmov s2, w8
1095 ; CHECK-GI-NEXT:    fmov s3, w9
1096 ; CHECK-GI-NEXT:    ldr w8, [sp, #16]
1097 ; CHECK-GI-NEXT:    mov v0.h[1], w1
1098 ; CHECK-GI-NEXT:    ldr w9, [sp, #48]
1099 ; CHECK-GI-NEXT:    movi v4.4s, #3, msl #8
1100 ; CHECK-GI-NEXT:    mov v1.h[1], w5
1101 ; CHECK-GI-NEXT:    mov v2.h[1], w10
1102 ; CHECK-GI-NEXT:    mov v3.h[1], w11
1103 ; CHECK-GI-NEXT:    mov v0.h[2], w2
1104 ; CHECK-GI-NEXT:    mov v1.h[2], w6
1105 ; CHECK-GI-NEXT:    mov v2.h[2], w8
1106 ; CHECK-GI-NEXT:    mov v3.h[2], w9
1107 ; CHECK-GI-NEXT:    ldr w8, [sp, #24]
1108 ; CHECK-GI-NEXT:    ldr w9, [sp, #56]
1109 ; CHECK-GI-NEXT:    mov v0.h[3], w3
1110 ; CHECK-GI-NEXT:    mov v1.h[3], w7
1111 ; CHECK-GI-NEXT:    mov v2.h[3], w8
1112 ; CHECK-GI-NEXT:    mov v3.h[3], w9
1113 ; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #0
1114 ; CHECK-GI-NEXT:    ushll v1.4s, v1.4h, #0
1115 ; CHECK-GI-NEXT:    ushll v2.4s, v2.4h, #0
1116 ; CHECK-GI-NEXT:    ushll v3.4s, v3.4h, #0
1117 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v4.16b
1118 ; CHECK-GI-NEXT:    and v1.16b, v1.16b, v4.16b
1119 ; CHECK-GI-NEXT:    and v2.16b, v2.16b, v4.16b
1120 ; CHECK-GI-NEXT:    and v3.16b, v3.16b, v4.16b
1121 ; CHECK-GI-NEXT:    ret
1122 entry:
1123   %c = zext <16 x i10> %a to <16 x i32>
1124   ret <16 x i32> %c
1127 define <16 x i64> @zext_v16i10_v16i64(<16 x i10> %a) {
1128 ; CHECK-SD-LABEL: zext_v16i10_v16i64:
1129 ; CHECK-SD:       // %bb.0: // %entry
1130 ; CHECK-SD-NEXT:    fmov s0, w2
1131 ; CHECK-SD-NEXT:    fmov s1, w0
1132 ; CHECK-SD-NEXT:    ldr s2, [sp]
1133 ; CHECK-SD-NEXT:    fmov s3, w4
1134 ; CHECK-SD-NEXT:    fmov s4, w6
1135 ; CHECK-SD-NEXT:    add x9, sp, #8
1136 ; CHECK-SD-NEXT:    ldr s5, [sp, #16]
1137 ; CHECK-SD-NEXT:    ldr s6, [sp, #32]
1138 ; CHECK-SD-NEXT:    ldr s7, [sp, #48]
1139 ; CHECK-SD-NEXT:    mov v1.s[1], w1
1140 ; CHECK-SD-NEXT:    mov v0.s[1], w3
1141 ; CHECK-SD-NEXT:    ld1 { v2.s }[1], [x9]
1142 ; CHECK-SD-NEXT:    mov v3.s[1], w5
1143 ; CHECK-SD-NEXT:    mov v4.s[1], w7
1144 ; CHECK-SD-NEXT:    add x9, sp, #24
1145 ; CHECK-SD-NEXT:    add x10, sp, #40
1146 ; CHECK-SD-NEXT:    add x11, sp, #56
1147 ; CHECK-SD-NEXT:    ld1 { v5.s }[1], [x9]
1148 ; CHECK-SD-NEXT:    ld1 { v6.s }[1], [x10]
1149 ; CHECK-SD-NEXT:    ld1 { v7.s }[1], [x11]
1150 ; CHECK-SD-NEXT:    mov w8, #1023 // =0x3ff
1151 ; CHECK-SD-NEXT:    ushll v1.2d, v1.2s, #0
1152 ; CHECK-SD-NEXT:    dup v16.2d, x8
1153 ; CHECK-SD-NEXT:    ushll v17.2d, v0.2s, #0
1154 ; CHECK-SD-NEXT:    ushll v3.2d, v3.2s, #0
1155 ; CHECK-SD-NEXT:    ushll v4.2d, v4.2s, #0
1156 ; CHECK-SD-NEXT:    ushll v18.2d, v2.2s, #0
1157 ; CHECK-SD-NEXT:    ushll v5.2d, v5.2s, #0
1158 ; CHECK-SD-NEXT:    ushll v6.2d, v6.2s, #0
1159 ; CHECK-SD-NEXT:    ushll v7.2d, v7.2s, #0
1160 ; CHECK-SD-NEXT:    and v0.16b, v1.16b, v16.16b
1161 ; CHECK-SD-NEXT:    and v1.16b, v17.16b, v16.16b
1162 ; CHECK-SD-NEXT:    and v2.16b, v3.16b, v16.16b
1163 ; CHECK-SD-NEXT:    and v3.16b, v4.16b, v16.16b
1164 ; CHECK-SD-NEXT:    and v4.16b, v18.16b, v16.16b
1165 ; CHECK-SD-NEXT:    and v5.16b, v5.16b, v16.16b
1166 ; CHECK-SD-NEXT:    and v6.16b, v6.16b, v16.16b
1167 ; CHECK-SD-NEXT:    and v7.16b, v7.16b, v16.16b
1168 ; CHECK-SD-NEXT:    ret
1170 ; CHECK-GI-LABEL: zext_v16i10_v16i64:
1171 ; CHECK-GI:       // %bb.0: // %entry
1172 ; CHECK-GI-NEXT:    mov v0.s[0], w0
1173 ; CHECK-GI-NEXT:    mov v1.s[0], w2
1174 ; CHECK-GI-NEXT:    ldr s3, [sp]
1175 ; CHECK-GI-NEXT:    mov v2.s[0], w4
1176 ; CHECK-GI-NEXT:    mov v5.s[0], w6
1177 ; CHECK-GI-NEXT:    ldr s4, [sp, #8]
1178 ; CHECK-GI-NEXT:    ldr s6, [sp, #16]
1179 ; CHECK-GI-NEXT:    ldr s7, [sp, #24]
1180 ; CHECK-GI-NEXT:    ldr s16, [sp, #32]
1181 ; CHECK-GI-NEXT:    ldr s17, [sp, #40]
1182 ; CHECK-GI-NEXT:    ldr s18, [sp, #48]
1183 ; CHECK-GI-NEXT:    ldr s19, [sp, #56]
1184 ; CHECK-GI-NEXT:    mov v0.s[1], w1
1185 ; CHECK-GI-NEXT:    mov v1.s[1], w3
1186 ; CHECK-GI-NEXT:    mov v3.s[1], v4.s[0]
1187 ; CHECK-GI-NEXT:    mov v2.s[1], w5
1188 ; CHECK-GI-NEXT:    mov v5.s[1], w7
1189 ; CHECK-GI-NEXT:    mov v6.s[1], v7.s[0]
1190 ; CHECK-GI-NEXT:    mov v16.s[1], v17.s[0]
1191 ; CHECK-GI-NEXT:    mov v18.s[1], v19.s[0]
1192 ; CHECK-GI-NEXT:    adrp x8, .LCPI54_0
1193 ; CHECK-GI-NEXT:    ldr q7, [x8, :lo12:.LCPI54_0]
1194 ; CHECK-GI-NEXT:    ushll v0.2d, v0.2s, #0
1195 ; CHECK-GI-NEXT:    ushll v1.2d, v1.2s, #0
1196 ; CHECK-GI-NEXT:    ushll v2.2d, v2.2s, #0
1197 ; CHECK-GI-NEXT:    ushll v4.2d, v5.2s, #0
1198 ; CHECK-GI-NEXT:    ushll v5.2d, v3.2s, #0
1199 ; CHECK-GI-NEXT:    ushll v6.2d, v6.2s, #0
1200 ; CHECK-GI-NEXT:    ushll v16.2d, v16.2s, #0
1201 ; CHECK-GI-NEXT:    ushll v17.2d, v18.2s, #0
1202 ; CHECK-GI-NEXT:    and v0.16b, v0.16b, v7.16b
1203 ; CHECK-GI-NEXT:    and v1.16b, v1.16b, v7.16b
1204 ; CHECK-GI-NEXT:    and v2.16b, v2.16b, v7.16b
1205 ; CHECK-GI-NEXT:    and v3.16b, v4.16b, v7.16b
1206 ; CHECK-GI-NEXT:    and v4.16b, v5.16b, v7.16b
1207 ; CHECK-GI-NEXT:    and v5.16b, v6.16b, v7.16b
1208 ; CHECK-GI-NEXT:    and v6.16b, v16.16b, v7.16b
1209 ; CHECK-GI-NEXT:    and v7.16b, v17.16b, v7.16b
1210 ; CHECK-GI-NEXT:    ret
1211 entry:
1212   %c = zext <16 x i10> %a to <16 x i64>
1213   ret <16 x i64> %c