[llvm] [LAA] Honor no-wrap predicates already in PSE in isNoWrap (PR #226430)

Ramkumar Ramachandra via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 27 14:09:02 PDT 2026


================
@@ -1153,7 +1153,12 @@ isNoWrap(PredicatedScalarEvolution &PSE, const SCEVAddRecExpr *AR, Value *Ptr,
     return true;
   }
 
-  return false;
+  // Without adding a new predicate, AR may still be known not to wrap if the
+  // predicates of PSE already imply it, e.g. because a wrap predicate for AR
+  // was added while analyzing the dependences of the loop.
+  ScalarEvolution &SE = *PSE.getSE();
+  return PSE.getPredicate().implies(
+      SE.getWrapPredicate(AR, SCEVWrapPredicate::IncrementNUSW), SE);
----------------
artagnon wrote:

```suggestion
if (Ptr && Predicates) {
ScalarEvolution &SE = *PSE.getSE();
SCEVPredicate *NewPred = SE.getWrapPredicate(AR, SCEVPredicate::IncrementNUSW);
if (!PSE.getPredicate().implies(NewPred))
Predicates->push_back(NewPred);
LLVM_DEBUG(dbgs() << "LAA: Pointer may wrap:\n"
<< "LAA:   Pointer: " << *Ptr << "\n"
<< "LAA:   SCEV: " << *AR << "\n"
<< "LAA:   Added an overflow assumption\n");
return true;
}
return false;
```

https://github.com/llvm/llvm-project/pull/226430


More information about the llvm-commits mailing list