[llvm] 3f19177 - [RISCV] Update combineBinOp_VLToVWBinOp_VL to check the number users after we know what combine we're going to do.
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 9 16:47:53 PST 2023
Author: Craig Topper
Date: 2023-01-09T16:44:10-08:00
New Revision: 3f191770fa7682347f150dd2c4c98cad4ae211f2
URL: https://github.com/llvm/llvm-project/commit/3f191770fa7682347f150dd2c4c98cad4ae211f2
DIFF: https://github.com/llvm/llvm-project/commit/3f191770fa7682347f150dd2c4c98cad4ae211f2.diff
LOG: [RISCV] Update combineBinOp_VLToVWBinOp_VL to check the number users after we know what combine we're going to do.
If we're forming vwadd(u).wv we don't care if the already wide
source operand has additional users. It's not affected by the
transform.
Fixes #59345
Added:
Modified:
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
llvm/test/CodeGen/RISCV/rvv/vwadd-vp.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
index f946225a00906..74dc737ddf7f4 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -9416,8 +9416,6 @@ combineBinOp_VLToVWBinOp_VL(SDNode *N, TargetLowering::DAGCombinerInfo &DCI) {
}
}
};
- AppendUsersIfNeeded(LHS);
- AppendUsersIfNeeded(RHS);
// Control the compile time by limiting the number of node we look at in
// total.
@@ -9439,6 +9437,13 @@ combineBinOp_VLToVWBinOp_VL(SDNode *N, TargetLowering::DAGCombinerInfo &DCI) {
if (Res) {
Matched = true;
CombinesToApply.push_back(*Res);
+ // All the inputs that are extended need to be folded, otherwise
+ // we would be leaving the old input (since it is may still be used),
+ // and the new one.
+ if (Res->SExtLHS.has_value())
+ AppendUsersIfNeeded(LHS);
+ if (Res->SExtRHS.has_value())
+ AppendUsersIfNeeded(RHS);
break;
}
}
diff --git a/llvm/test/CodeGen/RISCV/rvv/vwadd-vp.ll b/llvm/test/CodeGen/RISCV/rvv/vwadd-vp.ll
index e2b77b088b79f..3c5f739ae1729 100644
--- a/llvm/test/CodeGen/RISCV/rvv/vwadd-vp.ll
+++ b/llvm/test/CodeGen/RISCV/rvv/vwadd-vp.ll
@@ -6,10 +6,11 @@ define <vscale x 2 x i32> @vwadd_tu(<vscale x 2 x i8> %arg, <vscale x 2 x i32> %
; CHECK: # %bb.0: # %bb
; CHECK-NEXT: slli a0, a0, 32
; CHECK-NEXT: srli a0, a0, 32
-; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
-; CHECK-NEXT: vsext.vf4 v10, v8
+; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
+; CHECK-NEXT: vsext.vf2 v10, v8
+; CHECK-NEXT: vwadd.wv v8, v9, v10
; CHECK-NEXT: vsetvli zero, zero, e32, m1, tu, ma
-; CHECK-NEXT: vadd.vv v9, v9, v10
+; CHECK-NEXT: vadd.vi v9, v8, 0
; CHECK-NEXT: vmv1r.v v8, v9
; CHECK-NEXT: ret
bb:
@@ -24,10 +25,11 @@ define <vscale x 2 x i32> @vwaddu_tu(<vscale x 2 x i8> %arg, <vscale x 2 x i32>
; CHECK: # %bb.0: # %bb
; CHECK-NEXT: slli a0, a0, 32
; CHECK-NEXT: srli a0, a0, 32
-; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
-; CHECK-NEXT: vzext.vf4 v10, v8
+; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
+; CHECK-NEXT: vzext.vf2 v10, v8
+; CHECK-NEXT: vwaddu.wv v8, v9, v10
; CHECK-NEXT: vsetvli zero, zero, e32, m1, tu, ma
-; CHECK-NEXT: vadd.vv v9, v9, v10
+; CHECK-NEXT: vadd.vi v9, v8, 0
; CHECK-NEXT: vmv1r.v v8, v9
; CHECK-NEXT: ret
bb:
More information about the llvm-commits
mailing list