[llvm] [RISCV] Lower (select c, y, 0) -> (qc.muliadd c, y-1) (PR #190323)

Sam Elliott via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 3 15:23:43 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;
----------------
lenary wrote:

Both of these should probably share `TrueM1`, because `M1` i think means "minus 1".

https://github.com/llvm/llvm-project/pull/190323


More information about the llvm-commits mailing list