[llvm] [SCEV] Preserve divisibility info when creating UMax/SMax expressions. (PR #160012)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 22 07:50:33 PDT 2025
================
@@ -15986,7 +15991,22 @@ void ScalarEvolution::LoopGuards::collectFromBlock(
for (const SCEV *Expr : ExprsToRewrite) {
const SCEV *RewriteTo = Guards.RewriteMap[Expr];
Guards.RewriteMap.erase(Expr);
- Guards.RewriteMap.insert({Expr, Guards.rewrite(RewriteTo)});
+ const SCEV *Rewritten = Guards.rewrite(RewriteTo);
+
+ // Try to strengthen divisibility of SMax/UMax expressions coming from >=
+ // 1 conditions.
+ if (auto *SMax = dyn_cast<SCEVSMaxExpr>(Rewritten)) {
+ unsigned MinTrailingZeros = SE.getMinTrailingZeros(SMax->getOperand(1));
----------------
nikic wrote:
Use getConstantMultiple instead?
https://github.com/llvm/llvm-project/pull/160012
More information about the llvm-commits
mailing list