@@ -240,14 +240,9 @@ define <2 x i64> @dupzext_v2i16_v2i64(i16 %src, <2 x i16> %b) {
240240; CHECK-GI-NEXT: and x8, x0, #0xffff
241241; CHECK-GI-NEXT: and v0.16b, v0.16b, v1.16b
242242; 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
251246; CHECK-GI-NEXT: ret
252247entry:
253248 %in = zext i16 %src to i64
@@ -419,9 +414,10 @@ define <8 x i16> @missing_insert(<8 x i8> %b) {
419414;
420415; CHECK-GI-LABEL: missing_insert:
421416; 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
425421; CHECK-GI-NEXT: ret
426422entry:
427423 %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) {
440436; CHECK-GI-LABEL: shufsext_v8i8_v8i16:
441437; CHECK-GI: // %bb.0: // %entry
442438; CHECK-GI-NEXT: sshll v0.8h, v0.8b, #0
443- ; CHECK-GI-NEXT: sshll v1.8h, v1.8b, #0
444439; CHECK-GI-NEXT: rev64 v0.8h, v0.8h
445440; 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
447443; CHECK-GI-NEXT: ret
448444entry:
449445 %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) {
463459; CHECK-GI-LABEL: shufsext_v2i32_v2i64:
464460; CHECK-GI: // %bb.0: // %entry
465461; CHECK-GI-NEXT: sshll v0.2d, v0.2s, #0
466- ; CHECK-GI-NEXT: sshll v1.2d, v1.2s, #0
467462; 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
476465; CHECK-GI-NEXT: ret
477466entry:
478467 %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) {
515504; CHECK-GI-LABEL: shufzext_v2i32_v2i64:
516505; CHECK-GI: // %bb.0: // %entry
517506; CHECK-GI-NEXT: sshll v0.2d, v0.2s, #0
518- ; CHECK-GI-NEXT: sshll v1.2d, v1.2s, #0
519507; 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
528510; CHECK-GI-NEXT: ret
529511entry:
530512 %in = sext <2 x i32 > %src to <2 x i64 >
0 commit comments