@@ -516,20 +516,17 @@ define i8 @sminv_v4i8(<4 x i8> %a) {
516
516
; CHECK-GI-LABEL: sminv_v4i8:
517
517
; CHECK-GI: // %bb.0: // %entry
518
518
; 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
523
528
; 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
533
530
; CHECK-GI-NEXT: cmp w9, w10, sxtb
534
531
; CHECK-GI-NEXT: csel w0, w8, w10, lt
535
532
; CHECK-GI-NEXT: ret
@@ -611,19 +608,16 @@ define i16 @sminv_v3i16(<3 x i16> %a) {
611
608
; CHECK-GI: // %bb.0: // %entry
612
609
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
613
610
; 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]
620
616
; 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
627
621
; CHECK-GI-NEXT: ret
628
622
entry:
629
623
%arg1 = call i16 @llvm.vector.reduce.smin.v3i16 (<3 x i16 > %a )
@@ -887,20 +881,17 @@ define i8 @smaxv_v4i8(<4 x i8> %a) {
887
881
; CHECK-GI-LABEL: smaxv_v4i8:
888
882
; CHECK-GI: // %bb.0: // %entry
889
883
; 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
902
893
; CHECK-GI-NEXT: sxtb w9, w8
903
- ; CHECK-GI-NEXT: csel w10, w11, w10 , gt
894
+ ; CHECK-GI-NEXT: csel w10, w10, w12 , gt
904
895
; CHECK-GI-NEXT: cmp w9, w10, sxtb
905
896
; CHECK-GI-NEXT: csel w0, w8, w10, gt
906
897
; CHECK-GI-NEXT: ret
@@ -982,19 +973,16 @@ define i16 @smaxv_v3i16(<3 x i16> %a) {
982
973
; CHECK-GI: // %bb.0: // %entry
983
974
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
984
975
; 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]
991
981
; 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
998
986
; CHECK-GI-NEXT: ret
999
987
entry:
1000
988
%arg1 = call i16 @llvm.vector.reduce.smax.v3i16 (<3 x i16 > %a )
@@ -1256,19 +1244,16 @@ define i8 @uminv_v4i8(<4 x i8> %a) {
1256
1244
; CHECK-GI-LABEL: uminv_v4i8:
1257
1245
; CHECK-GI: // %bb.0: // %entry
1258
1246
; 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
1272
1257
; CHECK-GI-NEXT: and w10, w8, #0xff
1273
1258
; CHECK-GI-NEXT: cmp w10, w9, uxtb
1274
1259
; CHECK-GI-NEXT: csel w0, w8, w9, lo
@@ -1351,19 +1336,16 @@ define i16 @uminv_v3i16(<3 x i16> %a) {
1351
1336
; CHECK-GI: // %bb.0: // %entry
1352
1337
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
1353
1338
; 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]
1360
1344
; 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
1367
1349
; CHECK-GI-NEXT: ret
1368
1350
entry:
1369
1351
%arg1 = call i16 @llvm.vector.reduce.umin.v3i16 (<3 x i16 > %a )
@@ -1625,19 +1607,16 @@ define i8 @umaxv_v4i8(<4 x i8> %a) {
1625
1607
; CHECK-GI-LABEL: umaxv_v4i8:
1626
1608
; CHECK-GI: // %bb.0: // %entry
1627
1609
; 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
1641
1620
; CHECK-GI-NEXT: and w10, w8, #0xff
1642
1621
; CHECK-GI-NEXT: cmp w10, w9, uxtb
1643
1622
; CHECK-GI-NEXT: csel w0, w8, w9, hi
@@ -1719,19 +1698,16 @@ define i16 @umaxv_v3i16(<3 x i16> %a) {
1719
1698
; CHECK-GI: // %bb.0: // %entry
1720
1699
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
1721
1700
; 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]
1728
1706
; 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
1735
1711
; CHECK-GI-NEXT: ret
1736
1712
entry:
1737
1713
%arg1 = call i16 @llvm.vector.reduce.umax.v3i16 (<3 x i16 > %a )
0 commit comments