@@ -516,20 +516,17 @@ define i8 @sminv_v4i8(<4 x i8> %a) {
516516; CHECK-GI-LABEL: sminv_v4i8:
517517; CHECK-GI: // %bb.0: // %entry
518518; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
519- ; CHECK-GI-NEXT: mov h1, v0.h[1]
520- ; CHECK-GI-NEXT: mov h2, v0.h[2]
521- ; CHECK-GI-NEXT: fmov w8, s0
522- ; CHECK-GI-NEXT: mov h3, v0.h[3]
519+ ; CHECK-GI-NEXT: umov w8, v0.h[0]
520+ ; CHECK-GI-NEXT: umov w9, v0.h[1]
521+ ; CHECK-GI-NEXT: umov w10, v0.h[2]
522+ ; CHECK-GI-NEXT: umov w12, v0.h[3]
523+ ; CHECK-GI-NEXT: sxtb w11, w8
524+ ; CHECK-GI-NEXT: cmp w11, w9, sxtb
525+ ; CHECK-GI-NEXT: sxtb w11, w10
526+ ; CHECK-GI-NEXT: csel w8, w8, w9, lt
527+ ; CHECK-GI-NEXT: cmp w11, w12, sxtb
523528; CHECK-GI-NEXT: sxtb w9, w8
524- ; CHECK-GI-NEXT: fmov w10, s1
525- ; CHECK-GI-NEXT: fmov w11, s2
526- ; CHECK-GI-NEXT: cmp w9, w10, sxtb
527- ; CHECK-GI-NEXT: sxtb w9, w11
528- ; CHECK-GI-NEXT: csel w8, w8, w10, lt
529- ; CHECK-GI-NEXT: fmov w10, s3
530- ; CHECK-GI-NEXT: cmp w9, w10, sxtb
531- ; CHECK-GI-NEXT: sxtb w9, w8
532- ; CHECK-GI-NEXT: csel w10, w11, w10, lt
529+ ; CHECK-GI-NEXT: csel w10, w10, w12, lt
533530; CHECK-GI-NEXT: cmp w9, w10, sxtb
534531; CHECK-GI-NEXT: csel w0, w8, w10, lt
535532; CHECK-GI-NEXT: ret
@@ -611,19 +608,16 @@ define i16 @sminv_v3i16(<3 x i16> %a) {
611608; CHECK-GI: // %bb.0: // %entry
612609; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
613610; CHECK-GI-NEXT: mov h1, v0.h[1]
614- ; CHECK-GI-NEXT: mov h2, v0.h[2]
615- ; CHECK-GI-NEXT: fmov w8, s0
616- ; CHECK-GI-NEXT: fmov w9, s0
617- ; CHECK-GI-NEXT: sxth w8, w8
618- ; CHECK-GI-NEXT: fmov w10, s1
619- ; CHECK-GI-NEXT: fmov w11, s2
611+ ; CHECK-GI-NEXT: smov w8, v0.h[0]
612+ ; CHECK-GI-NEXT: umov w9, v0.h[0]
613+ ; CHECK-GI-NEXT: umov w10, v0.h[1]
614+ ; CHECK-GI-NEXT: smov w11, v0.h[2]
615+ ; CHECK-GI-NEXT: umov w13, v0.h[2]
620616; CHECK-GI-NEXT: fmov w12, s1
621- ; CHECK-GI-NEXT: cmp w8, w10, sxth
622- ; CHECK-GI-NEXT: sxth w8, w11
623- ; CHECK-GI-NEXT: fmov w10, s2
624- ; CHECK-GI-NEXT: csel w9, w9, w12, lt
625- ; CHECK-GI-NEXT: cmp w8, w9, sxth
626- ; CHECK-GI-NEXT: csel w0, w9, w10, gt
617+ ; CHECK-GI-NEXT: cmp w8, w12, sxth
618+ ; CHECK-GI-NEXT: csel w8, w9, w10, lt
619+ ; CHECK-GI-NEXT: cmp w11, w8, sxth
620+ ; CHECK-GI-NEXT: csel w0, w8, w13, gt
627621; CHECK-GI-NEXT: ret
628622entry:
629623 %arg1 = call i16 @llvm.vector.reduce.smin.v3i16 (<3 x i16 > %a )
@@ -887,20 +881,17 @@ define i8 @smaxv_v4i8(<4 x i8> %a) {
887881; CHECK-GI-LABEL: smaxv_v4i8:
888882; CHECK-GI: // %bb.0: // %entry
889883; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
890- ; CHECK-GI-NEXT: mov h1, v0.h[1]
891- ; CHECK-GI-NEXT: mov h2, v0.h[2]
892- ; CHECK-GI-NEXT: fmov w8, s0
893- ; CHECK-GI-NEXT: mov h3, v0.h[3]
894- ; CHECK-GI-NEXT: sxtb w9, w8
895- ; CHECK-GI-NEXT: fmov w10, s1
896- ; CHECK-GI-NEXT: fmov w11, s2
897- ; CHECK-GI-NEXT: cmp w9, w10, sxtb
898- ; CHECK-GI-NEXT: sxtb w9, w11
899- ; CHECK-GI-NEXT: csel w8, w8, w10, gt
900- ; CHECK-GI-NEXT: fmov w10, s3
901- ; CHECK-GI-NEXT: cmp w9, w10, sxtb
884+ ; CHECK-GI-NEXT: umov w8, v0.h[0]
885+ ; CHECK-GI-NEXT: umov w9, v0.h[1]
886+ ; CHECK-GI-NEXT: umov w10, v0.h[2]
887+ ; CHECK-GI-NEXT: umov w12, v0.h[3]
888+ ; CHECK-GI-NEXT: sxtb w11, w8
889+ ; CHECK-GI-NEXT: cmp w11, w9, sxtb
890+ ; CHECK-GI-NEXT: sxtb w11, w10
891+ ; CHECK-GI-NEXT: csel w8, w8, w9, gt
892+ ; CHECK-GI-NEXT: cmp w11, w12, sxtb
902893; CHECK-GI-NEXT: sxtb w9, w8
903- ; CHECK-GI-NEXT: csel w10, w11, w10 , gt
894+ ; CHECK-GI-NEXT: csel w10, w10, w12 , gt
904895; CHECK-GI-NEXT: cmp w9, w10, sxtb
905896; CHECK-GI-NEXT: csel w0, w8, w10, gt
906897; CHECK-GI-NEXT: ret
@@ -982,19 +973,16 @@ define i16 @smaxv_v3i16(<3 x i16> %a) {
982973; CHECK-GI: // %bb.0: // %entry
983974; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
984975; CHECK-GI-NEXT: mov h1, v0.h[1]
985- ; CHECK-GI-NEXT: mov h2, v0.h[2]
986- ; CHECK-GI-NEXT: fmov w8, s0
987- ; CHECK-GI-NEXT: fmov w9, s0
988- ; CHECK-GI-NEXT: sxth w8, w8
989- ; CHECK-GI-NEXT: fmov w10, s1
990- ; CHECK-GI-NEXT: fmov w11, s2
976+ ; CHECK-GI-NEXT: smov w8, v0.h[0]
977+ ; CHECK-GI-NEXT: umov w9, v0.h[0]
978+ ; CHECK-GI-NEXT: umov w10, v0.h[1]
979+ ; CHECK-GI-NEXT: smov w11, v0.h[2]
980+ ; CHECK-GI-NEXT: umov w13, v0.h[2]
991981; CHECK-GI-NEXT: fmov w12, s1
992- ; CHECK-GI-NEXT: cmp w8, w10, sxth
993- ; CHECK-GI-NEXT: sxth w8, w11
994- ; CHECK-GI-NEXT: fmov w10, s2
995- ; CHECK-GI-NEXT: csel w9, w9, w12, gt
996- ; CHECK-GI-NEXT: cmp w8, w9, sxth
997- ; CHECK-GI-NEXT: csel w0, w9, w10, lt
982+ ; CHECK-GI-NEXT: cmp w8, w12, sxth
983+ ; CHECK-GI-NEXT: csel w8, w9, w10, gt
984+ ; CHECK-GI-NEXT: cmp w11, w8, sxth
985+ ; CHECK-GI-NEXT: csel w0, w8, w13, lt
998986; CHECK-GI-NEXT: ret
999987entry:
1000988 %arg1 = call i16 @llvm.vector.reduce.smax.v3i16 (<3 x i16 > %a )
@@ -1256,19 +1244,16 @@ define i8 @uminv_v4i8(<4 x i8> %a) {
12561244; CHECK-GI-LABEL: uminv_v4i8:
12571245; CHECK-GI: // %bb.0: // %entry
12581246; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
1259- ; CHECK-GI-NEXT: mov h1, v0.h[1]
1260- ; CHECK-GI-NEXT: mov h2, v0.h[2]
1261- ; CHECK-GI-NEXT: mov h3, v0.h[3]
1262- ; CHECK-GI-NEXT: fmov w8, s0
1263- ; CHECK-GI-NEXT: fmov w10, s1
1264- ; CHECK-GI-NEXT: fmov w11, s2
1265- ; CHECK-GI-NEXT: fmov w12, s3
1266- ; CHECK-GI-NEXT: and w9, w8, #0xff
1267- ; CHECK-GI-NEXT: cmp w9, w10, uxtb
1268- ; CHECK-GI-NEXT: and w9, w11, #0xff
1269- ; CHECK-GI-NEXT: csel w8, w8, w10, lo
1270- ; CHECK-GI-NEXT: cmp w9, w12, uxtb
1271- ; CHECK-GI-NEXT: csel w9, w11, w12, lo
1247+ ; CHECK-GI-NEXT: umov w8, v0.h[0]
1248+ ; CHECK-GI-NEXT: umov w9, v0.h[1]
1249+ ; CHECK-GI-NEXT: umov w10, v0.h[2]
1250+ ; CHECK-GI-NEXT: umov w11, v0.h[3]
1251+ ; CHECK-GI-NEXT: and w12, w8, #0xff
1252+ ; CHECK-GI-NEXT: cmp w12, w9, uxtb
1253+ ; CHECK-GI-NEXT: and w12, w10, #0xff
1254+ ; CHECK-GI-NEXT: csel w8, w8, w9, lo
1255+ ; CHECK-GI-NEXT: cmp w12, w11, uxtb
1256+ ; CHECK-GI-NEXT: csel w9, w10, w11, lo
12721257; CHECK-GI-NEXT: and w10, w8, #0xff
12731258; CHECK-GI-NEXT: cmp w10, w9, uxtb
12741259; CHECK-GI-NEXT: csel w0, w8, w9, lo
@@ -1351,19 +1336,16 @@ define i16 @uminv_v3i16(<3 x i16> %a) {
13511336; CHECK-GI: // %bb.0: // %entry
13521337; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
13531338; CHECK-GI-NEXT: mov h1, v0.h[1]
1354- ; CHECK-GI-NEXT: mov h2, v0.h[2]
1355- ; CHECK-GI-NEXT: fmov w8, s0
1356- ; CHECK-GI-NEXT: fmov w9, s0
1357- ; CHECK-GI-NEXT: uxth w8, w8
1358- ; CHECK-GI-NEXT: fmov w10, s1
1359- ; CHECK-GI-NEXT: fmov w11, s2
1339+ ; CHECK-GI-NEXT: umov w8, v0.h[0]
1340+ ; CHECK-GI-NEXT: umov w9, v0.h[0]
1341+ ; CHECK-GI-NEXT: umov w10, v0.h[1]
1342+ ; CHECK-GI-NEXT: umov w11, v0.h[2]
1343+ ; CHECK-GI-NEXT: umov w13, v0.h[2]
13601344; CHECK-GI-NEXT: fmov w12, s1
1361- ; CHECK-GI-NEXT: cmp w8, w10, uxth
1362- ; CHECK-GI-NEXT: uxth w8, w11
1363- ; CHECK-GI-NEXT: fmov w10, s2
1364- ; CHECK-GI-NEXT: csel w9, w9, w12, lo
1365- ; CHECK-GI-NEXT: cmp w8, w9, uxth
1366- ; CHECK-GI-NEXT: csel w0, w9, w10, hi
1345+ ; CHECK-GI-NEXT: cmp w8, w12, uxth
1346+ ; CHECK-GI-NEXT: csel w8, w9, w10, lo
1347+ ; CHECK-GI-NEXT: cmp w11, w8, uxth
1348+ ; CHECK-GI-NEXT: csel w0, w8, w13, hi
13671349; CHECK-GI-NEXT: ret
13681350entry:
13691351 %arg1 = call i16 @llvm.vector.reduce.umin.v3i16 (<3 x i16 > %a )
@@ -1625,19 +1607,16 @@ define i8 @umaxv_v4i8(<4 x i8> %a) {
16251607; CHECK-GI-LABEL: umaxv_v4i8:
16261608; CHECK-GI: // %bb.0: // %entry
16271609; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
1628- ; CHECK-GI-NEXT: mov h1, v0.h[1]
1629- ; CHECK-GI-NEXT: mov h2, v0.h[2]
1630- ; CHECK-GI-NEXT: mov h3, v0.h[3]
1631- ; CHECK-GI-NEXT: fmov w8, s0
1632- ; CHECK-GI-NEXT: fmov w10, s1
1633- ; CHECK-GI-NEXT: fmov w11, s2
1634- ; CHECK-GI-NEXT: fmov w12, s3
1635- ; CHECK-GI-NEXT: and w9, w8, #0xff
1636- ; CHECK-GI-NEXT: cmp w9, w10, uxtb
1637- ; CHECK-GI-NEXT: and w9, w11, #0xff
1638- ; CHECK-GI-NEXT: csel w8, w8, w10, hi
1639- ; CHECK-GI-NEXT: cmp w9, w12, uxtb
1640- ; CHECK-GI-NEXT: csel w9, w11, w12, hi
1610+ ; CHECK-GI-NEXT: umov w8, v0.h[0]
1611+ ; CHECK-GI-NEXT: umov w9, v0.h[1]
1612+ ; CHECK-GI-NEXT: umov w10, v0.h[2]
1613+ ; CHECK-GI-NEXT: umov w11, v0.h[3]
1614+ ; CHECK-GI-NEXT: and w12, w8, #0xff
1615+ ; CHECK-GI-NEXT: cmp w12, w9, uxtb
1616+ ; CHECK-GI-NEXT: and w12, w10, #0xff
1617+ ; CHECK-GI-NEXT: csel w8, w8, w9, hi
1618+ ; CHECK-GI-NEXT: cmp w12, w11, uxtb
1619+ ; CHECK-GI-NEXT: csel w9, w10, w11, hi
16411620; CHECK-GI-NEXT: and w10, w8, #0xff
16421621; CHECK-GI-NEXT: cmp w10, w9, uxtb
16431622; CHECK-GI-NEXT: csel w0, w8, w9, hi
@@ -1719,19 +1698,16 @@ define i16 @umaxv_v3i16(<3 x i16> %a) {
17191698; CHECK-GI: // %bb.0: // %entry
17201699; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
17211700; CHECK-GI-NEXT: mov h1, v0.h[1]
1722- ; CHECK-GI-NEXT: mov h2, v0.h[2]
1723- ; CHECK-GI-NEXT: fmov w8, s0
1724- ; CHECK-GI-NEXT: fmov w9, s0
1725- ; CHECK-GI-NEXT: uxth w8, w8
1726- ; CHECK-GI-NEXT: fmov w10, s1
1727- ; CHECK-GI-NEXT: fmov w11, s2
1701+ ; CHECK-GI-NEXT: umov w8, v0.h[0]
1702+ ; CHECK-GI-NEXT: umov w9, v0.h[0]
1703+ ; CHECK-GI-NEXT: umov w10, v0.h[1]
1704+ ; CHECK-GI-NEXT: umov w11, v0.h[2]
1705+ ; CHECK-GI-NEXT: umov w13, v0.h[2]
17281706; CHECK-GI-NEXT: fmov w12, s1
1729- ; CHECK-GI-NEXT: cmp w8, w10, uxth
1730- ; CHECK-GI-NEXT: uxth w8, w11
1731- ; CHECK-GI-NEXT: fmov w10, s2
1732- ; CHECK-GI-NEXT: csel w9, w9, w12, hi
1733- ; CHECK-GI-NEXT: cmp w8, w9, uxth
1734- ; CHECK-GI-NEXT: csel w0, w9, w10, lo
1707+ ; CHECK-GI-NEXT: cmp w8, w12, uxth
1708+ ; CHECK-GI-NEXT: csel w8, w9, w10, hi
1709+ ; CHECK-GI-NEXT: cmp w11, w8, uxth
1710+ ; CHECK-GI-NEXT: csel w0, w8, w13, lo
17351711; CHECK-GI-NEXT: ret
17361712entry:
17371713 %arg1 = call i16 @llvm.vector.reduce.umax.v3i16 (<3 x i16 > %a )
0 commit comments