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 -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI
5 define i16 @sext_i8_to_i16(i8 %a) {
6 ; CHECK-LABEL: sext_i8_to_i16:
7 ; CHECK: // %bb.0: // %entry
8 ; CHECK-NEXT: sxtb w0, w0
11 %c = sext i8 %a to i16
15 define i32 @sext_i8_to_i32(i8 %a) {
16 ; CHECK-LABEL: sext_i8_to_i32:
17 ; CHECK: // %bb.0: // %entry
18 ; CHECK-NEXT: sxtb w0, w0
21 %c = sext i8 %a to i32
25 define i64 @sext_i8_to_i64(i8 %a) {
26 ; CHECK-LABEL: sext_i8_to_i64:
27 ; CHECK: // %bb.0: // %entry
28 ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0
29 ; CHECK-NEXT: sxtb x0, w0
32 %c = sext i8 %a to i64
36 define i10 @sext_i8_to_i10(i8 %a) {
37 ; CHECK-LABEL: sext_i8_to_i10:
38 ; CHECK: // %bb.0: // %entry
39 ; CHECK-NEXT: sxtb w0, w0
42 %c = sext i8 %a to i10
46 define i32 @sext_i16_to_i32(i16 %a) {
47 ; CHECK-LABEL: sext_i16_to_i32:
48 ; CHECK: // %bb.0: // %entry
49 ; CHECK-NEXT: sxth w0, w0
52 %c = sext i16 %a to i32
56 define i64 @sext_i16_to_i64(i16 %a) {
57 ; CHECK-LABEL: sext_i16_to_i64:
58 ; CHECK: // %bb.0: // %entry
59 ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0
60 ; CHECK-NEXT: sxth x0, w0
63 %c = sext i16 %a to i64
67 define i64 @sext_i32_to_i64(i32 %a) {
68 ; CHECK-LABEL: sext_i32_to_i64:
69 ; CHECK: // %bb.0: // %entry
70 ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0
71 ; CHECK-NEXT: sxtw x0, w0
74 %c = sext i32 %a to i64
78 define i16 @sext_i10_to_i16(i10 %a) {
79 ; CHECK-LABEL: sext_i10_to_i16:
80 ; CHECK: // %bb.0: // %entry
81 ; CHECK-NEXT: sbfx w0, w0, #0, #10
84 %c = sext i10 %a to i16
88 define i32 @sext_i10_to_i32(i10 %a) {
89 ; CHECK-LABEL: sext_i10_to_i32:
90 ; CHECK: // %bb.0: // %entry
91 ; CHECK-NEXT: sbfx w0, w0, #0, #10
94 %c = sext i10 %a to i32
98 define i64 @sext_i10_to_i64(i10 %a) {
99 ; CHECK-LABEL: sext_i10_to_i64:
100 ; CHECK: // %bb.0: // %entry
101 ; CHECK-NEXT: // kill: def $w0 killed $w0 def $x0
102 ; CHECK-NEXT: sbfx x0, x0, #0, #10
105 %c = sext i10 %a to i64
109 define <2 x i16> @sext_v2i8_v2i16(<2 x i8> %a) {
110 ; CHECK-LABEL: sext_v2i8_v2i16:
111 ; CHECK: // %bb.0: // %entry
112 ; CHECK-NEXT: shl v0.2s, v0.2s, #24
113 ; CHECK-NEXT: sshr v0.2s, v0.2s, #24
116 %c = sext <2 x i8> %a to <2 x i16>
120 define <2 x i32> @sext_v2i8_v2i32(<2 x i8> %a) {
121 ; CHECK-LABEL: sext_v2i8_v2i32:
122 ; CHECK: // %bb.0: // %entry
123 ; CHECK-NEXT: shl v0.2s, v0.2s, #24
124 ; CHECK-NEXT: sshr v0.2s, v0.2s, #24
127 %c = sext <2 x i8> %a to <2 x i32>
131 define <2 x i64> @sext_v2i8_v2i64(<2 x i8> %a) {
132 ; CHECK-LABEL: sext_v2i8_v2i64:
133 ; CHECK: // %bb.0: // %entry
134 ; CHECK-NEXT: ushll v0.2d, v0.2s, #0
135 ; CHECK-NEXT: shl v0.2d, v0.2d, #56
136 ; CHECK-NEXT: sshr v0.2d, v0.2d, #56
139 %c = sext <2 x i8> %a to <2 x i64>
143 define <2 x i32> @sext_v2i16_v2i32(<2 x i16> %a) {
144 ; CHECK-LABEL: sext_v2i16_v2i32:
145 ; CHECK: // %bb.0: // %entry
146 ; CHECK-NEXT: shl v0.2s, v0.2s, #16
147 ; CHECK-NEXT: sshr v0.2s, v0.2s, #16
150 %c = sext <2 x i16> %a to <2 x i32>
154 define <2 x i64> @sext_v2i16_v2i64(<2 x i16> %a) {
155 ; CHECK-LABEL: sext_v2i16_v2i64:
156 ; CHECK: // %bb.0: // %entry
157 ; CHECK-NEXT: ushll v0.2d, v0.2s, #0
158 ; CHECK-NEXT: shl v0.2d, v0.2d, #48
159 ; CHECK-NEXT: sshr v0.2d, v0.2d, #48
162 %c = sext <2 x i16> %a to <2 x i64>
166 define <2 x i64> @sext_v2i32_v2i64(<2 x i32> %a) {
167 ; CHECK-LABEL: sext_v2i32_v2i64:
168 ; CHECK: // %bb.0: // %entry
169 ; CHECK-NEXT: sshll v0.2d, v0.2s, #0
172 %c = sext <2 x i32> %a to <2 x i64>
176 define <2 x i16> @sext_v2i10_v2i16(<2 x i10> %a) {
177 ; CHECK-LABEL: sext_v2i10_v2i16:
178 ; CHECK: // %bb.0: // %entry
179 ; CHECK-NEXT: shl v0.2s, v0.2s, #22
180 ; CHECK-NEXT: sshr v0.2s, v0.2s, #22
183 %c = sext <2 x i10> %a to <2 x i16>
187 define <2 x i32> @sext_v2i10_v2i32(<2 x i10> %a) {
188 ; CHECK-LABEL: sext_v2i10_v2i32:
189 ; CHECK: // %bb.0: // %entry
190 ; CHECK-NEXT: shl v0.2s, v0.2s, #22
191 ; CHECK-NEXT: sshr v0.2s, v0.2s, #22
194 %c = sext <2 x i10> %a to <2 x i32>
198 define <2 x i64> @sext_v2i10_v2i64(<2 x i10> %a) {
199 ; CHECK-LABEL: sext_v2i10_v2i64:
200 ; CHECK: // %bb.0: // %entry
201 ; CHECK-NEXT: ushll v0.2d, v0.2s, #0
202 ; CHECK-NEXT: shl v0.2d, v0.2d, #54
203 ; CHECK-NEXT: sshr v0.2d, v0.2d, #54
206 %c = sext <2 x i10> %a to <2 x i64>
210 define <3 x i16> @sext_v3i8_v3i16(<3 x i8> %a) {
211 ; CHECK-SD-LABEL: sext_v3i8_v3i16:
212 ; CHECK-SD: // %bb.0: // %entry
213 ; CHECK-SD-NEXT: fmov s0, w0
214 ; CHECK-SD-NEXT: mov v0.h[1], w1
215 ; CHECK-SD-NEXT: mov v0.h[2], w2
216 ; CHECK-SD-NEXT: shl v0.4h, v0.4h, #8
217 ; CHECK-SD-NEXT: sshr v0.4h, v0.4h, #8
220 ; CHECK-GI-LABEL: sext_v3i8_v3i16:
221 ; CHECK-GI: // %bb.0: // %entry
222 ; CHECK-GI-NEXT: lsl w8, w0, #8
223 ; CHECK-GI-NEXT: lsl w9, w1, #8
224 ; CHECK-GI-NEXT: sbfx w8, w8, #8, #8
225 ; CHECK-GI-NEXT: sbfx w9, w9, #8, #8
226 ; CHECK-GI-NEXT: fmov s0, w8
227 ; CHECK-GI-NEXT: lsl w8, w2, #8
228 ; CHECK-GI-NEXT: sbfx w8, w8, #8, #8
229 ; CHECK-GI-NEXT: mov v0.h[1], w9
230 ; CHECK-GI-NEXT: mov v0.h[2], w8
231 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
234 %c = sext <3 x i8> %a to <3 x i16>
238 define <3 x i32> @sext_v3i8_v3i32(<3 x i8> %a) {
239 ; CHECK-SD-LABEL: sext_v3i8_v3i32:
240 ; CHECK-SD: // %bb.0: // %entry
241 ; CHECK-SD-NEXT: fmov s0, w0
242 ; CHECK-SD-NEXT: mov v0.h[1], w1
243 ; CHECK-SD-NEXT: mov v0.h[2], w2
244 ; CHECK-SD-NEXT: ushll v0.4s, v0.4h, #0
245 ; CHECK-SD-NEXT: shl v0.4s, v0.4s, #24
246 ; CHECK-SD-NEXT: sshr v0.4s, v0.4s, #24
249 ; CHECK-GI-LABEL: sext_v3i8_v3i32:
250 ; CHECK-GI: // %bb.0: // %entry
251 ; CHECK-GI-NEXT: sxtb w8, w0
252 ; CHECK-GI-NEXT: mov v0.s[0], w8
253 ; CHECK-GI-NEXT: sxtb w8, w1
254 ; CHECK-GI-NEXT: mov v0.s[1], w8
255 ; CHECK-GI-NEXT: sxtb w8, w2
256 ; CHECK-GI-NEXT: mov v0.s[2], w8
259 %c = sext <3 x i8> %a to <3 x i32>
263 define <3 x i64> @sext_v3i8_v3i64(<3 x i8> %a) {
264 ; CHECK-SD-LABEL: sext_v3i8_v3i64:
265 ; CHECK-SD: // %bb.0: // %entry
266 ; CHECK-SD-NEXT: fmov s0, w0
267 ; CHECK-SD-NEXT: fmov s1, w2
268 ; CHECK-SD-NEXT: mov v0.s[1], w1
269 ; CHECK-SD-NEXT: ushll v1.2d, v1.2s, #0
270 ; CHECK-SD-NEXT: shl v2.2d, v1.2d, #56
271 ; CHECK-SD-NEXT: ushll v0.2d, v0.2s, #0
272 ; CHECK-SD-NEXT: sshr v2.2d, v2.2d, #56
273 ; CHECK-SD-NEXT: shl v0.2d, v0.2d, #56
274 ; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q2
275 ; CHECK-SD-NEXT: sshr v0.2d, v0.2d, #56
276 ; CHECK-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #8
277 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
278 ; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q1
281 ; CHECK-GI-LABEL: sext_v3i8_v3i64:
282 ; CHECK-GI: // %bb.0: // %entry
283 ; CHECK-GI-NEXT: // kill: def $w0 killed $w0 def $x0
284 ; CHECK-GI-NEXT: // kill: def $w1 killed $w1 def $x1
285 ; CHECK-GI-NEXT: // kill: def $w2 killed $w2 def $x2
286 ; CHECK-GI-NEXT: sxtb x8, w0
287 ; CHECK-GI-NEXT: sxtb x9, w1
288 ; CHECK-GI-NEXT: sxtb x10, w2
289 ; CHECK-GI-NEXT: fmov d0, x8
290 ; CHECK-GI-NEXT: fmov d1, x9
291 ; CHECK-GI-NEXT: fmov d2, x10
294 %c = sext <3 x i8> %a to <3 x i64>
298 define <3 x i32> @sext_v3i16_v3i32(<3 x i16> %a) {
299 ; CHECK-SD-LABEL: sext_v3i16_v3i32:
300 ; CHECK-SD: // %bb.0: // %entry
301 ; CHECK-SD-NEXT: sshll v0.4s, v0.4h, #0
304 ; CHECK-GI-LABEL: sext_v3i16_v3i32:
305 ; CHECK-GI: // %bb.0: // %entry
306 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
307 ; CHECK-GI-NEXT: smov w8, v0.h[0]
308 ; CHECK-GI-NEXT: smov w9, v0.h[1]
309 ; CHECK-GI-NEXT: mov v1.s[0], w8
310 ; CHECK-GI-NEXT: smov w8, v0.h[2]
311 ; CHECK-GI-NEXT: mov v1.s[1], w9
312 ; CHECK-GI-NEXT: mov v1.s[2], w8
313 ; CHECK-GI-NEXT: mov v0.16b, v1.16b
316 %c = sext <3 x i16> %a to <3 x i32>
320 define <3 x i64> @sext_v3i16_v3i64(<3 x i16> %a) {
321 ; CHECK-SD-LABEL: sext_v3i16_v3i64:
322 ; CHECK-SD: // %bb.0: // %entry
323 ; CHECK-SD-NEXT: sshll v2.4s, v0.4h, #0
324 ; CHECK-SD-NEXT: sshll v0.2d, v2.2s, #0
325 ; CHECK-SD-NEXT: sshll2 v2.2d, v2.4s, #0
326 ; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q2
327 ; CHECK-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #8
328 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
329 ; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q1
332 ; CHECK-GI-LABEL: sext_v3i16_v3i64:
333 ; CHECK-GI: // %bb.0: // %entry
334 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
335 ; CHECK-GI-NEXT: smov x8, v0.h[0]
336 ; CHECK-GI-NEXT: smov x9, v0.h[1]
337 ; CHECK-GI-NEXT: smov x10, v0.h[2]
338 ; CHECK-GI-NEXT: fmov d0, x8
339 ; CHECK-GI-NEXT: fmov d1, x9
340 ; CHECK-GI-NEXT: fmov d2, x10
343 %c = sext <3 x i16> %a to <3 x i64>
347 define <3 x i64> @sext_v3i32_v3i64(<3 x i32> %a) {
348 ; CHECK-SD-LABEL: sext_v3i32_v3i64:
349 ; CHECK-SD: // %bb.0: // %entry
350 ; CHECK-SD-NEXT: sshll v3.2d, v0.2s, #0
351 ; CHECK-SD-NEXT: sshll2 v2.2d, v0.4s, #0
352 ; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q2
353 ; CHECK-SD-NEXT: fmov d0, d3
354 ; CHECK-SD-NEXT: ext v1.16b, v3.16b, v3.16b, #8
355 ; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q1
358 ; CHECK-GI-LABEL: sext_v3i32_v3i64:
359 ; CHECK-GI: // %bb.0: // %entry
360 ; CHECK-GI-NEXT: smov x8, v0.s[0]
361 ; CHECK-GI-NEXT: smov x9, v0.s[1]
362 ; CHECK-GI-NEXT: smov x10, v0.s[2]
363 ; CHECK-GI-NEXT: fmov d0, x8
364 ; CHECK-GI-NEXT: fmov d1, x9
365 ; CHECK-GI-NEXT: fmov d2, x10
368 %c = sext <3 x i32> %a to <3 x i64>
372 define <3 x i16> @sext_v3i10_v3i16(<3 x i10> %a) {
373 ; CHECK-SD-LABEL: sext_v3i10_v3i16:
374 ; CHECK-SD: // %bb.0: // %entry
375 ; CHECK-SD-NEXT: fmov s0, w0
376 ; CHECK-SD-NEXT: mov v0.h[1], w1
377 ; CHECK-SD-NEXT: mov v0.h[2], w2
378 ; CHECK-SD-NEXT: shl v0.4h, v0.4h, #6
379 ; CHECK-SD-NEXT: sshr v0.4h, v0.4h, #6
382 ; CHECK-GI-LABEL: sext_v3i10_v3i16:
383 ; CHECK-GI: // %bb.0: // %entry
384 ; CHECK-GI-NEXT: lsl w8, w0, #6
385 ; CHECK-GI-NEXT: lsl w9, w1, #6
386 ; CHECK-GI-NEXT: sbfx w8, w8, #6, #10
387 ; CHECK-GI-NEXT: sbfx w9, w9, #6, #10
388 ; CHECK-GI-NEXT: fmov s0, w8
389 ; CHECK-GI-NEXT: lsl w8, w2, #6
390 ; CHECK-GI-NEXT: sbfx w8, w8, #6, #10
391 ; CHECK-GI-NEXT: mov v0.h[1], w9
392 ; CHECK-GI-NEXT: mov v0.h[2], w8
393 ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0
396 %c = sext <3 x i10> %a to <3 x i16>
400 define <3 x i32> @sext_v3i10_v3i32(<3 x i10> %a) {
401 ; CHECK-SD-LABEL: sext_v3i10_v3i32:
402 ; CHECK-SD: // %bb.0: // %entry
403 ; CHECK-SD-NEXT: fmov s0, w0
404 ; CHECK-SD-NEXT: mov v0.h[1], w1
405 ; CHECK-SD-NEXT: mov v0.h[2], w2
406 ; CHECK-SD-NEXT: ushll v0.4s, v0.4h, #0
407 ; CHECK-SD-NEXT: shl v0.4s, v0.4s, #22
408 ; CHECK-SD-NEXT: sshr v0.4s, v0.4s, #22
411 ; CHECK-GI-LABEL: sext_v3i10_v3i32:
412 ; CHECK-GI: // %bb.0: // %entry
413 ; CHECK-GI-NEXT: sbfx w8, w0, #0, #10
414 ; CHECK-GI-NEXT: mov v0.s[0], w8
415 ; CHECK-GI-NEXT: sbfx w8, w1, #0, #10
416 ; CHECK-GI-NEXT: mov v0.s[1], w8
417 ; CHECK-GI-NEXT: sbfx w8, w2, #0, #10
418 ; CHECK-GI-NEXT: mov v0.s[2], w8
421 %c = sext <3 x i10> %a to <3 x i32>
425 define <3 x i64> @sext_v3i10_v3i64(<3 x i10> %a) {
426 ; CHECK-SD-LABEL: sext_v3i10_v3i64:
427 ; CHECK-SD: // %bb.0: // %entry
428 ; CHECK-SD-NEXT: fmov s0, w0
429 ; CHECK-SD-NEXT: fmov s1, w2
430 ; CHECK-SD-NEXT: mov v0.s[1], w1
431 ; CHECK-SD-NEXT: ushll v1.2d, v1.2s, #0
432 ; CHECK-SD-NEXT: shl v2.2d, v1.2d, #54
433 ; CHECK-SD-NEXT: ushll v0.2d, v0.2s, #0
434 ; CHECK-SD-NEXT: sshr v2.2d, v2.2d, #54
435 ; CHECK-SD-NEXT: shl v0.2d, v0.2d, #54
436 ; CHECK-SD-NEXT: // kill: def $d2 killed $d2 killed $q2
437 ; CHECK-SD-NEXT: sshr v0.2d, v0.2d, #54
438 ; CHECK-SD-NEXT: ext v1.16b, v0.16b, v0.16b, #8
439 ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
440 ; CHECK-SD-NEXT: // kill: def $d1 killed $d1 killed $q1
443 ; CHECK-GI-LABEL: sext_v3i10_v3i64:
444 ; CHECK-GI: // %bb.0: // %entry
445 ; CHECK-GI-NEXT: // kill: def $w0 killed $w0 def $x0
446 ; CHECK-GI-NEXT: // kill: def $w1 killed $w1 def $x1
447 ; CHECK-GI-NEXT: // kill: def $w2 killed $w2 def $x2
448 ; CHECK-GI-NEXT: sbfx x8, x0, #0, #10
449 ; CHECK-GI-NEXT: sbfx x9, x1, #0, #10
450 ; CHECK-GI-NEXT: sbfx x10, x2, #0, #10
451 ; CHECK-GI-NEXT: fmov d0, x8
452 ; CHECK-GI-NEXT: fmov d1, x9
453 ; CHECK-GI-NEXT: fmov d2, x10
456 %c = sext <3 x i10> %a to <3 x i64>
460 define <4 x i16> @sext_v4i8_v4i16(<4 x i8> %a) {
461 ; CHECK-LABEL: sext_v4i8_v4i16:
462 ; CHECK: // %bb.0: // %entry
463 ; CHECK-NEXT: shl v0.4h, v0.4h, #8
464 ; CHECK-NEXT: sshr v0.4h, v0.4h, #8
467 %c = sext <4 x i8> %a to <4 x i16>
471 define <4 x i32> @sext_v4i8_v4i32(<4 x i8> %a) {
472 ; CHECK-LABEL: sext_v4i8_v4i32:
473 ; CHECK: // %bb.0: // %entry
474 ; CHECK-NEXT: ushll v0.4s, v0.4h, #0
475 ; CHECK-NEXT: shl v0.4s, v0.4s, #24
476 ; CHECK-NEXT: sshr v0.4s, v0.4s, #24
479 %c = sext <4 x i8> %a to <4 x i32>
483 define <4 x i64> @sext_v4i8_v4i64(<4 x i8> %a) {
484 ; CHECK-SD-LABEL: sext_v4i8_v4i64:
485 ; CHECK-SD: // %bb.0: // %entry
486 ; CHECK-SD-NEXT: ushll v0.4s, v0.4h, #0
487 ; CHECK-SD-NEXT: ushll v1.2d, v0.2s, #0
488 ; CHECK-SD-NEXT: ushll2 v0.2d, v0.4s, #0
489 ; CHECK-SD-NEXT: shl v0.2d, v0.2d, #56
490 ; CHECK-SD-NEXT: shl v2.2d, v1.2d, #56
491 ; CHECK-SD-NEXT: sshr v1.2d, v0.2d, #56
492 ; CHECK-SD-NEXT: sshr v0.2d, v2.2d, #56
495 ; CHECK-GI-LABEL: sext_v4i8_v4i64:
496 ; CHECK-GI: // %bb.0: // %entry
497 ; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #0
498 ; CHECK-GI-NEXT: ushll v1.2d, v0.2s, #0
499 ; CHECK-GI-NEXT: ushll2 v0.2d, v0.4s, #0
500 ; CHECK-GI-NEXT: shl v1.2d, v1.2d, #56
501 ; CHECK-GI-NEXT: shl v2.2d, v0.2d, #56
502 ; CHECK-GI-NEXT: sshr v0.2d, v1.2d, #56
503 ; CHECK-GI-NEXT: sshr v1.2d, v2.2d, #56
506 %c = sext <4 x i8> %a to <4 x i64>
510 define <4 x i32> @sext_v4i16_v4i32(<4 x i16> %a) {
511 ; CHECK-LABEL: sext_v4i16_v4i32:
512 ; CHECK: // %bb.0: // %entry
513 ; CHECK-NEXT: sshll v0.4s, v0.4h, #0
516 %c = sext <4 x i16> %a to <4 x i32>
520 define <4 x i64> @sext_v4i16_v4i64(<4 x i16> %a) {
521 ; CHECK-SD-LABEL: sext_v4i16_v4i64:
522 ; CHECK-SD: // %bb.0: // %entry
523 ; CHECK-SD-NEXT: sshll v0.4s, v0.4h, #0
524 ; CHECK-SD-NEXT: sshll2 v1.2d, v0.4s, #0
525 ; CHECK-SD-NEXT: sshll v0.2d, v0.2s, #0
528 ; CHECK-GI-LABEL: sext_v4i16_v4i64:
529 ; CHECK-GI: // %bb.0: // %entry
530 ; CHECK-GI-NEXT: sshll v1.4s, v0.4h, #0
531 ; CHECK-GI-NEXT: sshll v0.2d, v1.2s, #0
532 ; CHECK-GI-NEXT: sshll2 v1.2d, v1.4s, #0
535 %c = sext <4 x i16> %a to <4 x i64>
539 define <4 x i64> @sext_v4i32_v4i64(<4 x i32> %a) {
540 ; CHECK-SD-LABEL: sext_v4i32_v4i64:
541 ; CHECK-SD: // %bb.0: // %entry
542 ; CHECK-SD-NEXT: sshll2 v1.2d, v0.4s, #0
543 ; CHECK-SD-NEXT: sshll v0.2d, v0.2s, #0
546 ; CHECK-GI-LABEL: sext_v4i32_v4i64:
547 ; CHECK-GI: // %bb.0: // %entry
548 ; CHECK-GI-NEXT: sshll v2.2d, v0.2s, #0
549 ; CHECK-GI-NEXT: sshll2 v1.2d, v0.4s, #0
550 ; CHECK-GI-NEXT: mov v0.16b, v2.16b
553 %c = sext <4 x i32> %a to <4 x i64>
557 define <4 x i16> @sext_v4i10_v4i16(<4 x i10> %a) {
558 ; CHECK-LABEL: sext_v4i10_v4i16:
559 ; CHECK: // %bb.0: // %entry
560 ; CHECK-NEXT: shl v0.4h, v0.4h, #6
561 ; CHECK-NEXT: sshr v0.4h, v0.4h, #6
564 %c = sext <4 x i10> %a to <4 x i16>
568 define <4 x i32> @sext_v4i10_v4i32(<4 x i10> %a) {
569 ; CHECK-LABEL: sext_v4i10_v4i32:
570 ; CHECK: // %bb.0: // %entry
571 ; CHECK-NEXT: ushll v0.4s, v0.4h, #0
572 ; CHECK-NEXT: shl v0.4s, v0.4s, #22
573 ; CHECK-NEXT: sshr v0.4s, v0.4s, #22
576 %c = sext <4 x i10> %a to <4 x i32>
580 define <4 x i64> @sext_v4i10_v4i64(<4 x i10> %a) {
581 ; CHECK-SD-LABEL: sext_v4i10_v4i64:
582 ; CHECK-SD: // %bb.0: // %entry
583 ; CHECK-SD-NEXT: ushll v0.4s, v0.4h, #0
584 ; CHECK-SD-NEXT: ushll v1.2d, v0.2s, #0
585 ; CHECK-SD-NEXT: ushll2 v0.2d, v0.4s, #0
586 ; CHECK-SD-NEXT: shl v0.2d, v0.2d, #54
587 ; CHECK-SD-NEXT: shl v2.2d, v1.2d, #54
588 ; CHECK-SD-NEXT: sshr v1.2d, v0.2d, #54
589 ; CHECK-SD-NEXT: sshr v0.2d, v2.2d, #54
592 ; CHECK-GI-LABEL: sext_v4i10_v4i64:
593 ; CHECK-GI: // %bb.0: // %entry
594 ; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #0
595 ; CHECK-GI-NEXT: ushll v1.2d, v0.2s, #0
596 ; CHECK-GI-NEXT: ushll2 v0.2d, v0.4s, #0
597 ; CHECK-GI-NEXT: shl v1.2d, v1.2d, #54
598 ; CHECK-GI-NEXT: shl v2.2d, v0.2d, #54
599 ; CHECK-GI-NEXT: sshr v0.2d, v1.2d, #54
600 ; CHECK-GI-NEXT: sshr v1.2d, v2.2d, #54
603 %c = sext <4 x i10> %a to <4 x i64>
607 define <8 x i16> @sext_v8i8_v8i16(<8 x i8> %a) {
608 ; CHECK-LABEL: sext_v8i8_v8i16:
609 ; CHECK: // %bb.0: // %entry
610 ; CHECK-NEXT: sshll v0.8h, v0.8b, #0
613 %c = sext <8 x i8> %a to <8 x i16>
617 define <8 x i32> @sext_v8i8_v8i32(<8 x i8> %a) {
618 ; CHECK-SD-LABEL: sext_v8i8_v8i32:
619 ; CHECK-SD: // %bb.0: // %entry
620 ; CHECK-SD-NEXT: sshll v0.8h, v0.8b, #0
621 ; CHECK-SD-NEXT: sshll2 v1.4s, v0.8h, #0
622 ; CHECK-SD-NEXT: sshll v0.4s, v0.4h, #0
625 ; CHECK-GI-LABEL: sext_v8i8_v8i32:
626 ; CHECK-GI: // %bb.0: // %entry
627 ; CHECK-GI-NEXT: sshll v1.8h, v0.8b, #0
628 ; CHECK-GI-NEXT: sshll v0.4s, v1.4h, #0
629 ; CHECK-GI-NEXT: sshll2 v1.4s, v1.8h, #0
632 %c = sext <8 x i8> %a to <8 x i32>
636 define <8 x i64> @sext_v8i8_v8i64(<8 x i8> %a) {
637 ; CHECK-SD-LABEL: sext_v8i8_v8i64:
638 ; CHECK-SD: // %bb.0: // %entry
639 ; CHECK-SD-NEXT: sshll v0.8h, v0.8b, #0
640 ; CHECK-SD-NEXT: sshll v1.4s, v0.4h, #0
641 ; CHECK-SD-NEXT: sshll2 v2.4s, v0.8h, #0
642 ; CHECK-SD-NEXT: sshll v0.2d, v1.2s, #0
643 ; CHECK-SD-NEXT: sshll2 v3.2d, v2.4s, #0
644 ; CHECK-SD-NEXT: sshll2 v1.2d, v1.4s, #0
645 ; CHECK-SD-NEXT: sshll v2.2d, v2.2s, #0
648 ; CHECK-GI-LABEL: sext_v8i8_v8i64:
649 ; CHECK-GI: // %bb.0: // %entry
650 ; CHECK-GI-NEXT: sshll v0.8h, v0.8b, #0
651 ; CHECK-GI-NEXT: sshll v1.4s, v0.4h, #0
652 ; CHECK-GI-NEXT: sshll2 v3.4s, v0.8h, #0
653 ; CHECK-GI-NEXT: sshll v0.2d, v1.2s, #0
654 ; CHECK-GI-NEXT: sshll2 v1.2d, v1.4s, #0
655 ; CHECK-GI-NEXT: sshll v2.2d, v3.2s, #0
656 ; CHECK-GI-NEXT: sshll2 v3.2d, v3.4s, #0
659 %c = sext <8 x i8> %a to <8 x i64>
663 define <8 x i32> @sext_v8i16_v8i32(<8 x i16> %a) {
664 ; CHECK-SD-LABEL: sext_v8i16_v8i32:
665 ; CHECK-SD: // %bb.0: // %entry
666 ; CHECK-SD-NEXT: sshll2 v1.4s, v0.8h, #0
667 ; CHECK-SD-NEXT: sshll v0.4s, v0.4h, #0
670 ; CHECK-GI-LABEL: sext_v8i16_v8i32:
671 ; CHECK-GI: // %bb.0: // %entry
672 ; CHECK-GI-NEXT: sshll v2.4s, v0.4h, #0
673 ; CHECK-GI-NEXT: sshll2 v1.4s, v0.8h, #0
674 ; CHECK-GI-NEXT: mov v0.16b, v2.16b
677 %c = sext <8 x i16> %a to <8 x i32>
681 define <8 x i64> @sext_v8i16_v8i64(<8 x i16> %a) {
682 ; CHECK-SD-LABEL: sext_v8i16_v8i64:
683 ; CHECK-SD: // %bb.0: // %entry
684 ; CHECK-SD-NEXT: sshll v1.4s, v0.4h, #0
685 ; CHECK-SD-NEXT: sshll2 v2.4s, v0.8h, #0
686 ; CHECK-SD-NEXT: sshll v0.2d, v1.2s, #0
687 ; CHECK-SD-NEXT: sshll2 v3.2d, v2.4s, #0
688 ; CHECK-SD-NEXT: sshll2 v1.2d, v1.4s, #0
689 ; CHECK-SD-NEXT: sshll v2.2d, v2.2s, #0
692 ; CHECK-GI-LABEL: sext_v8i16_v8i64:
693 ; CHECK-GI: // %bb.0: // %entry
694 ; CHECK-GI-NEXT: sshll v1.4s, v0.4h, #0
695 ; CHECK-GI-NEXT: sshll2 v3.4s, v0.8h, #0
696 ; CHECK-GI-NEXT: sshll v0.2d, v1.2s, #0
697 ; CHECK-GI-NEXT: sshll2 v1.2d, v1.4s, #0
698 ; CHECK-GI-NEXT: sshll v2.2d, v3.2s, #0
699 ; CHECK-GI-NEXT: sshll2 v3.2d, v3.4s, #0
702 %c = sext <8 x i16> %a to <8 x i64>
706 define <8 x i64> @sext_v8i32_v8i64(<8 x i32> %a) {
707 ; CHECK-SD-LABEL: sext_v8i32_v8i64:
708 ; CHECK-SD: // %bb.0: // %entry
709 ; CHECK-SD-NEXT: sshll v5.2d, v0.2s, #0
710 ; CHECK-SD-NEXT: sshll2 v4.2d, v0.4s, #0
711 ; CHECK-SD-NEXT: sshll2 v3.2d, v1.4s, #0
712 ; CHECK-SD-NEXT: sshll v2.2d, v1.2s, #0
713 ; CHECK-SD-NEXT: mov v0.16b, v5.16b
714 ; CHECK-SD-NEXT: mov v1.16b, v4.16b
717 ; CHECK-GI-LABEL: sext_v8i32_v8i64:
718 ; CHECK-GI: // %bb.0: // %entry
719 ; CHECK-GI-NEXT: sshll v4.2d, v0.2s, #0
720 ; CHECK-GI-NEXT: sshll2 v5.2d, v0.4s, #0
721 ; CHECK-GI-NEXT: sshll v2.2d, v1.2s, #0
722 ; CHECK-GI-NEXT: sshll2 v3.2d, v1.4s, #0
723 ; CHECK-GI-NEXT: mov v0.16b, v4.16b
724 ; CHECK-GI-NEXT: mov v1.16b, v5.16b
727 %c = sext <8 x i32> %a to <8 x i64>
731 define <8 x i16> @sext_v8i10_v8i16(<8 x i10> %a) {
732 ; CHECK-LABEL: sext_v8i10_v8i16:
733 ; CHECK: // %bb.0: // %entry
734 ; CHECK-NEXT: shl v0.8h, v0.8h, #6
735 ; CHECK-NEXT: sshr v0.8h, v0.8h, #6
738 %c = sext <8 x i10> %a to <8 x i16>
742 define <8 x i32> @sext_v8i10_v8i32(<8 x i10> %a) {
743 ; CHECK-SD-LABEL: sext_v8i10_v8i32:
744 ; CHECK-SD: // %bb.0: // %entry
745 ; CHECK-SD-NEXT: ushll v1.4s, v0.4h, #0
746 ; CHECK-SD-NEXT: ushll2 v0.4s, v0.8h, #0
747 ; CHECK-SD-NEXT: shl v0.4s, v0.4s, #22
748 ; CHECK-SD-NEXT: shl v2.4s, v1.4s, #22
749 ; CHECK-SD-NEXT: sshr v1.4s, v0.4s, #22
750 ; CHECK-SD-NEXT: sshr v0.4s, v2.4s, #22
753 ; CHECK-GI-LABEL: sext_v8i10_v8i32:
754 ; CHECK-GI: // %bb.0: // %entry
755 ; CHECK-GI-NEXT: ushll v1.4s, v0.4h, #0
756 ; CHECK-GI-NEXT: ushll2 v0.4s, v0.8h, #0
757 ; CHECK-GI-NEXT: shl v1.4s, v1.4s, #22
758 ; CHECK-GI-NEXT: shl v2.4s, v0.4s, #22
759 ; CHECK-GI-NEXT: sshr v0.4s, v1.4s, #22
760 ; CHECK-GI-NEXT: sshr v1.4s, v2.4s, #22
763 %c = sext <8 x i10> %a to <8 x i32>
767 define <8 x i64> @sext_v8i10_v8i64(<8 x i10> %a) {
768 ; CHECK-SD-LABEL: sext_v8i10_v8i64:
769 ; CHECK-SD: // %bb.0: // %entry
770 ; CHECK-SD-NEXT: ushll v1.4s, v0.4h, #0
771 ; CHECK-SD-NEXT: ushll2 v0.4s, v0.8h, #0
772 ; CHECK-SD-NEXT: ushll v2.2d, v1.2s, #0
773 ; CHECK-SD-NEXT: ushll v3.2d, v0.2s, #0
774 ; CHECK-SD-NEXT: ushll2 v1.2d, v1.4s, #0
775 ; CHECK-SD-NEXT: ushll2 v0.2d, v0.4s, #0
776 ; CHECK-SD-NEXT: shl v2.2d, v2.2d, #54
777 ; CHECK-SD-NEXT: shl v1.2d, v1.2d, #54
778 ; CHECK-SD-NEXT: shl v5.2d, v3.2d, #54
779 ; CHECK-SD-NEXT: shl v4.2d, v0.2d, #54
780 ; CHECK-SD-NEXT: sshr v0.2d, v2.2d, #54
781 ; CHECK-SD-NEXT: sshr v1.2d, v1.2d, #54
782 ; CHECK-SD-NEXT: sshr v2.2d, v5.2d, #54
783 ; CHECK-SD-NEXT: sshr v3.2d, v4.2d, #54
786 ; CHECK-GI-LABEL: sext_v8i10_v8i64:
787 ; CHECK-GI: // %bb.0: // %entry
788 ; CHECK-GI-NEXT: ushll v1.4s, v0.4h, #0
789 ; CHECK-GI-NEXT: ushll2 v0.4s, v0.8h, #0
790 ; CHECK-GI-NEXT: ushll v2.2d, v1.2s, #0
791 ; CHECK-GI-NEXT: ushll2 v1.2d, v1.4s, #0
792 ; CHECK-GI-NEXT: ushll v3.2d, v0.2s, #0
793 ; CHECK-GI-NEXT: ushll2 v0.2d, v0.4s, #0
794 ; CHECK-GI-NEXT: shl v2.2d, v2.2d, #54
795 ; CHECK-GI-NEXT: shl v1.2d, v1.2d, #54
796 ; CHECK-GI-NEXT: shl v3.2d, v3.2d, #54
797 ; CHECK-GI-NEXT: shl v4.2d, v0.2d, #54
798 ; CHECK-GI-NEXT: sshr v0.2d, v2.2d, #54
799 ; CHECK-GI-NEXT: sshr v1.2d, v1.2d, #54
800 ; CHECK-GI-NEXT: sshr v2.2d, v3.2d, #54
801 ; CHECK-GI-NEXT: sshr v3.2d, v4.2d, #54
804 %c = sext <8 x i10> %a to <8 x i64>
808 define <16 x i16> @sext_v16i8_v16i16(<16 x i8> %a) {
809 ; CHECK-SD-LABEL: sext_v16i8_v16i16:
810 ; CHECK-SD: // %bb.0: // %entry
811 ; CHECK-SD-NEXT: sshll2 v1.8h, v0.16b, #0
812 ; CHECK-SD-NEXT: sshll v0.8h, v0.8b, #0
815 ; CHECK-GI-LABEL: sext_v16i8_v16i16:
816 ; CHECK-GI: // %bb.0: // %entry
817 ; CHECK-GI-NEXT: sshll v2.8h, v0.8b, #0
818 ; CHECK-GI-NEXT: sshll2 v1.8h, v0.16b, #0
819 ; CHECK-GI-NEXT: mov v0.16b, v2.16b
822 %c = sext <16 x i8> %a to <16 x i16>
826 define <16 x i32> @sext_v16i8_v16i32(<16 x i8> %a) {
827 ; CHECK-SD-LABEL: sext_v16i8_v16i32:
828 ; CHECK-SD: // %bb.0: // %entry
829 ; CHECK-SD-NEXT: sshll v1.8h, v0.8b, #0
830 ; CHECK-SD-NEXT: sshll2 v2.8h, v0.16b, #0
831 ; CHECK-SD-NEXT: sshll v0.4s, v1.4h, #0
832 ; CHECK-SD-NEXT: sshll2 v3.4s, v2.8h, #0
833 ; CHECK-SD-NEXT: sshll2 v1.4s, v1.8h, #0
834 ; CHECK-SD-NEXT: sshll v2.4s, v2.4h, #0
837 ; CHECK-GI-LABEL: sext_v16i8_v16i32:
838 ; CHECK-GI: // %bb.0: // %entry
839 ; CHECK-GI-NEXT: sshll v1.8h, v0.8b, #0
840 ; CHECK-GI-NEXT: sshll2 v3.8h, v0.16b, #0
841 ; CHECK-GI-NEXT: sshll v0.4s, v1.4h, #0
842 ; CHECK-GI-NEXT: sshll2 v1.4s, v1.8h, #0
843 ; CHECK-GI-NEXT: sshll v2.4s, v3.4h, #0
844 ; CHECK-GI-NEXT: sshll2 v3.4s, v3.8h, #0
847 %c = sext <16 x i8> %a to <16 x i32>
851 define <16 x i64> @sext_v16i8_v16i64(<16 x i8> %a) {
852 ; CHECK-SD-LABEL: sext_v16i8_v16i64:
853 ; CHECK-SD: // %bb.0: // %entry
854 ; CHECK-SD-NEXT: sshll v1.8h, v0.8b, #0
855 ; CHECK-SD-NEXT: sshll2 v0.8h, v0.16b, #0
856 ; CHECK-SD-NEXT: sshll v2.4s, v1.4h, #0
857 ; CHECK-SD-NEXT: sshll2 v4.4s, v1.8h, #0
858 ; CHECK-SD-NEXT: sshll v5.4s, v0.4h, #0
859 ; CHECK-SD-NEXT: sshll2 v6.4s, v0.8h, #0
860 ; CHECK-SD-NEXT: sshll2 v1.2d, v2.4s, #0
861 ; CHECK-SD-NEXT: sshll v0.2d, v2.2s, #0
862 ; CHECK-SD-NEXT: sshll2 v3.2d, v4.4s, #0
863 ; CHECK-SD-NEXT: sshll v2.2d, v4.2s, #0
864 ; CHECK-SD-NEXT: sshll v4.2d, v5.2s, #0
865 ; CHECK-SD-NEXT: sshll2 v7.2d, v6.4s, #0
866 ; CHECK-SD-NEXT: sshll2 v5.2d, v5.4s, #0
867 ; CHECK-SD-NEXT: sshll v6.2d, v6.2s, #0
870 ; CHECK-GI-LABEL: sext_v16i8_v16i64:
871 ; CHECK-GI: // %bb.0: // %entry
872 ; CHECK-GI-NEXT: sshll v1.8h, v0.8b, #0
873 ; CHECK-GI-NEXT: sshll2 v0.8h, v0.16b, #0
874 ; CHECK-GI-NEXT: sshll v2.4s, v1.4h, #0
875 ; CHECK-GI-NEXT: sshll2 v3.4s, v1.8h, #0
876 ; CHECK-GI-NEXT: sshll v5.4s, v0.4h, #0
877 ; CHECK-GI-NEXT: sshll2 v7.4s, v0.8h, #0
878 ; CHECK-GI-NEXT: sshll v0.2d, v2.2s, #0
879 ; CHECK-GI-NEXT: sshll2 v1.2d, v2.4s, #0
880 ; CHECK-GI-NEXT: sshll v2.2d, v3.2s, #0
881 ; CHECK-GI-NEXT: sshll2 v3.2d, v3.4s, #0
882 ; CHECK-GI-NEXT: sshll v4.2d, v5.2s, #0
883 ; CHECK-GI-NEXT: sshll2 v5.2d, v5.4s, #0
884 ; CHECK-GI-NEXT: sshll v6.2d, v7.2s, #0
885 ; CHECK-GI-NEXT: sshll2 v7.2d, v7.4s, #0
888 %c = sext <16 x i8> %a to <16 x i64>
892 define <16 x i32> @sext_v16i16_v16i32(<16 x i16> %a) {
893 ; CHECK-SD-LABEL: sext_v16i16_v16i32:
894 ; CHECK-SD: // %bb.0: // %entry
895 ; CHECK-SD-NEXT: sshll v5.4s, v0.4h, #0
896 ; CHECK-SD-NEXT: sshll2 v4.4s, v0.8h, #0
897 ; CHECK-SD-NEXT: sshll2 v3.4s, v1.8h, #0
898 ; CHECK-SD-NEXT: sshll v2.4s, v1.4h, #0
899 ; CHECK-SD-NEXT: mov v0.16b, v5.16b
900 ; CHECK-SD-NEXT: mov v1.16b, v4.16b
903 ; CHECK-GI-LABEL: sext_v16i16_v16i32:
904 ; CHECK-GI: // %bb.0: // %entry
905 ; CHECK-GI-NEXT: sshll v4.4s, v0.4h, #0
906 ; CHECK-GI-NEXT: sshll2 v5.4s, v0.8h, #0
907 ; CHECK-GI-NEXT: sshll v2.4s, v1.4h, #0
908 ; CHECK-GI-NEXT: sshll2 v3.4s, v1.8h, #0
909 ; CHECK-GI-NEXT: mov v0.16b, v4.16b
910 ; CHECK-GI-NEXT: mov v1.16b, v5.16b
913 %c = sext <16 x i16> %a to <16 x i32>
917 define <16 x i64> @sext_v16i16_v16i64(<16 x i16> %a) {
918 ; CHECK-SD-LABEL: sext_v16i16_v16i64:
919 ; CHECK-SD: // %bb.0: // %entry
920 ; CHECK-SD-NEXT: sshll v2.4s, v0.4h, #0
921 ; CHECK-SD-NEXT: sshll2 v4.4s, v0.8h, #0
922 ; CHECK-SD-NEXT: sshll v5.4s, v1.4h, #0
923 ; CHECK-SD-NEXT: sshll2 v6.4s, v1.8h, #0
924 ; CHECK-SD-NEXT: sshll2 v1.2d, v2.4s, #0
925 ; CHECK-SD-NEXT: sshll v0.2d, v2.2s, #0
926 ; CHECK-SD-NEXT: sshll2 v3.2d, v4.4s, #0
927 ; CHECK-SD-NEXT: sshll v2.2d, v4.2s, #0
928 ; CHECK-SD-NEXT: sshll v4.2d, v5.2s, #0
929 ; CHECK-SD-NEXT: sshll2 v7.2d, v6.4s, #0
930 ; CHECK-SD-NEXT: sshll2 v5.2d, v5.4s, #0
931 ; CHECK-SD-NEXT: sshll v6.2d, v6.2s, #0
934 ; CHECK-GI-LABEL: sext_v16i16_v16i64:
935 ; CHECK-GI: // %bb.0: // %entry
936 ; CHECK-GI-NEXT: sshll v2.4s, v0.4h, #0
937 ; CHECK-GI-NEXT: sshll2 v3.4s, v0.8h, #0
938 ; CHECK-GI-NEXT: sshll v5.4s, v1.4h, #0
939 ; CHECK-GI-NEXT: sshll2 v7.4s, v1.8h, #0
940 ; CHECK-GI-NEXT: sshll v0.2d, v2.2s, #0
941 ; CHECK-GI-NEXT: sshll2 v1.2d, v2.4s, #0
942 ; CHECK-GI-NEXT: sshll v2.2d, v3.2s, #0
943 ; CHECK-GI-NEXT: sshll2 v3.2d, v3.4s, #0
944 ; CHECK-GI-NEXT: sshll v4.2d, v5.2s, #0
945 ; CHECK-GI-NEXT: sshll2 v5.2d, v5.4s, #0
946 ; CHECK-GI-NEXT: sshll v6.2d, v7.2s, #0
947 ; CHECK-GI-NEXT: sshll2 v7.2d, v7.4s, #0
950 %c = sext <16 x i16> %a to <16 x i64>
954 define <16 x i64> @sext_v16i32_v16i64(<16 x i32> %a) {
955 ; CHECK-SD-LABEL: sext_v16i32_v16i64:
956 ; CHECK-SD: // %bb.0: // %entry
957 ; CHECK-SD-NEXT: sshll2 v17.2d, v0.4s, #0
958 ; CHECK-SD-NEXT: sshll2 v16.2d, v1.4s, #0
959 ; CHECK-SD-NEXT: sshll v18.2d, v1.2s, #0
960 ; CHECK-SD-NEXT: sshll v0.2d, v0.2s, #0
961 ; CHECK-SD-NEXT: sshll v4.2d, v2.2s, #0
962 ; CHECK-SD-NEXT: sshll2 v5.2d, v2.4s, #0
963 ; CHECK-SD-NEXT: sshll2 v7.2d, v3.4s, #0
964 ; CHECK-SD-NEXT: sshll v6.2d, v3.2s, #0
965 ; CHECK-SD-NEXT: mov v1.16b, v17.16b
966 ; CHECK-SD-NEXT: mov v2.16b, v18.16b
967 ; CHECK-SD-NEXT: mov v3.16b, v16.16b
970 ; CHECK-GI-LABEL: sext_v16i32_v16i64:
971 ; CHECK-GI: // %bb.0: // %entry
972 ; CHECK-GI-NEXT: sshll v16.2d, v0.2s, #0
973 ; CHECK-GI-NEXT: sshll2 v17.2d, v0.4s, #0
974 ; CHECK-GI-NEXT: sshll v18.2d, v1.2s, #0
975 ; CHECK-GI-NEXT: sshll2 v19.2d, v1.4s, #0
976 ; CHECK-GI-NEXT: sshll v4.2d, v2.2s, #0
977 ; CHECK-GI-NEXT: sshll2 v5.2d, v2.4s, #0
978 ; CHECK-GI-NEXT: sshll v6.2d, v3.2s, #0
979 ; CHECK-GI-NEXT: sshll2 v7.2d, v3.4s, #0
980 ; CHECK-GI-NEXT: mov v0.16b, v16.16b
981 ; CHECK-GI-NEXT: mov v1.16b, v17.16b
982 ; CHECK-GI-NEXT: mov v2.16b, v18.16b
983 ; CHECK-GI-NEXT: mov v3.16b, v19.16b
986 %c = sext <16 x i32> %a to <16 x i64>
990 define <16 x i16> @sext_v16i10_v16i16(<16 x i10> %a) {
991 ; CHECK-SD-LABEL: sext_v16i10_v16i16:
992 ; CHECK-SD: // %bb.0: // %entry
993 ; CHECK-SD-NEXT: ldr w8, [sp]
994 ; CHECK-SD-NEXT: fmov s1, w0
995 ; CHECK-SD-NEXT: ldr w9, [sp, #8]
996 ; CHECK-SD-NEXT: fmov s0, w8
997 ; CHECK-SD-NEXT: ldr w8, [sp, #16]
998 ; CHECK-SD-NEXT: mov v1.h[1], w1
999 ; CHECK-SD-NEXT: mov v0.h[1], w9
1000 ; CHECK-SD-NEXT: mov v1.h[2], w2
1001 ; CHECK-SD-NEXT: mov v0.h[2], w8
1002 ; CHECK-SD-NEXT: ldr w8, [sp, #24]
1003 ; CHECK-SD-NEXT: mov v1.h[3], w3
1004 ; CHECK-SD-NEXT: mov v0.h[3], w8
1005 ; CHECK-SD-NEXT: ldr w8, [sp, #32]
1006 ; CHECK-SD-NEXT: mov v1.h[4], w4
1007 ; CHECK-SD-NEXT: mov v0.h[4], w8
1008 ; CHECK-SD-NEXT: ldr w8, [sp, #40]
1009 ; CHECK-SD-NEXT: mov v1.h[5], w5
1010 ; CHECK-SD-NEXT: mov v0.h[5], w8
1011 ; CHECK-SD-NEXT: ldr w8, [sp, #48]
1012 ; CHECK-SD-NEXT: mov v1.h[6], w6
1013 ; CHECK-SD-NEXT: mov v0.h[6], w8
1014 ; CHECK-SD-NEXT: ldr w8, [sp, #56]
1015 ; CHECK-SD-NEXT: mov v1.h[7], w7
1016 ; CHECK-SD-NEXT: mov v0.h[7], w8
1017 ; CHECK-SD-NEXT: shl v1.8h, v1.8h, #6
1018 ; CHECK-SD-NEXT: shl v2.8h, v0.8h, #6
1019 ; CHECK-SD-NEXT: sshr v0.8h, v1.8h, #6
1020 ; CHECK-SD-NEXT: sshr v1.8h, v2.8h, #6
1021 ; CHECK-SD-NEXT: ret
1023 ; CHECK-GI-LABEL: sext_v16i10_v16i16:
1024 ; CHECK-GI: // %bb.0: // %entry
1025 ; CHECK-GI-NEXT: ldr w8, [sp]
1026 ; CHECK-GI-NEXT: fmov s0, w0
1027 ; CHECK-GI-NEXT: ldr w9, [sp, #8]
1028 ; CHECK-GI-NEXT: fmov s1, w8
1029 ; CHECK-GI-NEXT: ldr w8, [sp, #16]
1030 ; CHECK-GI-NEXT: mov v0.h[1], w1
1031 ; CHECK-GI-NEXT: mov v1.h[1], w9
1032 ; CHECK-GI-NEXT: mov v0.h[2], w2
1033 ; CHECK-GI-NEXT: mov v1.h[2], w8
1034 ; CHECK-GI-NEXT: ldr w8, [sp, #24]
1035 ; CHECK-GI-NEXT: mov v0.h[3], w3
1036 ; CHECK-GI-NEXT: mov v1.h[3], w8
1037 ; CHECK-GI-NEXT: ldr w8, [sp, #32]
1038 ; CHECK-GI-NEXT: mov v0.h[4], w4
1039 ; CHECK-GI-NEXT: mov v1.h[4], w8
1040 ; CHECK-GI-NEXT: ldr w8, [sp, #40]
1041 ; CHECK-GI-NEXT: mov v0.h[5], w5
1042 ; CHECK-GI-NEXT: mov v1.h[5], w8
1043 ; CHECK-GI-NEXT: ldr w8, [sp, #48]
1044 ; CHECK-GI-NEXT: mov v0.h[6], w6
1045 ; CHECK-GI-NEXT: mov v1.h[6], w8
1046 ; CHECK-GI-NEXT: ldr w8, [sp, #56]
1047 ; CHECK-GI-NEXT: mov v0.h[7], w7
1048 ; CHECK-GI-NEXT: mov v1.h[7], w8
1049 ; CHECK-GI-NEXT: shl v0.8h, v0.8h, #6
1050 ; CHECK-GI-NEXT: shl v1.8h, v1.8h, #6
1051 ; CHECK-GI-NEXT: sshr v0.8h, v0.8h, #6
1052 ; CHECK-GI-NEXT: sshr v1.8h, v1.8h, #6
1053 ; CHECK-GI-NEXT: ret
1055 %c = sext <16 x i10> %a to <16 x i16>
1059 define <16 x i32> @sext_v16i10_v16i32(<16 x i10> %a) {
1060 ; CHECK-SD-LABEL: sext_v16i10_v16i32:
1061 ; CHECK-SD: // %bb.0: // %entry
1062 ; CHECK-SD-NEXT: ldr w8, [sp, #32]
1063 ; CHECK-SD-NEXT: ldr w9, [sp]
1064 ; CHECK-SD-NEXT: fmov s0, w0
1065 ; CHECK-SD-NEXT: fmov s1, w4
1066 ; CHECK-SD-NEXT: ldr w10, [sp, #40]
1067 ; CHECK-SD-NEXT: ldr w11, [sp, #8]
1068 ; CHECK-SD-NEXT: fmov s2, w9
1069 ; CHECK-SD-NEXT: fmov s3, w8
1070 ; CHECK-SD-NEXT: ldr w8, [sp, #48]
1071 ; CHECK-SD-NEXT: mov v0.h[1], w1
1072 ; CHECK-SD-NEXT: ldr w9, [sp, #16]
1073 ; CHECK-SD-NEXT: mov v1.h[1], w5
1074 ; CHECK-SD-NEXT: mov v2.h[1], w11
1075 ; CHECK-SD-NEXT: mov v3.h[1], w10
1076 ; CHECK-SD-NEXT: mov v0.h[2], w2
1077 ; CHECK-SD-NEXT: mov v1.h[2], w6
1078 ; CHECK-SD-NEXT: mov v2.h[2], w9
1079 ; CHECK-SD-NEXT: mov v3.h[2], w8
1080 ; CHECK-SD-NEXT: ldr w8, [sp, #56]
1081 ; CHECK-SD-NEXT: ldr w9, [sp, #24]
1082 ; CHECK-SD-NEXT: mov v0.h[3], w3
1083 ; CHECK-SD-NEXT: mov v1.h[3], w7
1084 ; CHECK-SD-NEXT: mov v2.h[3], w9
1085 ; CHECK-SD-NEXT: mov v3.h[3], w8
1086 ; CHECK-SD-NEXT: ushll v0.4s, v0.4h, #0
1087 ; CHECK-SD-NEXT: ushll v1.4s, v1.4h, #0
1088 ; CHECK-SD-NEXT: ushll v2.4s, v2.4h, #0
1089 ; CHECK-SD-NEXT: ushll v3.4s, v3.4h, #0
1090 ; CHECK-SD-NEXT: shl v0.4s, v0.4s, #22
1091 ; CHECK-SD-NEXT: shl v1.4s, v1.4s, #22
1092 ; CHECK-SD-NEXT: shl v2.4s, v2.4s, #22
1093 ; CHECK-SD-NEXT: shl v3.4s, v3.4s, #22
1094 ; CHECK-SD-NEXT: sshr v0.4s, v0.4s, #22
1095 ; CHECK-SD-NEXT: sshr v1.4s, v1.4s, #22
1096 ; CHECK-SD-NEXT: sshr v2.4s, v2.4s, #22
1097 ; CHECK-SD-NEXT: sshr v3.4s, v3.4s, #22
1098 ; CHECK-SD-NEXT: ret
1100 ; CHECK-GI-LABEL: sext_v16i10_v16i32:
1101 ; CHECK-GI: // %bb.0: // %entry
1102 ; CHECK-GI-NEXT: ldr w8, [sp]
1103 ; CHECK-GI-NEXT: ldr w9, [sp, #32]
1104 ; CHECK-GI-NEXT: fmov s0, w0
1105 ; CHECK-GI-NEXT: fmov s1, w4
1106 ; CHECK-GI-NEXT: ldr w10, [sp, #8]
1107 ; CHECK-GI-NEXT: ldr w11, [sp, #40]
1108 ; CHECK-GI-NEXT: fmov s2, w8
1109 ; CHECK-GI-NEXT: fmov s3, w9
1110 ; CHECK-GI-NEXT: ldr w8, [sp, #16]
1111 ; CHECK-GI-NEXT: mov v0.h[1], w1
1112 ; CHECK-GI-NEXT: ldr w9, [sp, #48]
1113 ; CHECK-GI-NEXT: mov v1.h[1], w5
1114 ; CHECK-GI-NEXT: mov v2.h[1], w10
1115 ; CHECK-GI-NEXT: mov v3.h[1], w11
1116 ; CHECK-GI-NEXT: mov v0.h[2], w2
1117 ; CHECK-GI-NEXT: mov v1.h[2], w6
1118 ; CHECK-GI-NEXT: mov v2.h[2], w8
1119 ; CHECK-GI-NEXT: mov v3.h[2], w9
1120 ; CHECK-GI-NEXT: ldr w8, [sp, #24]
1121 ; CHECK-GI-NEXT: ldr w9, [sp, #56]
1122 ; CHECK-GI-NEXT: mov v0.h[3], w3
1123 ; CHECK-GI-NEXT: mov v1.h[3], w7
1124 ; CHECK-GI-NEXT: mov v2.h[3], w8
1125 ; CHECK-GI-NEXT: mov v3.h[3], w9
1126 ; CHECK-GI-NEXT: ushll v0.4s, v0.4h, #0
1127 ; CHECK-GI-NEXT: ushll v1.4s, v1.4h, #0
1128 ; CHECK-GI-NEXT: ushll v2.4s, v2.4h, #0
1129 ; CHECK-GI-NEXT: ushll v3.4s, v3.4h, #0
1130 ; CHECK-GI-NEXT: shl v0.4s, v0.4s, #22
1131 ; CHECK-GI-NEXT: shl v1.4s, v1.4s, #22
1132 ; CHECK-GI-NEXT: shl v2.4s, v2.4s, #22
1133 ; CHECK-GI-NEXT: shl v3.4s, v3.4s, #22
1134 ; CHECK-GI-NEXT: sshr v0.4s, v0.4s, #22
1135 ; CHECK-GI-NEXT: sshr v1.4s, v1.4s, #22
1136 ; CHECK-GI-NEXT: sshr v2.4s, v2.4s, #22
1137 ; CHECK-GI-NEXT: sshr v3.4s, v3.4s, #22
1138 ; CHECK-GI-NEXT: ret
1140 %c = sext <16 x i10> %a to <16 x i32>
1144 define <16 x i64> @sext_v16i10_v16i64(<16 x i10> %a) {
1145 ; CHECK-SD-LABEL: sext_v16i10_v16i64:
1146 ; CHECK-SD: // %bb.0: // %entry
1147 ; CHECK-SD-NEXT: fmov s0, w2
1148 ; CHECK-SD-NEXT: fmov s1, w0
1149 ; CHECK-SD-NEXT: ldr s2, [sp]
1150 ; CHECK-SD-NEXT: fmov s3, w4
1151 ; CHECK-SD-NEXT: fmov s4, w6
1152 ; CHECK-SD-NEXT: add x8, sp, #8
1153 ; CHECK-SD-NEXT: ldr s5, [sp, #16]
1154 ; CHECK-SD-NEXT: ldr s6, [sp, #32]
1155 ; CHECK-SD-NEXT: ldr s7, [sp, #48]
1156 ; CHECK-SD-NEXT: mov v1.s[1], w1
1157 ; CHECK-SD-NEXT: mov v0.s[1], w3
1158 ; CHECK-SD-NEXT: ld1 { v2.s }[1], [x8]
1159 ; CHECK-SD-NEXT: mov v3.s[1], w5
1160 ; CHECK-SD-NEXT: mov v4.s[1], w7
1161 ; CHECK-SD-NEXT: add x8, sp, #24
1162 ; CHECK-SD-NEXT: add x9, sp, #40
1163 ; CHECK-SD-NEXT: add x10, sp, #56
1164 ; CHECK-SD-NEXT: ld1 { v5.s }[1], [x8]
1165 ; CHECK-SD-NEXT: ld1 { v6.s }[1], [x9]
1166 ; CHECK-SD-NEXT: ld1 { v7.s }[1], [x10]
1167 ; CHECK-SD-NEXT: ushll v2.2d, v2.2s, #0
1168 ; CHECK-SD-NEXT: ushll v1.2d, v1.2s, #0
1169 ; CHECK-SD-NEXT: ushll v0.2d, v0.2s, #0
1170 ; CHECK-SD-NEXT: ushll v3.2d, v3.2s, #0
1171 ; CHECK-SD-NEXT: ushll v4.2d, v4.2s, #0
1172 ; CHECK-SD-NEXT: ushll v5.2d, v5.2s, #0
1173 ; CHECK-SD-NEXT: ushll v6.2d, v6.2s, #0
1174 ; CHECK-SD-NEXT: ushll v7.2d, v7.2s, #0
1175 ; CHECK-SD-NEXT: shl v17.2d, v2.2d, #54
1176 ; CHECK-SD-NEXT: shl v1.2d, v1.2d, #54
1177 ; CHECK-SD-NEXT: shl v16.2d, v0.2d, #54
1178 ; CHECK-SD-NEXT: shl v3.2d, v3.2d, #54
1179 ; CHECK-SD-NEXT: shl v4.2d, v4.2d, #54
1180 ; CHECK-SD-NEXT: shl v5.2d, v5.2d, #54
1181 ; CHECK-SD-NEXT: shl v6.2d, v6.2d, #54
1182 ; CHECK-SD-NEXT: shl v7.2d, v7.2d, #54
1183 ; CHECK-SD-NEXT: sshr v0.2d, v1.2d, #54
1184 ; CHECK-SD-NEXT: sshr v1.2d, v16.2d, #54
1185 ; CHECK-SD-NEXT: sshr v2.2d, v3.2d, #54
1186 ; CHECK-SD-NEXT: sshr v3.2d, v4.2d, #54
1187 ; CHECK-SD-NEXT: sshr v4.2d, v17.2d, #54
1188 ; CHECK-SD-NEXT: sshr v5.2d, v5.2d, #54
1189 ; CHECK-SD-NEXT: sshr v6.2d, v6.2d, #54
1190 ; CHECK-SD-NEXT: sshr v7.2d, v7.2d, #54
1191 ; CHECK-SD-NEXT: ret
1193 ; CHECK-GI-LABEL: sext_v16i10_v16i64:
1194 ; CHECK-GI: // %bb.0: // %entry
1195 ; CHECK-GI-NEXT: mov v1.s[0], w0
1196 ; CHECK-GI-NEXT: mov v2.s[0], w2
1197 ; CHECK-GI-NEXT: ldr s0, [sp]
1198 ; CHECK-GI-NEXT: mov v3.s[0], w4
1199 ; CHECK-GI-NEXT: mov v4.s[0], w6
1200 ; CHECK-GI-NEXT: ldr s5, [sp, #8]
1201 ; CHECK-GI-NEXT: ldr s6, [sp, #16]
1202 ; CHECK-GI-NEXT: ldr s7, [sp, #24]
1203 ; CHECK-GI-NEXT: ldr s16, [sp, #32]
1204 ; CHECK-GI-NEXT: ldr s17, [sp, #40]
1205 ; CHECK-GI-NEXT: ldr s18, [sp, #48]
1206 ; CHECK-GI-NEXT: ldr s19, [sp, #56]
1207 ; CHECK-GI-NEXT: mov v1.s[1], w1
1208 ; CHECK-GI-NEXT: mov v0.s[1], v5.s[0]
1209 ; CHECK-GI-NEXT: mov v2.s[1], w3
1210 ; CHECK-GI-NEXT: mov v3.s[1], w5
1211 ; CHECK-GI-NEXT: mov v4.s[1], w7
1212 ; CHECK-GI-NEXT: mov v6.s[1], v7.s[0]
1213 ; CHECK-GI-NEXT: mov v16.s[1], v17.s[0]
1214 ; CHECK-GI-NEXT: mov v18.s[1], v19.s[0]
1215 ; CHECK-GI-NEXT: ushll v0.2d, v0.2s, #0
1216 ; CHECK-GI-NEXT: ushll v1.2d, v1.2s, #0
1217 ; CHECK-GI-NEXT: ushll v2.2d, v2.2s, #0
1218 ; CHECK-GI-NEXT: ushll v3.2d, v3.2s, #0
1219 ; CHECK-GI-NEXT: ushll v4.2d, v4.2s, #0
1220 ; CHECK-GI-NEXT: ushll v5.2d, v6.2s, #0
1221 ; CHECK-GI-NEXT: ushll v6.2d, v16.2s, #0
1222 ; CHECK-GI-NEXT: ushll v7.2d, v18.2s, #0
1223 ; CHECK-GI-NEXT: shl v0.2d, v0.2d, #54
1224 ; CHECK-GI-NEXT: shl v1.2d, v1.2d, #54
1225 ; CHECK-GI-NEXT: shl v2.2d, v2.2d, #54
1226 ; CHECK-GI-NEXT: shl v3.2d, v3.2d, #54
1227 ; CHECK-GI-NEXT: shl v16.2d, v4.2d, #54
1228 ; CHECK-GI-NEXT: shl v5.2d, v5.2d, #54
1229 ; CHECK-GI-NEXT: shl v6.2d, v6.2d, #54
1230 ; CHECK-GI-NEXT: shl v7.2d, v7.2d, #54
1231 ; CHECK-GI-NEXT: sshr v4.2d, v0.2d, #54
1232 ; CHECK-GI-NEXT: sshr v0.2d, v1.2d, #54
1233 ; CHECK-GI-NEXT: sshr v1.2d, v2.2d, #54
1234 ; CHECK-GI-NEXT: sshr v2.2d, v3.2d, #54
1235 ; CHECK-GI-NEXT: sshr v3.2d, v16.2d, #54
1236 ; CHECK-GI-NEXT: sshr v5.2d, v5.2d, #54
1237 ; CHECK-GI-NEXT: sshr v6.2d, v6.2d, #54
1238 ; CHECK-GI-NEXT: sshr v7.2d, v7.2d, #54
1239 ; CHECK-GI-NEXT: ret
1241 %c = sext <16 x i10> %a to <16 x i64>