@@ -240,14 +240,9 @@ define <2 x i64> @dupzext_v2i16_v2i64(i16 %src, <2 x i16> %b) {
240
240
; CHECK-GI-NEXT: and x8, x0, #0xffff
241
241
; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b
242
242
; CHECK-GI-NEXT: dup v1.2d, x8
243
- ; CHECK-GI-NEXT: fmov x8, d1
244
- ; CHECK-GI-NEXT: fmov x9, d0
245
- ; CHECK-GI-NEXT: mov x10, v1.d[1]
246
- ; CHECK-GI-NEXT: mov x11, v0.d[1]
247
- ; CHECK-GI-NEXT: mul x8, x8, x9
248
- ; CHECK-GI-NEXT: mul x9, x10, x11
249
- ; CHECK-GI-NEXT: mov v0.d[0], x8
250
- ; CHECK-GI-NEXT: mov v0.d[1], x9
243
+ ; CHECK-GI-NEXT: xtn v1.2s, v1.2d
244
+ ; CHECK-GI-NEXT: xtn v0.2s, v0.2d
245
+ ; CHECK-GI-NEXT: smull v0.2d, v1.2s, v0.2s
251
246
; CHECK-GI-NEXT: ret
252
247
entry:
253
248
%in = zext i16 %src to i64
@@ -419,9 +414,10 @@ define <8 x i16> @missing_insert(<8 x i8> %b) {
419
414
;
420
415
; CHECK-GI-LABEL: missing_insert:
421
416
; CHECK-GI: // %bb.0: // %entry
422
- ; CHECK-GI-NEXT: sshll v0.8h, v0.8b, #0
423
- ; CHECK-GI-NEXT: ext v1.16b, v0.16b, v0.16b, #4
424
- ; CHECK-GI-NEXT: mul v0.8h, v1.8h, v0.8h
417
+ ; CHECK-GI-NEXT: sshll v1.8h, v0.8b, #0
418
+ ; CHECK-GI-NEXT: ext v1.16b, v1.16b, v1.16b, #4
419
+ ; CHECK-GI-NEXT: xtn v1.8b, v1.8h
420
+ ; CHECK-GI-NEXT: smull v0.8h, v1.8b, v0.8b
425
421
; CHECK-GI-NEXT: ret
426
422
entry:
427
423
%ext.b = sext <8 x i8 > %b to <8 x i16 >
@@ -440,10 +436,10 @@ define <8 x i16> @shufsext_v8i8_v8i16(<8 x i8> %src, <8 x i8> %b) {
440
436
; CHECK-GI-LABEL: shufsext_v8i8_v8i16:
441
437
; CHECK-GI: // %bb.0: // %entry
442
438
; CHECK-GI-NEXT: sshll v0.8h, v0.8b, #0
443
- ; CHECK-GI-NEXT: sshll v1.8h, v1.8b, #0
444
439
; CHECK-GI-NEXT: rev64 v0.8h, v0.8h
445
440
; CHECK-GI-NEXT: ext v0.16b, v0.16b, v0.16b, #8
446
- ; CHECK-GI-NEXT: mul v0.8h, v0.8h, v1.8h
441
+ ; CHECK-GI-NEXT: xtn v0.8b, v0.8h
442
+ ; CHECK-GI-NEXT: smull v0.8h, v0.8b, v1.8b
447
443
; CHECK-GI-NEXT: ret
448
444
entry:
449
445
%in = sext <8 x i8 > %src to <8 x i16 >
@@ -463,16 +459,9 @@ define <2 x i64> @shufsext_v2i32_v2i64(<2 x i32> %src, <2 x i32> %b) {
463
459
; CHECK-GI-LABEL: shufsext_v2i32_v2i64:
464
460
; CHECK-GI: // %bb.0: // %entry
465
461
; CHECK-GI-NEXT: sshll v0.2d, v0.2s, #0
466
- ; CHECK-GI-NEXT: sshll v1.2d, v1.2s, #0
467
462
; CHECK-GI-NEXT: ext v0.16b, v0.16b, v0.16b, #8
468
- ; CHECK-GI-NEXT: fmov x9, d1
469
- ; CHECK-GI-NEXT: mov x11, v1.d[1]
470
- ; CHECK-GI-NEXT: fmov x8, d0
471
- ; CHECK-GI-NEXT: mov x10, v0.d[1]
472
- ; CHECK-GI-NEXT: mul x8, x8, x9
473
- ; CHECK-GI-NEXT: mul x9, x10, x11
474
- ; CHECK-GI-NEXT: mov v0.d[0], x8
475
- ; CHECK-GI-NEXT: mov v0.d[1], x9
463
+ ; CHECK-GI-NEXT: xtn v0.2s, v0.2d
464
+ ; CHECK-GI-NEXT: smull v0.2d, v0.2s, v1.2s
476
465
; CHECK-GI-NEXT: ret
477
466
entry:
478
467
%in = sext <2 x i32 > %src to <2 x i64 >
@@ -515,16 +504,9 @@ define <2 x i64> @shufzext_v2i32_v2i64(<2 x i32> %src, <2 x i32> %b) {
515
504
; CHECK-GI-LABEL: shufzext_v2i32_v2i64:
516
505
; CHECK-GI: // %bb.0: // %entry
517
506
; CHECK-GI-NEXT: sshll v0.2d, v0.2s, #0
518
- ; CHECK-GI-NEXT: sshll v1.2d, v1.2s, #0
519
507
; CHECK-GI-NEXT: ext v0.16b, v0.16b, v0.16b, #8
520
- ; CHECK-GI-NEXT: fmov x9, d1
521
- ; CHECK-GI-NEXT: mov x11, v1.d[1]
522
- ; CHECK-GI-NEXT: fmov x8, d0
523
- ; CHECK-GI-NEXT: mov x10, v0.d[1]
524
- ; CHECK-GI-NEXT: mul x8, x8, x9
525
- ; CHECK-GI-NEXT: mul x9, x10, x11
526
- ; CHECK-GI-NEXT: mov v0.d[0], x8
527
- ; CHECK-GI-NEXT: mov v0.d[1], x9
508
+ ; CHECK-GI-NEXT: xtn v0.2s, v0.2d
509
+ ; CHECK-GI-NEXT: smull v0.2d, v0.2s, v1.2s
528
510
; CHECK-GI-NEXT: ret
529
511
entry:
530
512
%in = sext <2 x i32 > %src to <2 x i64 >
0 commit comments