@@ -595,30 +595,14 @@ entry:
595
595
}
596
596
597
597
define i16 @sminv_v3i16 (<3 x i16 > %a ) {
598
- ; CHECK-SD-LABEL: sminv_v3i16:
599
- ; CHECK-SD: // %bb.0: // %entry
600
- ; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
601
- ; CHECK-SD-NEXT: mov w8, #32767 // =0x7fff
602
- ; CHECK-SD-NEXT: mov v0.h[3], w8
603
- ; CHECK-SD-NEXT: sminv h0, v0.4h
604
- ; CHECK-SD-NEXT: fmov w0, s0
605
- ; CHECK-SD-NEXT: ret
606
- ;
607
- ; CHECK-GI-LABEL: sminv_v3i16:
608
- ; CHECK-GI: // %bb.0: // %entry
609
- ; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
610
- ; CHECK-GI-NEXT: mov h1, v0.h[1]
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]
616
- ; CHECK-GI-NEXT: fmov w12, s1
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
621
- ; CHECK-GI-NEXT: ret
598
+ ; CHECK-LABEL: sminv_v3i16:
599
+ ; CHECK: // %bb.0: // %entry
600
+ ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
601
+ ; CHECK-NEXT: mov w8, #32767 // =0x7fff
602
+ ; CHECK-NEXT: mov v0.h[3], w8
603
+ ; CHECK-NEXT: sminv h0, v0.4h
604
+ ; CHECK-NEXT: fmov w0, s0
605
+ ; CHECK-NEXT: ret
622
606
entry:
623
607
%arg1 = call i16 @llvm.vector.reduce.smin.v3i16 (<3 x i16 > %a )
624
608
ret i16 %arg1
@@ -670,28 +654,13 @@ entry:
670
654
}
671
655
672
656
define i32 @sminv_v3i32 (<3 x i32 > %a ) {
673
- ; CHECK-SD-LABEL: sminv_v3i32:
674
- ; CHECK-SD: // %bb.0: // %entry
675
- ; CHECK-SD-NEXT: mov w8, #2147483647 // =0x7fffffff
676
- ; CHECK-SD-NEXT: mov v0.s[3], w8
677
- ; CHECK-SD-NEXT: sminv s0, v0.4s
678
- ; CHECK-SD-NEXT: fmov w0, s0
679
- ; CHECK-SD-NEXT: ret
680
- ;
681
- ; CHECK-GI-LABEL: sminv_v3i32:
682
- ; CHECK-GI: // %bb.0: // %entry
683
- ; CHECK-GI-NEXT: mov s1, v0.s[1]
684
- ; CHECK-GI-NEXT: fmov w8, s0
685
- ; CHECK-GI-NEXT: mov s2, v0.s[2]
686
- ; CHECK-GI-NEXT: fmov w9, s1
687
- ; CHECK-GI-NEXT: cmp w8, w9
688
- ; CHECK-GI-NEXT: fmov w9, s2
689
- ; CHECK-GI-NEXT: fcsel s0, s0, s1, lt
690
- ; CHECK-GI-NEXT: fmov w8, s0
691
- ; CHECK-GI-NEXT: cmp w8, w9
692
- ; CHECK-GI-NEXT: fcsel s0, s0, s2, lt
693
- ; CHECK-GI-NEXT: fmov w0, s0
694
- ; CHECK-GI-NEXT: ret
657
+ ; CHECK-LABEL: sminv_v3i32:
658
+ ; CHECK: // %bb.0: // %entry
659
+ ; CHECK-NEXT: mov w8, #2147483647 // =0x7fffffff
660
+ ; CHECK-NEXT: mov v0.s[3], w8
661
+ ; CHECK-NEXT: sminv s0, v0.4s
662
+ ; CHECK-NEXT: fmov w0, s0
663
+ ; CHECK-NEXT: ret
695
664
entry:
696
665
%arg1 = call i32 @llvm.vector.reduce.smin.v3i32 (<3 x i32 > %a )
697
666
ret i32 %arg1
@@ -972,17 +941,10 @@ define i16 @smaxv_v3i16(<3 x i16> %a) {
972
941
; CHECK-GI-LABEL: smaxv_v3i16:
973
942
; CHECK-GI: // %bb.0: // %entry
974
943
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
975
- ; CHECK-GI-NEXT: mov h1, v0.h[1]
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]
981
- ; CHECK-GI-NEXT: fmov w12, s1
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
944
+ ; CHECK-GI-NEXT: mov w8, #32768 // =0x8000
945
+ ; CHECK-GI-NEXT: mov v0.h[3], w8
946
+ ; CHECK-GI-NEXT: smaxv h0, v0.4h
947
+ ; CHECK-GI-NEXT: fmov w0, s0
986
948
; CHECK-GI-NEXT: ret
987
949
entry:
988
950
%arg1 = call i16 @llvm.vector.reduce.smax.v3i16 (<3 x i16 > %a )
@@ -1035,28 +997,13 @@ entry:
1035
997
}
1036
998
1037
999
define i32 @smaxv_v3i32 (<3 x i32 > %a ) {
1038
- ; CHECK-SD-LABEL: smaxv_v3i32:
1039
- ; CHECK-SD: // %bb.0: // %entry
1040
- ; CHECK-SD-NEXT: mov w8, #-2147483648 // =0x80000000
1041
- ; CHECK-SD-NEXT: mov v0.s[3], w8
1042
- ; CHECK-SD-NEXT: smaxv s0, v0.4s
1043
- ; CHECK-SD-NEXT: fmov w0, s0
1044
- ; CHECK-SD-NEXT: ret
1045
- ;
1046
- ; CHECK-GI-LABEL: smaxv_v3i32:
1047
- ; CHECK-GI: // %bb.0: // %entry
1048
- ; CHECK-GI-NEXT: mov s1, v0.s[1]
1049
- ; CHECK-GI-NEXT: fmov w8, s0
1050
- ; CHECK-GI-NEXT: mov s2, v0.s[2]
1051
- ; CHECK-GI-NEXT: fmov w9, s1
1052
- ; CHECK-GI-NEXT: cmp w8, w9
1053
- ; CHECK-GI-NEXT: fmov w9, s2
1054
- ; CHECK-GI-NEXT: fcsel s0, s0, s1, gt
1055
- ; CHECK-GI-NEXT: fmov w8, s0
1056
- ; CHECK-GI-NEXT: cmp w8, w9
1057
- ; CHECK-GI-NEXT: fcsel s0, s0, s2, gt
1058
- ; CHECK-GI-NEXT: fmov w0, s0
1059
- ; CHECK-GI-NEXT: ret
1000
+ ; CHECK-LABEL: smaxv_v3i32:
1001
+ ; CHECK: // %bb.0: // %entry
1002
+ ; CHECK-NEXT: mov w8, #-2147483648 // =0x80000000
1003
+ ; CHECK-NEXT: mov v0.s[3], w8
1004
+ ; CHECK-NEXT: smaxv s0, v0.4s
1005
+ ; CHECK-NEXT: fmov w0, s0
1006
+ ; CHECK-NEXT: ret
1060
1007
entry:
1061
1008
%arg1 = call i32 @llvm.vector.reduce.smax.v3i32 (<3 x i32 > %a )
1062
1009
ret i32 %arg1
@@ -1335,17 +1282,10 @@ define i16 @uminv_v3i16(<3 x i16> %a) {
1335
1282
; CHECK-GI-LABEL: uminv_v3i16:
1336
1283
; CHECK-GI: // %bb.0: // %entry
1337
1284
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
1338
- ; CHECK-GI-NEXT: mov h1, v0.h[1]
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]
1344
- ; CHECK-GI-NEXT: fmov w12, s1
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
1285
+ ; CHECK-GI-NEXT: mov w8, #65535 // =0xffff
1286
+ ; CHECK-GI-NEXT: mov v0.h[3], w8
1287
+ ; CHECK-GI-NEXT: uminv h0, v0.4h
1288
+ ; CHECK-GI-NEXT: fmov w0, s0
1349
1289
; CHECK-GI-NEXT: ret
1350
1290
entry:
1351
1291
%arg1 = call i16 @llvm.vector.reduce.umin.v3i16 (<3 x i16 > %a )
@@ -1398,28 +1338,13 @@ entry:
1398
1338
}
1399
1339
1400
1340
define i32 @uminv_v3i32 (<3 x i32 > %a ) {
1401
- ; CHECK-SD-LABEL: uminv_v3i32:
1402
- ; CHECK-SD: // %bb.0: // %entry
1403
- ; CHECK-SD-NEXT: mov w8, #-1 // =0xffffffff
1404
- ; CHECK-SD-NEXT: mov v0.s[3], w8
1405
- ; CHECK-SD-NEXT: uminv s0, v0.4s
1406
- ; CHECK-SD-NEXT: fmov w0, s0
1407
- ; CHECK-SD-NEXT: ret
1408
- ;
1409
- ; CHECK-GI-LABEL: uminv_v3i32:
1410
- ; CHECK-GI: // %bb.0: // %entry
1411
- ; CHECK-GI-NEXT: mov s1, v0.s[1]
1412
- ; CHECK-GI-NEXT: fmov w8, s0
1413
- ; CHECK-GI-NEXT: mov s2, v0.s[2]
1414
- ; CHECK-GI-NEXT: fmov w9, s1
1415
- ; CHECK-GI-NEXT: cmp w8, w9
1416
- ; CHECK-GI-NEXT: fmov w9, s2
1417
- ; CHECK-GI-NEXT: fcsel s0, s0, s1, lo
1418
- ; CHECK-GI-NEXT: fmov w8, s0
1419
- ; CHECK-GI-NEXT: cmp w8, w9
1420
- ; CHECK-GI-NEXT: fcsel s0, s0, s2, lo
1421
- ; CHECK-GI-NEXT: fmov w0, s0
1422
- ; CHECK-GI-NEXT: ret
1341
+ ; CHECK-LABEL: uminv_v3i32:
1342
+ ; CHECK: // %bb.0: // %entry
1343
+ ; CHECK-NEXT: mov w8, #-1 // =0xffffffff
1344
+ ; CHECK-NEXT: mov v0.s[3], w8
1345
+ ; CHECK-NEXT: uminv s0, v0.4s
1346
+ ; CHECK-NEXT: fmov w0, s0
1347
+ ; CHECK-NEXT: ret
1423
1348
entry:
1424
1349
%arg1 = call i32 @llvm.vector.reduce.umin.v3i32 (<3 x i32 > %a )
1425
1350
ret i32 %arg1
@@ -1697,17 +1622,10 @@ define i16 @umaxv_v3i16(<3 x i16> %a) {
1697
1622
; CHECK-GI-LABEL: umaxv_v3i16:
1698
1623
; CHECK-GI: // %bb.0: // %entry
1699
1624
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
1700
- ; CHECK-GI-NEXT: mov h1, v0.h[1]
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]
1706
- ; CHECK-GI-NEXT: fmov w12, s1
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
1625
+ ; CHECK-GI-NEXT: mov w8, #0 // =0x0
1626
+ ; CHECK-GI-NEXT: mov v0.h[3], w8
1627
+ ; CHECK-GI-NEXT: umaxv h0, v0.4h
1628
+ ; CHECK-GI-NEXT: fmov w0, s0
1711
1629
; CHECK-GI-NEXT: ret
1712
1630
entry:
1713
1631
%arg1 = call i16 @llvm.vector.reduce.umax.v3i16 (<3 x i16 > %a )
@@ -1760,27 +1678,12 @@ entry:
1760
1678
}
1761
1679
1762
1680
define i32 @umaxv_v3i32 (<3 x i32 > %a ) {
1763
- ; CHECK-SD-LABEL: umaxv_v3i32:
1764
- ; CHECK-SD: // %bb.0: // %entry
1765
- ; CHECK-SD-NEXT: mov v0.s[3], wzr
1766
- ; CHECK-SD-NEXT: umaxv s0, v0.4s
1767
- ; CHECK-SD-NEXT: fmov w0, s0
1768
- ; CHECK-SD-NEXT: ret
1769
- ;
1770
- ; CHECK-GI-LABEL: umaxv_v3i32:
1771
- ; CHECK-GI: // %bb.0: // %entry
1772
- ; CHECK-GI-NEXT: mov s1, v0.s[1]
1773
- ; CHECK-GI-NEXT: fmov w8, s0
1774
- ; CHECK-GI-NEXT: mov s2, v0.s[2]
1775
- ; CHECK-GI-NEXT: fmov w9, s1
1776
- ; CHECK-GI-NEXT: cmp w8, w9
1777
- ; CHECK-GI-NEXT: fmov w9, s2
1778
- ; CHECK-GI-NEXT: fcsel s0, s0, s1, hi
1779
- ; CHECK-GI-NEXT: fmov w8, s0
1780
- ; CHECK-GI-NEXT: cmp w8, w9
1781
- ; CHECK-GI-NEXT: fcsel s0, s0, s2, hi
1782
- ; CHECK-GI-NEXT: fmov w0, s0
1783
- ; CHECK-GI-NEXT: ret
1681
+ ; CHECK-LABEL: umaxv_v3i32:
1682
+ ; CHECK: // %bb.0: // %entry
1683
+ ; CHECK-NEXT: mov v0.s[3], wzr
1684
+ ; CHECK-NEXT: umaxv s0, v0.4s
1685
+ ; CHECK-NEXT: fmov w0, s0
1686
+ ; CHECK-NEXT: ret
1784
1687
entry:
1785
1688
%arg1 = call i32 @llvm.vector.reduce.umax.v3i32 (<3 x i32 > %a )
1786
1689
ret i32 %arg1
0 commit comments