[llvm] [RISCV] Lower (select c, y, 0) -> (qc.muliadd c, y-1) (PR #190323)
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 3 15:32:23 PDT 2026
================
@@ -9663,8 +9663,14 @@ static SDValue lowerSelectToBinOp(SDNode *N, SelectionDAG &DAG,
return DAG.getNode(ISD::AND, DL, VT, Neg, DAG.getFreeze(FalseV));
}
if (isNullConstant(FalseV)) {
- // (select c, (1 << ShAmount) + 1, 0) -> (c << ShAmount) + c
if (auto *TrueC = dyn_cast<ConstantSDNode>(TrueV)) {
+ // (select c, y, 0) -> (c * (y - 1)) + c
+ int64_t TrueM2 = TrueC->getSExtValue() - 1;
----------------
topperc wrote:
TrueC->getZExtValue() returns a uint64_t so overflow isn't undefined behavior.
https://github.com/llvm/llvm-project/pull/190323
More information about the llvm-commits
mailing list