[llvm] DAGCombiner: (srl/sra (add nuw/nsw X, c), d) --> (add nuw/nsw (srl/sra X, d), c >> d) (PR #196379)
Jay Foad via llvm-commits
llvm-commits at lists.llvm.org
Fri May 8 03:06:03 PDT 2026
================
@@ -11428,6 +11428,24 @@ SDValue DAGCombiner::visitSRA(SDNode *N) {
}
}
+ // fold (sra (add nsw X, C), D) -> (add nsw (sra X, D), C s>> D)
+ // when C has D trailing zeros (so C s>> D is exact).
+ if (N1C && N0.hasOneUse() && N0.getOpcode() == ISD::ADD &&
+ N0->getFlags().hasNoSignedWrap()) {
+ if (ConstantSDNode *AddC = isConstOrConstSplat(N0.getOperand(1))) {
+ uint64_t ShAmt = N1C->getZExtValue();
----------------
jayfoad wrote:
Being super picky, do you need to do something here to guard against N1C being wildly out of range?
https://github.com/llvm/llvm-project/pull/196379
More information about the llvm-commits
mailing list