[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