[llvm] [RISCV] Add 2^N + 2^M expanding pattern for mul (PR #137954)
Iris Shi via llvm-commits
llvm-commits at lists.llvm.org
Wed May 7 22:39:01 PDT 2025
================
@@ -15520,6 +15520,28 @@ static SDValue performXORCombine(SDNode *N, SelectionDAG &DAG,
return combineSelectAndUseCommutative(N, DAG, /*AllOnes*/ false, Subtarget);
}
+// 2^N +/- 2^M -> (add/sub (shl X, C1), (shl X, C2))
+static SDValue expandMulToAddOrSubOfShl(SDNode *N, SelectionDAG &DAG,
+ uint64_t MulAmt) {
+ uint64_t MulAmtLowBit = MulAmt & (-MulAmt);
+ ISD::NodeType Op;
+ if (isPowerOf2_64(MulAmt + MulAmtLowBit))
+ Op = ISD::SUB;
+ else if (isPowerOf2_64(MulAmt - MulAmtLowBit))
+ Op = ISD::ADD;
+ else
+ return SDValue();
+ uint64_t ShiftAmt1 = MulAmt + MulAmtLowBit;
----------------
el-ev wrote:
You're correct. I missed that change, thank you for pointing out.
https://github.com/llvm/llvm-project/pull/137954
More information about the llvm-commits
mailing list