[llvm] [RISCV][Isel] Remove redundant vmerge for the scalable vwadd(u).wv (PR #80079)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 30 22:05:00 PST 2024
================
@@ -13795,13 +13798,22 @@ static SDValue combineVWADDWSelect(SDNode *N, SelectionDAG &DAG) {
// False value of MergeOp should be all zeros
SDValue Z = MergeOp->getOperand(2);
- if (Z.getOpcode() != ISD::INSERT_SUBVECTOR)
- return SDValue();
- if (!ISD::isBuildVectorAllZeros(Z.getOperand(1).getNode()))
- return SDValue();
- if (!isNullOrNullSplat(Z.getOperand(0)) && !Z.getOperand(0).isUndef())
+
+ // Scalable vector
+ if (MergeOpc == ISD::VSELECT &&
+ !ISD::isConstantSplatVectorAllZeros(Z.getNode()))
----------------
lukel97 wrote:
Does `ISD::isConstantSplatVectorAllZeros` also work for the fixed length case? I presume the `ISD::INSERT_SUBVECTOR` is for converting a fixed vector to scalable. Would it be easier to read if we first "unwrapped" the false value if needed, and then do the `isConstantSplatVectorAllZeros` check?
https://github.com/llvm/llvm-project/pull/80079
More information about the llvm-commits
mailing list