Skip to content

Commit 0c978c0

Browse files
committed
[RISCV][VLOPT] Add support for Vector Fixed-Point Arithmetic Instructions
1 parent d29aa88 commit 0c978c0

File tree

3 files changed

+62
-50
lines changed

3 files changed

+62
-50
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -976,6 +976,17 @@ static bool isSupportedInstr(const MachineInstr &MI) {
976976
case RISCV::VMV_V_I:
977977
case RISCV::VMV_V_X:
978978
case RISCV::VMV_V_V:
979+
// Vector Single-Width Saturating Add and Subtract
980+
case RISCV::VSADDU_VV:
981+
case RISCV::VSADDU_VX:
982+
case RISCV::VSADDU_VI:
983+
case RISCV::VSADD_VV:
984+
case RISCV::VSADD_VX:
985+
case RISCV::VSADD_VI:
986+
case RISCV::VSSUBU_VV:
987+
case RISCV::VSSUBU_VX:
988+
case RISCV::VSSUB_VV:
989+
case RISCV::VSSUB_VX:
979990
// Vector Single-Width Averaging Add and Subtract
980991
case RISCV::VAADDU_VV:
981992
case RISCV::VAADDU_VX:
@@ -985,6 +996,23 @@ static bool isSupportedInstr(const MachineInstr &MI) {
985996
case RISCV::VASUBU_VX:
986997
case RISCV::VASUB_VV:
987998
case RISCV::VASUB_VX:
999+
// Vector Single-Width Fractional Multiply with Rounding and Saturation
1000+
case RISCV::VSMUL_VV:
1001+
case RISCV::VSMUL_VX:
1002+
// Vector Single-Width Scaling Shift Instructions
1003+
case RISCV::VSSRL_VV:
1004+
case RISCV::VSSRL_VX:
1005+
case RISCV::VSSRL_VI:
1006+
case RISCV::VSSRA_VV:
1007+
case RISCV::VSSRA_VX:
1008+
case RISCV::VSSRA_VI:
1009+
// Vector Narrowing Fixed-Point Clip Instructions
1010+
case RISCV::VNCLIPU_WV:
1011+
case RISCV::VNCLIPU_WX:
1012+
case RISCV::VNCLIPU_WI:
1013+
case RISCV::VNCLIP_WV:
1014+
case RISCV::VNCLIP_WX:
1015+
case RISCV::VNCLIP_WI:
9881016

9891017
// Vector Crypto
9901018
case RISCV::VWSLL_VI:
@@ -1173,8 +1201,16 @@ bool RISCVVLOptimizer::isCandidate(const MachineInstr &MI) const {
11731201
const MCInstrDesc &Desc = MI.getDesc();
11741202
if (!RISCVII::hasVLOp(Desc.TSFlags) || !RISCVII::hasSEWOp(Desc.TSFlags))
11751203
return false;
1176-
if (MI.getNumDefs() != 1)
1204+
1205+
if (MI.getNumExplicitDefs() != 1)
1206+
return false;
1207+
1208+
// Some instructions have implicit defs e.g. $vxsat. If they might be read
1209+
// later then we can't reduce VL.
1210+
if (!MI.allImplicitDefsAreDead()) {
1211+
LLVM_DEBUG(dbgs() << "Not a candidate because has non-dead implicit def\n");
11771212
return false;
1213+
}
11781214

11791215
if (MI.mayRaiseFPException()) {
11801216
LLVM_DEBUG(dbgs() << "Not a candidate because may raise FP exception\n");

llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll

Lines changed: 24 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2522,9 +2522,8 @@ define <vscale x 4 x i32> @vsaddu_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %
25222522
;
25232523
; VLOPT-LABEL: vsaddu_vv:
25242524
; VLOPT: # %bb.0:
2525-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2526-
; VLOPT-NEXT: vsaddu.vv v10, v8, v10
25272525
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2526+
; VLOPT-NEXT: vsaddu.vv v10, v8, v10
25282527
; VLOPT-NEXT: vadd.vv v8, v10, v8
25292528
; VLOPT-NEXT: ret
25302529
%1 = call <vscale x 4 x i32> @llvm.riscv.vsaddu(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen -1)
@@ -2543,9 +2542,8 @@ define <vscale x 4 x i32> @vsaddu_vx(<vscale x 4 x i32> %a, i32 %b, iXLen %vl) {
25432542
;
25442543
; VLOPT-LABEL: vsaddu_vx:
25452544
; VLOPT: # %bb.0:
2546-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
2547-
; VLOPT-NEXT: vsaddu.vx v10, v8, a0
25482545
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
2546+
; VLOPT-NEXT: vsaddu.vx v10, v8, a0
25492547
; VLOPT-NEXT: vadd.vv v8, v10, v8
25502548
; VLOPT-NEXT: ret
25512549
%1 = call <vscale x 4 x i32> @llvm.riscv.vsaddu(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32 %b, iXLen -1)
@@ -2564,9 +2562,8 @@ define <vscale x 4 x i32> @vsaddu_vi(<vscale x 4 x i32> %a, iXLen %vl) {
25642562
;
25652563
; VLOPT-LABEL: vsaddu_vi:
25662564
; VLOPT: # %bb.0:
2567-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2568-
; VLOPT-NEXT: vsaddu.vi v10, v8, 5
25692565
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2566+
; VLOPT-NEXT: vsaddu.vi v10, v8, 5
25702567
; VLOPT-NEXT: vadd.vv v8, v10, v8
25712568
; VLOPT-NEXT: ret
25722569
%1 = call <vscale x 4 x i32> @llvm.riscv.vsaddu(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32 5, iXLen -1)
@@ -2585,9 +2582,8 @@ define <vscale x 4 x i32> @vsadd_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b
25852582
;
25862583
; VLOPT-LABEL: vsadd_vv:
25872584
; VLOPT: # %bb.0:
2588-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2589-
; VLOPT-NEXT: vsadd.vv v10, v8, v10
25902585
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2586+
; VLOPT-NEXT: vsadd.vv v10, v8, v10
25912587
; VLOPT-NEXT: vadd.vv v8, v10, v8
25922588
; VLOPT-NEXT: ret
25932589
%1 = call <vscale x 4 x i32> @llvm.riscv.vsadd(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen -1)
@@ -2606,9 +2602,8 @@ define <vscale x 4 x i32> @vsadd_vx(<vscale x 4 x i32> %a, i32 %b, iXLen %vl) {
26062602
;
26072603
; VLOPT-LABEL: vsadd_vx:
26082604
; VLOPT: # %bb.0:
2609-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
2610-
; VLOPT-NEXT: vsadd.vx v10, v8, a0
26112605
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
2606+
; VLOPT-NEXT: vsadd.vx v10, v8, a0
26122607
; VLOPT-NEXT: vadd.vv v8, v10, v8
26132608
; VLOPT-NEXT: ret
26142609
%1 = call <vscale x 4 x i32> @llvm.riscv.vsadd(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32 %b, iXLen -1)
@@ -2627,9 +2622,8 @@ define <vscale x 4 x i32> @vsadd_vi(<vscale x 4 x i32> %a, iXLen %vl) {
26272622
;
26282623
; VLOPT-LABEL: vsadd_vi:
26292624
; VLOPT: # %bb.0:
2630-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2631-
; VLOPT-NEXT: vsadd.vi v10, v8, 5
26322625
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2626+
; VLOPT-NEXT: vsadd.vi v10, v8, 5
26332627
; VLOPT-NEXT: vadd.vv v8, v10, v8
26342628
; VLOPT-NEXT: ret
26352629
%1 = call <vscale x 4 x i32> @llvm.riscv.vsadd(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32 5, iXLen -1)
@@ -2648,9 +2642,8 @@ define <vscale x 4 x i32> @vssubu_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %
26482642
;
26492643
; VLOPT-LABEL: vssubu_vv:
26502644
; VLOPT: # %bb.0:
2651-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2652-
; VLOPT-NEXT: vssubu.vv v10, v8, v10
26532645
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2646+
; VLOPT-NEXT: vssubu.vv v10, v8, v10
26542647
; VLOPT-NEXT: vadd.vv v8, v10, v8
26552648
; VLOPT-NEXT: ret
26562649
%1 = call <vscale x 4 x i32> @llvm.riscv.vssubu(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen -1)
@@ -2669,9 +2662,8 @@ define <vscale x 4 x i32> @vssubu_vx(<vscale x 4 x i32> %a, i32 %b, iXLen %vl) {
26692662
;
26702663
; VLOPT-LABEL: vssubu_vx:
26712664
; VLOPT: # %bb.0:
2672-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
2673-
; VLOPT-NEXT: vssubu.vx v10, v8, a0
26742665
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
2666+
; VLOPT-NEXT: vssubu.vx v10, v8, a0
26752667
; VLOPT-NEXT: vadd.vv v8, v10, v8
26762668
; VLOPT-NEXT: ret
26772669
%1 = call <vscale x 4 x i32> @llvm.riscv.vssubu(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32 %b, iXLen -1)
@@ -2690,9 +2682,8 @@ define <vscale x 4 x i32> @vssub_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b
26902682
;
26912683
; VLOPT-LABEL: vssub_vv:
26922684
; VLOPT: # %bb.0:
2693-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2694-
; VLOPT-NEXT: vssub.vv v10, v8, v10
26952685
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2686+
; VLOPT-NEXT: vssub.vv v10, v8, v10
26962687
; VLOPT-NEXT: vadd.vv v8, v10, v8
26972688
; VLOPT-NEXT: ret
26982689
%1 = call <vscale x 4 x i32> @llvm.riscv.vssub(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen -1)
@@ -2711,9 +2702,8 @@ define <vscale x 4 x i32> @vssub_vx(<vscale x 4 x i32> %a, i32 %b, iXLen %vl) {
27112702
;
27122703
; VLOPT-LABEL: vssub_vx:
27132704
; VLOPT: # %bb.0:
2714-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
2715-
; VLOPT-NEXT: vssub.vx v10, v8, a0
27162705
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
2706+
; VLOPT-NEXT: vssub.vx v10, v8, a0
27172707
; VLOPT-NEXT: vadd.vv v8, v10, v8
27182708
; VLOPT-NEXT: ret
27192709
%1 = call <vscale x 4 x i32> @llvm.riscv.vssub(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32 %b, iXLen -1)
@@ -2734,9 +2724,8 @@ define <vscale x 4 x i32> @vsmul_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b
27342724
; VLOPT-LABEL: vsmul_vv:
27352725
; VLOPT: # %bb.0:
27362726
; VLOPT-NEXT: csrwi vxrm, 0
2737-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2738-
; VLOPT-NEXT: vsmul.vv v8, v8, v10
27392727
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2728+
; VLOPT-NEXT: vsmul.vv v8, v8, v10
27402729
; VLOPT-NEXT: vadd.vv v8, v8, v10
27412730
; VLOPT-NEXT: ret
27422731
%1 = call <vscale x 4 x i32> @llvm.riscv.vsmul.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen 0, iXLen -1)
@@ -2757,9 +2746,8 @@ define <vscale x 4 x i32> @vsmul_vx(<vscale x 4 x i32> %a, i32 %b, iXLen %vl) {
27572746
; VLOPT-LABEL: vsmul_vx:
27582747
; VLOPT: # %bb.0:
27592748
; VLOPT-NEXT: csrwi vxrm, 0
2760-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
2761-
; VLOPT-NEXT: vsmul.vx v10, v8, a0
27622749
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
2750+
; VLOPT-NEXT: vsmul.vx v10, v8, a0
27632751
; VLOPT-NEXT: vadd.vv v8, v10, v8
27642752
; VLOPT-NEXT: ret
27652753
%1 = call <vscale x 4 x i32> @llvm.riscv.vsmul.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, i32 %b, iXLen 0, iXLen -1)
@@ -2780,9 +2768,8 @@ define <vscale x 4 x i32> @vssrl_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b
27802768
; VLOPT-LABEL: vssrl_vv:
27812769
; VLOPT: # %bb.0:
27822770
; VLOPT-NEXT: csrwi vxrm, 0
2783-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2784-
; VLOPT-NEXT: vssrl.vv v8, v8, v10
27852771
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2772+
; VLOPT-NEXT: vssrl.vv v8, v8, v10
27862773
; VLOPT-NEXT: vadd.vv v8, v8, v10
27872774
; VLOPT-NEXT: ret
27882775
%1 = call <vscale x 4 x i32> @llvm.riscv.vssrl.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen 0, iXLen -1)
@@ -2803,9 +2790,8 @@ define <vscale x 4 x i32> @vssrl_vx(<vscale x 4 x i32> %a, iXLen %b, iXLen %vl)
28032790
; VLOPT-LABEL: vssrl_vx:
28042791
; VLOPT: # %bb.0:
28052792
; VLOPT-NEXT: csrwi vxrm, 0
2806-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
2807-
; VLOPT-NEXT: vssrl.vx v10, v8, a0
28082793
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
2794+
; VLOPT-NEXT: vssrl.vx v10, v8, a0
28092795
; VLOPT-NEXT: vadd.vv v8, v10, v8
28102796
; VLOPT-NEXT: ret
28112797
%1 = call <vscale x 4 x i32> @llvm.riscv.vssrl.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, iXLen %b, iXLen 0, iXLen -1)
@@ -2826,9 +2812,8 @@ define <vscale x 4 x i32> @vssrl_vi(<vscale x 4 x i32> %a, iXLen %vl) {
28262812
; VLOPT-LABEL: vssrl_vi:
28272813
; VLOPT: # %bb.0:
28282814
; VLOPT-NEXT: csrwi vxrm, 0
2829-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2830-
; VLOPT-NEXT: vssrl.vi v10, v8, 5
28312815
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2816+
; VLOPT-NEXT: vssrl.vi v10, v8, 5
28322817
; VLOPT-NEXT: vadd.vv v8, v10, v8
28332818
; VLOPT-NEXT: ret
28342819
%1 = call <vscale x 4 x i32> @llvm.riscv.vssrl.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, iXLen 5, iXLen 0, iXLen -1)
@@ -2849,9 +2834,8 @@ define <vscale x 4 x i32> @vssra_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b
28492834
; VLOPT-LABEL: vssra_vv:
28502835
; VLOPT: # %bb.0:
28512836
; VLOPT-NEXT: csrwi vxrm, 0
2852-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2853-
; VLOPT-NEXT: vssra.vv v8, v8, v10
28542837
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2838+
; VLOPT-NEXT: vssra.vv v8, v8, v10
28552839
; VLOPT-NEXT: vadd.vv v8, v8, v10
28562840
; VLOPT-NEXT: ret
28572841
%1 = call <vscale x 4 x i32> @llvm.riscv.vssra.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen 0, iXLen -1)
@@ -2872,9 +2856,8 @@ define <vscale x 4 x i32> @vssra_vx(<vscale x 4 x i32> %a, iXLen %b, iXLen %vl)
28722856
; VLOPT-LABEL: vssra_vx:
28732857
; VLOPT: # %bb.0:
28742858
; VLOPT-NEXT: csrwi vxrm, 0
2875-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
2876-
; VLOPT-NEXT: vssra.vx v10, v8, a0
28772859
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
2860+
; VLOPT-NEXT: vssra.vx v10, v8, a0
28782861
; VLOPT-NEXT: vadd.vv v8, v10, v8
28792862
; VLOPT-NEXT: ret
28802863
%1 = call <vscale x 4 x i32> @llvm.riscv.vssra.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, iXLen %b, iXLen 0, iXLen -1)
@@ -2895,9 +2878,8 @@ define <vscale x 4 x i32> @vssra_vi(<vscale x 4 x i32> %a, iXLen %vl) {
28952878
; VLOPT-LABEL: vssra_vi:
28962879
; VLOPT: # %bb.0:
28972880
; VLOPT-NEXT: csrwi vxrm, 0
2898-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2899-
; VLOPT-NEXT: vssra.vi v10, v8, 5
29002881
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2882+
; VLOPT-NEXT: vssra.vi v10, v8, 5
29012883
; VLOPT-NEXT: vadd.vv v8, v10, v8
29022884
; VLOPT-NEXT: ret
29032885
%1 = call <vscale x 4 x i32> @llvm.riscv.vssra.nxv4i32.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i32> %a, iXLen 5, iXLen 0, iXLen -1)
@@ -2918,9 +2900,8 @@ define <vscale x 4 x i32> @vnclipu_vv(<vscale x 4 x i64> %a, <vscale x 4 x i32>
29182900
; VLOPT-LABEL: vnclipu_vv:
29192901
; VLOPT: # %bb.0:
29202902
; VLOPT-NEXT: csrwi vxrm, 0
2921-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2922-
; VLOPT-NEXT: vnclipu.wv v14, v8, v12
29232903
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2904+
; VLOPT-NEXT: vnclipu.wv v14, v8, v12
29242905
; VLOPT-NEXT: vadd.vv v8, v14, v14
29252906
; VLOPT-NEXT: ret
29262907
%1 = call <vscale x 4 x i32> @llvm.riscv.vnclipu(<vscale x 4 x i32> poison, <vscale x 4 x i64> %a, <vscale x 4 x i32> %b, iXLen 0, iXLen -1)
@@ -2941,9 +2922,8 @@ define <vscale x 4 x i32> @vnclipu_vx(<vscale x 4 x i64> %a, iXLen %b, iXLen %vl
29412922
; VLOPT-LABEL: vnclipu_vx:
29422923
; VLOPT: # %bb.0:
29432924
; VLOPT-NEXT: csrwi vxrm, 0
2944-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
2945-
; VLOPT-NEXT: vnclipu.wx v12, v8, a0
29462925
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
2926+
; VLOPT-NEXT: vnclipu.wx v12, v8, a0
29472927
; VLOPT-NEXT: vadd.vv v8, v12, v12
29482928
; VLOPT-NEXT: ret
29492929
%1 = call <vscale x 4 x i32> @llvm.riscv.vnclipu(<vscale x 4 x i32> poison, <vscale x 4 x i64> %a, iXLen %b, iXLen 0, iXLen -1)
@@ -2964,9 +2944,8 @@ define <vscale x 4 x i32> @vnclipu_vi(<vscale x 4 x i64> %a, iXLen %vl) {
29642944
; VLOPT-LABEL: vnclipu_vi:
29652945
; VLOPT: # %bb.0:
29662946
; VLOPT-NEXT: csrwi vxrm, 0
2967-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2968-
; VLOPT-NEXT: vnclipu.wi v12, v8, 5
29692947
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2948+
; VLOPT-NEXT: vnclipu.wi v12, v8, 5
29702949
; VLOPT-NEXT: vadd.vv v8, v12, v12
29712950
; VLOPT-NEXT: ret
29722951
%1 = call <vscale x 4 x i32> @llvm.riscv.vnclipu(<vscale x 4 x i32> poison, <vscale x 4 x i64> %a, iXLen 5, iXLen 0, iXLen -1)
@@ -2987,9 +2966,8 @@ define <vscale x 4 x i32> @vnclip_vv(<vscale x 4 x i64> %a, <vscale x 4 x i32> %
29872966
; VLOPT-LABEL: vnclip_vv:
29882967
; VLOPT: # %bb.0:
29892968
; VLOPT-NEXT: csrwi vxrm, 0
2990-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
2991-
; VLOPT-NEXT: vnclip.wv v14, v8, v12
29922969
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
2970+
; VLOPT-NEXT: vnclip.wv v14, v8, v12
29932971
; VLOPT-NEXT: vadd.vv v8, v14, v14
29942972
; VLOPT-NEXT: ret
29952973
%1 = call <vscale x 4 x i32> @llvm.riscv.vnclip(<vscale x 4 x i32> poison, <vscale x 4 x i64> %a, <vscale x 4 x i32> %b, iXLen 0, iXLen -1)
@@ -3010,9 +2988,8 @@ define <vscale x 4 x i32> @vnclip_vx(<vscale x 4 x i64> %a, iXLen %b, iXLen %vl)
30102988
; VLOPT-LABEL: vnclip_vx:
30112989
; VLOPT: # %bb.0:
30122990
; VLOPT-NEXT: csrwi vxrm, 0
3013-
; VLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
3014-
; VLOPT-NEXT: vnclip.wx v12, v8, a0
30152991
; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
2992+
; VLOPT-NEXT: vnclip.wx v12, v8, a0
30162993
; VLOPT-NEXT: vadd.vv v8, v12, v12
30172994
; VLOPT-NEXT: ret
30182995
%1 = call <vscale x 4 x i32> @llvm.riscv.vnclip(<vscale x 4 x i32> poison, <vscale x 4 x i64> %a, iXLen %b, iXLen 0, iXLen -1)
@@ -3033,9 +3010,8 @@ define <vscale x 4 x i32> @vnclip_vi(<vscale x 4 x i64> %a, iXLen %vl) {
30333010
; VLOPT-LABEL: vnclip_vi:
30343011
; VLOPT: # %bb.0:
30353012
; VLOPT-NEXT: csrwi vxrm, 0
3036-
; VLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
3037-
; VLOPT-NEXT: vnclip.wi v12, v8, 5
30383013
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
3014+
; VLOPT-NEXT: vnclip.wi v12, v8, 5
30393015
; VLOPT-NEXT: vadd.vv v8, v12, v12
30403016
; VLOPT-NEXT: ret
30413017
%1 = call <vscale x 4 x i32> @llvm.riscv.vnclip(<vscale x 4 x i32> poison, <vscale x 4 x i64> %a, iXLen 5, iXLen 0, iXLen -1)

llvm/test/CodeGen/RISCV/rvv/vl-opt.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ name: vxsat_dead
275275
body: |
276276
bb.0:
277277
; CHECK-LABEL: name: vxsat_dead
278-
; CHECK: %x:vr = PseudoVSADDU_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */, implicit-def dead $vxsat
278+
; CHECK: %x:vr = PseudoVSADDU_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */, implicit-def dead $vxsat
279279
; CHECK-NEXT: %y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
280280
%x:vr = PseudoVSADDU_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */, implicit-def dead $vxsat
281281
%y:vr = PseudoVADD_VV_M1 $noreg, %x, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */

0 commit comments

Comments
 (0)