@@ -247,10 +247,10 @@ define i32 @si32_7(i32 %a, i32 %b) {
247247; CHECK-SD-LABEL: si32_7:
248248; CHECK-SD: // %bb.0: // %entry
249249; CHECK-SD-NEXT: mov w8, #9363 // =0x2493
250+ ; CHECK-SD-NEXT: // kill: def $w0 killed $w0 def $x0
250251; CHECK-SD-NEXT: movk w8, #37449, lsl #16
251252; CHECK-SD-NEXT: smull x8, w0, w8
252- ; CHECK-SD-NEXT: lsr x8, x8, #32
253- ; CHECK-SD-NEXT: add w8, w8, w0
253+ ; CHECK-SD-NEXT: add x8, x0, x8, lsr #32
254254; CHECK-SD-NEXT: asr w9, w8, #2
255255; CHECK-SD-NEXT: add w8, w9, w8, lsr #31
256256; CHECK-SD-NEXT: sub w8, w8, w8, lsl #3
@@ -260,10 +260,10 @@ define i32 @si32_7(i32 %a, i32 %b) {
260260; CHECK-GI-LABEL: si32_7:
261261; CHECK-GI: // %bb.0: // %entry
262262; CHECK-GI-NEXT: mov w8, #9363 // =0x2493
263+ ; CHECK-GI-NEXT: // kill: def $w0 killed $w0 def $x0
263264; CHECK-GI-NEXT: movk w8, #37449, lsl #16
264265; CHECK-GI-NEXT: smull x8, w0, w8
265- ; CHECK-GI-NEXT: asr x8, x8, #32
266- ; CHECK-GI-NEXT: add w8, w8, w0
266+ ; CHECK-GI-NEXT: add x8, x0, x8, asr #32
267267; CHECK-GI-NEXT: asr w8, w8, #2
268268; CHECK-GI-NEXT: add w8, w8, w8, lsr #31
269269; CHECK-GI-NEXT: lsl w9, w8, #3
@@ -801,13 +801,10 @@ define <3 x i8> @sv3i8_7(<3 x i8> %d, <3 x i8> %e) {
801801; CHECK-SD-NEXT: smull x10, w10, w9
802802; CHECK-SD-NEXT: smull x9, w11, w9
803803; CHECK-SD-NEXT: sxtb w11, w2
804- ; CHECK-SD-NEXT: lsr x8, x8, #32
805- ; CHECK-SD-NEXT: lsr x10, x10, #32
806- ; CHECK-SD-NEXT: lsr x9, x9, #32
807- ; CHECK-SD-NEXT: add w8, w8, w13
808- ; CHECK-SD-NEXT: add w10, w10, w12
804+ ; CHECK-SD-NEXT: add x8, x13, x8, lsr #32
805+ ; CHECK-SD-NEXT: add x10, x12, x10, lsr #32
806+ ; CHECK-SD-NEXT: add x9, x11, x9, lsr #32
809807; CHECK-SD-NEXT: asr w14, w8, #2
810- ; CHECK-SD-NEXT: add w9, w9, w11
811808; CHECK-SD-NEXT: asr w15, w10, #2
812809; CHECK-SD-NEXT: asr w16, w9, #2
813810; CHECK-SD-NEXT: add w8, w14, w8, lsr #31
@@ -899,45 +896,41 @@ define <4 x i8> @sv4i8_7(<4 x i8> %d, <4 x i8> %e) {
899896; CHECK-SD-NEXT: mov x8, #-56173 // =0xffffffffffff2493
900897; CHECK-SD-NEXT: movk x8, #37449, lsl #16
901898; CHECK-SD-NEXT: sshr v0.4h, v0.4h, #8
902- ; CHECK-SD-NEXT: smov x9, v0.h[0]
903- ; CHECK-SD-NEXT: smov x10, v0.h[1]
904- ; CHECK-SD-NEXT: smov w11, v0.h[0]
905- ; CHECK-SD-NEXT: smov x12, v0.h[2]
906- ; CHECK-SD-NEXT: smov w13, v0.h[1]
907- ; CHECK-SD-NEXT: smov x14, v0.h[3]
908- ; CHECK-SD-NEXT: smov w16, v0.h[2]
909- ; CHECK-SD-NEXT: smull x9, w9, w8
899+ ; CHECK-SD-NEXT: smov x10, v0.h[0]
900+ ; CHECK-SD-NEXT: smov x9, v0.h[1]
901+ ; CHECK-SD-NEXT: smov w12, v0.h[0]
902+ ; CHECK-SD-NEXT: smov w11, v0.h[1]
903+ ; CHECK-SD-NEXT: smov x13, v0.h[2]
904+ ; CHECK-SD-NEXT: smov w14, v0.h[2]
905+ ; CHECK-SD-NEXT: smov x17, v0.h[3]
910906; CHECK-SD-NEXT: smull x10, w10, w8
911- ; CHECK-SD-NEXT: smull x12, w12 , w8
912- ; CHECK-SD-NEXT: lsr x9, x9, #32
913- ; CHECK-SD-NEXT: smull x8, w14, w8
914- ; CHECK-SD-NEXT: smov w14, v0.h[3]
915- ; CHECK-SD-NEXT: lsr x10, x10, #32
916- ; CHECK-SD-NEXT: add w9, w9, w11
917- ; CHECK-SD-NEXT: lsr x12, x12, #32
907+ ; CHECK-SD-NEXT: smull x9, w9 , w8
908+ ; CHECK-SD-NEXT: smull x13, w13, w8
909+ ; CHECK-SD-NEXT: add x10, x12, x10, lsr #32
910+ ; CHECK-SD-NEXT: smull x8, w17, w8
911+ ; CHECK-SD-NEXT: add x9, x11, x9, lsr #32
912+ ; CHECK-SD-NEXT: asr w16, w10, #2
913+ ; CHECK-SD-NEXT: add x13, x14, x13, lsr #32
918914; CHECK-SD-NEXT: asr w15, w9, #2
919- ; CHECK-SD-NEXT: add w10, w10, w13
920- ; CHECK-SD-NEXT: lsr x8, x8, #32
921- ; CHECK-SD-NEXT: asr w17, w10, #2
922- ; CHECK-SD-NEXT: add w12, w12, w16
915+ ; CHECK-SD-NEXT: add w10, w16, w10, lsr #31
916+ ; CHECK-SD-NEXT: asr w16, w13, #2
923917; CHECK-SD-NEXT: add w9, w15, w9, lsr #31
924- ; CHECK-SD-NEXT: asr w15, w12, #2
925- ; CHECK-SD-NEXT: add w8, w8, w14
926- ; CHECK-SD-NEXT: add w10, w17, w10, lsr #31
927- ; CHECK-SD-NEXT: sub w9, w9, w9, lsl #3
918+ ; CHECK-SD-NEXT: smov w15, v0.h[3]
928919; CHECK-SD-NEXT: sub w10, w10, w10, lsl #3
929- ; CHECK-SD-NEXT: add w9, w11, w9
930- ; CHECK-SD-NEXT: fmov s0, w9
931- ; CHECK-SD-NEXT: add w10, w13, w10
932- ; CHECK-SD-NEXT: add w9, w15, w12, lsr #31
933920; CHECK-SD-NEXT: sub w9, w9, w9, lsl #3
934- ; CHECK-SD-NEXT: mov v0.h[1], w10
921+ ; CHECK-SD-NEXT: add w10, w12, w10
922+ ; CHECK-SD-NEXT: fmov s0, w10
923+ ; CHECK-SD-NEXT: add w9, w11, w9
924+ ; CHECK-SD-NEXT: add w10, w16, w13, lsr #31
925+ ; CHECK-SD-NEXT: add x8, x15, x8, lsr #32
926+ ; CHECK-SD-NEXT: mov v0.h[1], w9
927+ ; CHECK-SD-NEXT: sub w9, w10, w10, lsl #3
935928; CHECK-SD-NEXT: asr w10, w8, #2
936- ; CHECK-SD-NEXT: add w9, w16 , w9
929+ ; CHECK-SD-NEXT: add w9, w14 , w9
937930; CHECK-SD-NEXT: add w8, w10, w8, lsr #31
938931; CHECK-SD-NEXT: mov v0.h[2], w9
939932; CHECK-SD-NEXT: sub w8, w8, w8, lsl #3
940- ; CHECK-SD-NEXT: add w8, w14 , w8
933+ ; CHECK-SD-NEXT: add w8, w15 , w8
941934; CHECK-SD-NEXT: mov v0.h[3], w8
942935; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
943936; CHECK-SD-NEXT: ret
@@ -1770,32 +1763,29 @@ define <3 x i16> @sv3i16_7(<3 x i16> %d, <3 x i16> %e) {
17701763; CHECK-SD-NEXT: mov x8, #-56173 // =0xffffffffffff2493
17711764; CHECK-SD-NEXT: smov x10, v0.h[1]
17721765; CHECK-SD-NEXT: movk x8, #37449, lsl #16
1773- ; CHECK-SD-NEXT: smov w12, v0.h[0]
1774- ; CHECK-SD-NEXT: smov x11, v0.h[2]
1775- ; CHECK-SD-NEXT: smov w13, v0.h[1]
1766+ ; CHECK-SD-NEXT: smov w11, v0.h[0]
1767+ ; CHECK-SD-NEXT: smov x13, v0.h[2]
1768+ ; CHECK-SD-NEXT: smov w12, v0.h[1]
1769+ ; CHECK-SD-NEXT: smov w14, v0.h[2]
17761770; CHECK-SD-NEXT: smull x9, w9, w8
17771771; CHECK-SD-NEXT: smull x10, w10, w8
1778- ; CHECK-SD-NEXT: smull x8, w11, w8
1779- ; CHECK-SD-NEXT: smov w11, v0.h[2]
1780- ; CHECK-SD-NEXT: lsr x9, x9, #32
1781- ; CHECK-SD-NEXT: lsr x10, x10, #32
1782- ; CHECK-SD-NEXT: add w9, w9, w12
1783- ; CHECK-SD-NEXT: lsr x8, x8, #32
1784- ; CHECK-SD-NEXT: asr w14, w9, #2
1785- ; CHECK-SD-NEXT: add w10, w10, w13
1772+ ; CHECK-SD-NEXT: smull x8, w13, w8
1773+ ; CHECK-SD-NEXT: add x9, x11, x9, lsr #32
1774+ ; CHECK-SD-NEXT: add x10, x12, x10, lsr #32
1775+ ; CHECK-SD-NEXT: asr w13, w9, #2
1776+ ; CHECK-SD-NEXT: add x8, x14, x8, lsr #32
17861777; CHECK-SD-NEXT: asr w15, w10, #2
1787- ; CHECK-SD-NEXT: add w8, w8, w11
1788- ; CHECK-SD-NEXT: add w9, w14, w9, lsr #31
1789- ; CHECK-SD-NEXT: asr w14, w8, #2
1778+ ; CHECK-SD-NEXT: add w9, w13, w9, lsr #31
1779+ ; CHECK-SD-NEXT: asr w13, w8, #2
17901780; CHECK-SD-NEXT: add w10, w15, w10, lsr #31
17911781; CHECK-SD-NEXT: sub w9, w9, w9, lsl #3
1792- ; CHECK-SD-NEXT: add w8, w14 , w8, lsr #31
1782+ ; CHECK-SD-NEXT: add w8, w13 , w8, lsr #31
17931783; CHECK-SD-NEXT: sub w10, w10, w10, lsl #3
1794- ; CHECK-SD-NEXT: add w9, w12 , w9
1784+ ; CHECK-SD-NEXT: add w9, w11 , w9
17951785; CHECK-SD-NEXT: sub w8, w8, w8, lsl #3
17961786; CHECK-SD-NEXT: fmov s0, w9
1797- ; CHECK-SD-NEXT: add w10, w13 , w10
1798- ; CHECK-SD-NEXT: add w8, w11 , w8
1787+ ; CHECK-SD-NEXT: add w10, w12 , w10
1788+ ; CHECK-SD-NEXT: add w8, w14 , w8
17991789; CHECK-SD-NEXT: mov v0.h[1], w10
18001790; CHECK-SD-NEXT: mov v0.h[2], w8
18011791; CHECK-SD-NEXT: // kill: def $d0 killed $d0 killed $q0
@@ -2444,15 +2434,14 @@ define <3 x i32> @sv3i32_7(<3 x i32> %d, <3 x i32> %e) {
24442434; CHECK-SD-NEXT: dup v1.2s, w8
24452435; CHECK-SD-NEXT: smull x8, w9, w8
24462436; CHECK-SD-NEXT: smull v1.2d, v0.2s, v1.2s
2447- ; CHECK-SD-NEXT: lsr x8, x8, #32
2448- ; CHECK-SD-NEXT: add w8, w8, w9
2449- ; CHECK-SD-NEXT: shrn v1.2s, v1.2d, #32
2437+ ; CHECK-SD-NEXT: add x8, x9, x8, lsr #32
24502438; CHECK-SD-NEXT: asr w10, w8, #2
2439+ ; CHECK-SD-NEXT: shrn v1.2s, v1.2d, #32
24512440; CHECK-SD-NEXT: add w8, w10, w8, lsr #31
24522441; CHECK-SD-NEXT: add v1.2s, v1.2s, v0.2s
24532442; CHECK-SD-NEXT: sub w8, w8, w8, lsl #3
2454- ; CHECK-SD-NEXT: sshr v2.2s, v1.2s, #2
24552443; CHECK-SD-NEXT: add w8, w9, w8
2444+ ; CHECK-SD-NEXT: sshr v2.2s, v1.2s, #2
24562445; CHECK-SD-NEXT: usra v2.2s, v1.2s, #31
24572446; CHECK-SD-NEXT: mls v0.2s, v2.2s, v3.2s
24582447; CHECK-SD-NEXT: mov v0.s[2], w8
0 commit comments