[llvm] Tighten loop guards range check idiom (PR #210387)
Ramkumar Ramachandra via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 17 15:56:23 PDT 2026
================
@@ -16060,10 +16060,19 @@ void ScalarEvolution::LoopGuards::collectFromBlock(
ConstantRange::makeExactICmpRegion(Pred, C2->getAPInt())
.sub(C1->getAPInt());
- // Bail out, unless we have a non-wrapping, monotonic range.
- if (ExactRegion.isWrappedSet() || ExactRegion.isFullSet())
- return false;
+ // Tighten the raw range with what we already know about LHSUnknown
+ // from prior guards recorded in RewriteMap, or from SCEV's own range
+ // analysis.
const SCEV *RewrittenLHS = GetMaybeRewritten(LHSUnknown);
+ ExactRegion = ExactRegion.intersectWith(SE.getUnsignedRange(RewrittenLHS),
+ ConstantRange::Unsigned);
----------------
artagnon wrote:
Even better:
```cpp
if (!SE.getUnsignedRange(RewrittenLHS).icmp(Pred, C2 - C1))
return false;
```
https://github.com/llvm/llvm-project/pull/210387
More information about the llvm-commits
mailing list