@@ -266,8 +266,9 @@ define void @sink_splat_mul_scalable(i32* nocapture %a, i32 signext %x) {
266
266
; CHECK-NEXT: j .LBB7_5
267
267
; CHECK-NEXT: .LBB7_2: # %vector.ph
268
268
; CHECK-NEXT: li a6, 0
269
- ; CHECK-NEXT: remu a4, a3, a2
270
- ; CHECK-NEXT: sub a3, a3, a4
269
+ ; CHECK-NEXT: addiw a3, a2, -1
270
+ ; CHECK-NEXT: andi a4, a3, 1024
271
+ ; CHECK-NEXT: xori a3, a4, 1024
271
272
; CHECK-NEXT: slli a5, a5, 1
272
273
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
273
274
; CHECK-NEXT: mv a7, a0
@@ -358,8 +359,9 @@ define void @sink_splat_add_scalable(i32* nocapture %a, i32 signext %x) {
358
359
; CHECK-NEXT: j .LBB8_5
359
360
; CHECK-NEXT: .LBB8_2: # %vector.ph
360
361
; CHECK-NEXT: li a6, 0
361
- ; CHECK-NEXT: remu a4, a3, a2
362
- ; CHECK-NEXT: sub a3, a3, a4
362
+ ; CHECK-NEXT: addiw a3, a2, -1
363
+ ; CHECK-NEXT: andi a4, a3, 1024
364
+ ; CHECK-NEXT: xori a3, a4, 1024
363
365
; CHECK-NEXT: slli a5, a5, 1
364
366
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
365
367
; CHECK-NEXT: mv a7, a0
@@ -450,8 +452,9 @@ define void @sink_splat_sub_scalable(i32* nocapture %a, i32 signext %x) {
450
452
; CHECK-NEXT: j .LBB9_5
451
453
; CHECK-NEXT: .LBB9_2: # %vector.ph
452
454
; CHECK-NEXT: li a6, 0
453
- ; CHECK-NEXT: remu a4, a3, a2
454
- ; CHECK-NEXT: sub a3, a3, a4
455
+ ; CHECK-NEXT: addiw a3, a2, -1
456
+ ; CHECK-NEXT: andi a4, a3, 1024
457
+ ; CHECK-NEXT: xori a3, a4, 1024
455
458
; CHECK-NEXT: slli a5, a5, 1
456
459
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
457
460
; CHECK-NEXT: mv a7, a0
@@ -542,8 +545,9 @@ define void @sink_splat_rsub_scalable(i32* nocapture %a, i32 signext %x) {
542
545
; CHECK-NEXT: j .LBB10_5
543
546
; CHECK-NEXT: .LBB10_2: # %vector.ph
544
547
; CHECK-NEXT: li a6, 0
545
- ; CHECK-NEXT: remu a4, a3, a2
546
- ; CHECK-NEXT: sub a3, a3, a4
548
+ ; CHECK-NEXT: addiw a3, a2, -1
549
+ ; CHECK-NEXT: andi a4, a3, 1024
550
+ ; CHECK-NEXT: xori a3, a4, 1024
547
551
; CHECK-NEXT: slli a5, a5, 1
548
552
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
549
553
; CHECK-NEXT: mv a7, a0
@@ -634,8 +638,9 @@ define void @sink_splat_and_scalable(i32* nocapture %a, i32 signext %x) {
634
638
; CHECK-NEXT: j .LBB11_5
635
639
; CHECK-NEXT: .LBB11_2: # %vector.ph
636
640
; CHECK-NEXT: li a6, 0
637
- ; CHECK-NEXT: remu a4, a3, a2
638
- ; CHECK-NEXT: sub a3, a3, a4
641
+ ; CHECK-NEXT: addiw a3, a2, -1
642
+ ; CHECK-NEXT: andi a4, a3, 1024
643
+ ; CHECK-NEXT: xori a3, a4, 1024
639
644
; CHECK-NEXT: slli a5, a5, 1
640
645
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
641
646
; CHECK-NEXT: mv a7, a0
@@ -726,8 +731,9 @@ define void @sink_splat_or_scalable(i32* nocapture %a, i32 signext %x) {
726
731
; CHECK-NEXT: j .LBB12_5
727
732
; CHECK-NEXT: .LBB12_2: # %vector.ph
728
733
; CHECK-NEXT: li a6, 0
729
- ; CHECK-NEXT: remu a4, a3, a2
730
- ; CHECK-NEXT: sub a3, a3, a4
734
+ ; CHECK-NEXT: addiw a3, a2, -1
735
+ ; CHECK-NEXT: andi a4, a3, 1024
736
+ ; CHECK-NEXT: xori a3, a4, 1024
731
737
; CHECK-NEXT: slli a5, a5, 1
732
738
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
733
739
; CHECK-NEXT: mv a7, a0
@@ -818,8 +824,9 @@ define void @sink_splat_xor_scalable(i32* nocapture %a, i32 signext %x) {
818
824
; CHECK-NEXT: j .LBB13_5
819
825
; CHECK-NEXT: .LBB13_2: # %vector.ph
820
826
; CHECK-NEXT: li a6, 0
821
- ; CHECK-NEXT: remu a4, a3, a2
822
- ; CHECK-NEXT: sub a3, a3, a4
827
+ ; CHECK-NEXT: addiw a3, a2, -1
828
+ ; CHECK-NEXT: andi a4, a3, 1024
829
+ ; CHECK-NEXT: xori a3, a4, 1024
823
830
; CHECK-NEXT: slli a5, a5, 1
824
831
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
825
832
; CHECK-NEXT: mv a7, a0
@@ -1018,8 +1025,9 @@ define void @sink_splat_shl_scalable(i32* nocapture %a, i32 signext %x) {
1018
1025
; CHECK-NEXT: j .LBB17_5
1019
1026
; CHECK-NEXT: .LBB17_2: # %vector.ph
1020
1027
; CHECK-NEXT: li a6, 0
1021
- ; CHECK-NEXT: remu a4, a3, a2
1022
- ; CHECK-NEXT: sub a3, a3, a4
1028
+ ; CHECK-NEXT: addiw a3, a2, -1
1029
+ ; CHECK-NEXT: andi a4, a3, 1024
1030
+ ; CHECK-NEXT: xori a3, a4, 1024
1023
1031
; CHECK-NEXT: slli a5, a5, 1
1024
1032
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
1025
1033
; CHECK-NEXT: mv a7, a0
@@ -1110,8 +1118,9 @@ define void @sink_splat_lshr_scalable(i32* nocapture %a, i32 signext %x) {
1110
1118
; CHECK-NEXT: j .LBB18_5
1111
1119
; CHECK-NEXT: .LBB18_2: # %vector.ph
1112
1120
; CHECK-NEXT: li a6, 0
1113
- ; CHECK-NEXT: remu a4, a3, a2
1114
- ; CHECK-NEXT: sub a3, a3, a4
1121
+ ; CHECK-NEXT: addiw a3, a2, -1
1122
+ ; CHECK-NEXT: andi a4, a3, 1024
1123
+ ; CHECK-NEXT: xori a3, a4, 1024
1115
1124
; CHECK-NEXT: slli a5, a5, 1
1116
1125
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
1117
1126
; CHECK-NEXT: mv a7, a0
@@ -1202,8 +1211,9 @@ define void @sink_splat_ashr_scalable(i32* nocapture %a) {
1202
1211
; CHECK-NEXT: j .LBB19_5
1203
1212
; CHECK-NEXT: .LBB19_2: # %vector.ph
1204
1213
; CHECK-NEXT: li a5, 0
1205
- ; CHECK-NEXT: remu a3, a2, a1
1206
- ; CHECK-NEXT: sub a2, a2, a3
1214
+ ; CHECK-NEXT: addiw a2, a1, -1
1215
+ ; CHECK-NEXT: andi a3, a2, 1024
1216
+ ; CHECK-NEXT: xori a2, a3, 1024
1207
1217
; CHECK-NEXT: slli a4, a4, 1
1208
1218
; CHECK-NEXT: vsetvli a6, zero, e32, m2, ta, mu
1209
1219
; CHECK-NEXT: mv a6, a0
@@ -1510,8 +1520,9 @@ define void @sink_splat_fmul_scalable(float* nocapture %a, float %x) {
1510
1520
; CHECK-NEXT: j .LBB26_5
1511
1521
; CHECK-NEXT: .LBB26_2: # %vector.ph
1512
1522
; CHECK-NEXT: li a5, 0
1513
- ; CHECK-NEXT: remu a4, a3, a2
1514
- ; CHECK-NEXT: sub a3, a3, a4
1523
+ ; CHECK-NEXT: addiw a3, a2, -1
1524
+ ; CHECK-NEXT: andi a4, a3, 1024
1525
+ ; CHECK-NEXT: xori a3, a4, 1024
1515
1526
; CHECK-NEXT: vsetvli a6, zero, e32, m1, ta, mu
1516
1527
; CHECK-NEXT: mv a6, a0
1517
1528
; CHECK-NEXT: .LBB26_3: # %vector.body
@@ -1601,8 +1612,9 @@ define void @sink_splat_fdiv_scalable(float* nocapture %a, float %x) {
1601
1612
; CHECK-NEXT: j .LBB27_5
1602
1613
; CHECK-NEXT: .LBB27_2: # %vector.ph
1603
1614
; CHECK-NEXT: li a5, 0
1604
- ; CHECK-NEXT: remu a4, a3, a2
1605
- ; CHECK-NEXT: sub a3, a3, a4
1615
+ ; CHECK-NEXT: addiw a3, a2, -1
1616
+ ; CHECK-NEXT: andi a4, a3, 1024
1617
+ ; CHECK-NEXT: xori a3, a4, 1024
1606
1618
; CHECK-NEXT: vsetvli a6, zero, e32, m1, ta, mu
1607
1619
; CHECK-NEXT: mv a6, a0
1608
1620
; CHECK-NEXT: .LBB27_3: # %vector.body
@@ -1692,8 +1704,9 @@ define void @sink_splat_frdiv_scalable(float* nocapture %a, float %x) {
1692
1704
; CHECK-NEXT: j .LBB28_5
1693
1705
; CHECK-NEXT: .LBB28_2: # %vector.ph
1694
1706
; CHECK-NEXT: li a5, 0
1695
- ; CHECK-NEXT: remu a4, a3, a2
1696
- ; CHECK-NEXT: sub a3, a3, a4
1707
+ ; CHECK-NEXT: addiw a3, a2, -1
1708
+ ; CHECK-NEXT: andi a4, a3, 1024
1709
+ ; CHECK-NEXT: xori a3, a4, 1024
1697
1710
; CHECK-NEXT: vsetvli a6, zero, e32, m1, ta, mu
1698
1711
; CHECK-NEXT: mv a6, a0
1699
1712
; CHECK-NEXT: .LBB28_3: # %vector.body
@@ -1783,8 +1796,9 @@ define void @sink_splat_fadd_scalable(float* nocapture %a, float %x) {
1783
1796
; CHECK-NEXT: j .LBB29_5
1784
1797
; CHECK-NEXT: .LBB29_2: # %vector.ph
1785
1798
; CHECK-NEXT: li a5, 0
1786
- ; CHECK-NEXT: remu a4, a3, a2
1787
- ; CHECK-NEXT: sub a3, a3, a4
1799
+ ; CHECK-NEXT: addiw a3, a2, -1
1800
+ ; CHECK-NEXT: andi a4, a3, 1024
1801
+ ; CHECK-NEXT: xori a3, a4, 1024
1788
1802
; CHECK-NEXT: vsetvli a6, zero, e32, m1, ta, mu
1789
1803
; CHECK-NEXT: mv a6, a0
1790
1804
; CHECK-NEXT: .LBB29_3: # %vector.body
@@ -1874,8 +1888,9 @@ define void @sink_splat_fsub_scalable(float* nocapture %a, float %x) {
1874
1888
; CHECK-NEXT: j .LBB30_5
1875
1889
; CHECK-NEXT: .LBB30_2: # %vector.ph
1876
1890
; CHECK-NEXT: li a5, 0
1877
- ; CHECK-NEXT: remu a4, a3, a2
1878
- ; CHECK-NEXT: sub a3, a3, a4
1891
+ ; CHECK-NEXT: addiw a3, a2, -1
1892
+ ; CHECK-NEXT: andi a4, a3, 1024
1893
+ ; CHECK-NEXT: xori a3, a4, 1024
1879
1894
; CHECK-NEXT: vsetvli a6, zero, e32, m1, ta, mu
1880
1895
; CHECK-NEXT: mv a6, a0
1881
1896
; CHECK-NEXT: .LBB30_3: # %vector.body
@@ -1965,8 +1980,9 @@ define void @sink_splat_frsub_scalable(float* nocapture %a, float %x) {
1965
1980
; CHECK-NEXT: j .LBB31_5
1966
1981
; CHECK-NEXT: .LBB31_2: # %vector.ph
1967
1982
; CHECK-NEXT: li a5, 0
1968
- ; CHECK-NEXT: remu a4, a3, a2
1969
- ; CHECK-NEXT: sub a3, a3, a4
1983
+ ; CHECK-NEXT: addiw a3, a2, -1
1984
+ ; CHECK-NEXT: andi a4, a3, 1024
1985
+ ; CHECK-NEXT: xori a3, a4, 1024
1970
1986
; CHECK-NEXT: vsetvli a6, zero, e32, m1, ta, mu
1971
1987
; CHECK-NEXT: mv a6, a0
1972
1988
; CHECK-NEXT: .LBB31_3: # %vector.body
@@ -2139,8 +2155,9 @@ define void @sink_splat_fma_scalable(float* noalias nocapture %a, float* noalias
2139
2155
; CHECK-NEXT: .LBB34_2: # %vector.ph
2140
2156
; CHECK-NEXT: li a6, 0
2141
2157
; CHECK-NEXT: li a7, 0
2142
- ; CHECK-NEXT: remu a5, a4, a3
2143
- ; CHECK-NEXT: sub a4, a4, a5
2158
+ ; CHECK-NEXT: addiw a4, a3, -1
2159
+ ; CHECK-NEXT: andi a5, a4, 1024
2160
+ ; CHECK-NEXT: xori a4, a5, 1024
2144
2161
; CHECK-NEXT: vsetvli t0, zero, e32, m1, ta, mu
2145
2162
; CHECK-NEXT: .LBB34_3: # %vector.body
2146
2163
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
@@ -2241,8 +2258,9 @@ define void @sink_splat_fma_commute_scalable(float* noalias nocapture %a, float*
2241
2258
; CHECK-NEXT: .LBB35_2: # %vector.ph
2242
2259
; CHECK-NEXT: li a6, 0
2243
2260
; CHECK-NEXT: li a7, 0
2244
- ; CHECK-NEXT: remu a5, a4, a3
2245
- ; CHECK-NEXT: sub a4, a4, a5
2261
+ ; CHECK-NEXT: addiw a4, a3, -1
2262
+ ; CHECK-NEXT: andi a5, a4, 1024
2263
+ ; CHECK-NEXT: xori a4, a5, 1024
2246
2264
; CHECK-NEXT: vsetvli t0, zero, e32, m1, ta, mu
2247
2265
; CHECK-NEXT: .LBB35_3: # %vector.body
2248
2266
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
@@ -2567,8 +2585,9 @@ define void @sink_splat_udiv_scalable(i32* nocapture %a, i32 signext %x) {
2567
2585
; CHECK-NEXT: j .LBB42_5
2568
2586
; CHECK-NEXT: .LBB42_2: # %vector.ph
2569
2587
; CHECK-NEXT: li a6, 0
2570
- ; CHECK-NEXT: remu a4, a3, a2
2571
- ; CHECK-NEXT: sub a3, a3, a4
2588
+ ; CHECK-NEXT: addiw a3, a2, -1
2589
+ ; CHECK-NEXT: andi a4, a3, 1024
2590
+ ; CHECK-NEXT: xori a3, a4, 1024
2572
2591
; CHECK-NEXT: slli a5, a5, 1
2573
2592
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
2574
2593
; CHECK-NEXT: mv a7, a0
@@ -2659,8 +2678,9 @@ define void @sink_splat_sdiv_scalable(i32* nocapture %a, i32 signext %x) {
2659
2678
; CHECK-NEXT: j .LBB43_5
2660
2679
; CHECK-NEXT: .LBB43_2: # %vector.ph
2661
2680
; CHECK-NEXT: li a6, 0
2662
- ; CHECK-NEXT: remu a4, a3, a2
2663
- ; CHECK-NEXT: sub a3, a3, a4
2681
+ ; CHECK-NEXT: addiw a3, a2, -1
2682
+ ; CHECK-NEXT: andi a4, a3, 1024
2683
+ ; CHECK-NEXT: xori a3, a4, 1024
2664
2684
; CHECK-NEXT: slli a5, a5, 1
2665
2685
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
2666
2686
; CHECK-NEXT: mv a7, a0
@@ -2751,8 +2771,9 @@ define void @sink_splat_urem_scalable(i32* nocapture %a, i32 signext %x) {
2751
2771
; CHECK-NEXT: j .LBB44_5
2752
2772
; CHECK-NEXT: .LBB44_2: # %vector.ph
2753
2773
; CHECK-NEXT: li a6, 0
2754
- ; CHECK-NEXT: remu a4, a3, a2
2755
- ; CHECK-NEXT: sub a3, a3, a4
2774
+ ; CHECK-NEXT: addiw a3, a2, -1
2775
+ ; CHECK-NEXT: andi a4, a3, 1024
2776
+ ; CHECK-NEXT: xori a3, a4, 1024
2756
2777
; CHECK-NEXT: slli a5, a5, 1
2757
2778
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
2758
2779
; CHECK-NEXT: mv a7, a0
@@ -2843,8 +2864,9 @@ define void @sink_splat_srem_scalable(i32* nocapture %a, i32 signext %x) {
2843
2864
; CHECK-NEXT: j .LBB45_5
2844
2865
; CHECK-NEXT: .LBB45_2: # %vector.ph
2845
2866
; CHECK-NEXT: li a6, 0
2846
- ; CHECK-NEXT: remu a4, a3, a2
2847
- ; CHECK-NEXT: sub a3, a3, a4
2867
+ ; CHECK-NEXT: addiw a3, a2, -1
2868
+ ; CHECK-NEXT: andi a4, a3, 1024
2869
+ ; CHECK-NEXT: xori a3, a4, 1024
2848
2870
; CHECK-NEXT: slli a5, a5, 1
2849
2871
; CHECK-NEXT: vsetvli a7, zero, e32, m2, ta, mu
2850
2872
; CHECK-NEXT: mv a7, a0
0 commit comments