[llvm] [RISCV] Rewrite vrgather.vx undef, (vmv.s.x), 0, v0 as vmv.v.x (PR #136010)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 16 16:25:46 PDT 2025
================
@@ -19710,20 +19709,47 @@ SDValue RISCVTargetLowering::PerformDAGCombine(SDNode *N,
return V;
break;
case RISCVISD::VRGATHER_VX_VL: {
- // Drop a redundant vrgather_vx.
+ using namespace llvm::SDPatternMatch;
// Note this assumes that out of bounds indices produce poison
// and can thus be replaced without having to prove them inbounds..
+ EVT VT = N->getValueType(0);
SDValue Src = N->getOperand(0);
+ SDValue Idx = N->getOperand(1);
SDValue Passthru = N->getOperand(2);
SDValue VL = N->getOperand(4);
+
+ // Warning: Unlike most cases we strip an insert_subvector, this one
+ // does not require the first operand to be undef.
+ if (Src.getOpcode() == ISD::INSERT_SUBVECTOR &&
+ sd_match(Src.getOperand(2), m_Zero()))
----------------
topperc wrote:
`isNullConstant(Src.getOperand(2)`?
https://github.com/llvm/llvm-project/pull/136010
More information about the llvm-commits
mailing list