[llvm] [LAA][NFCI] Re-use hasComputableBounds in findForkedPointer and refactor createCheckForAccess (PR #112571)

David Sherwood via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 17 08:12:06 PDT 2024


================
@@ -1067,30 +1065,26 @@ bool AccessAnalysis::createCheckForAccess(RuntimePointerChecking &RtCheck,
   SmallVector<PointerIntPair<const SCEV *, 1, bool>> TranslatedPtrs =
       findForkedPointer(PSE, StridesMap, Ptr, TheLoop);
 
-  for (const auto &P : TranslatedPtrs) {
-    const SCEV *PtrExpr = get<0>(P);
-    if (!hasComputableBounds(PSE, Ptr, PtrExpr, TheLoop, Assume))
+  if (TranslatedPtrs.size() == 1) {
+    auto &TranslatedPtr = TranslatedPtrs.front();
+    if (!hasComputableBounds(PSE, Ptr, get<0>(TranslatedPtr), TheLoop, Assume))
       return false;
 
     // When we run after a failing dependency check we have to make sure
     // we don't have wrapping pointers.
-    if (ShouldCheckWrap) {
-      // Skip wrap checking when translating pointers.
-      if (TranslatedPtrs.size() > 1)
+    if (ShouldCheckWrap && !isNoWrap(PSE, StridesMap, Ptr, AccessTy, TheLoop)) {
+      const SCEV *Expr = PSE.getSCEV(Ptr);
+      if (!Assume || !isa<SCEVAddRecExpr>(Expr))
         return false;
-
-      if (!isNoWrap(PSE, StridesMap, Ptr, AccessTy, TheLoop)) {
-        const SCEV *Expr = PSE.getSCEV(Ptr);
-        if (!Assume || !isa<SCEVAddRecExpr>(Expr))
-          return false;
-        PSE.setNoOverflow(Ptr, SCEVWrapPredicate::IncrementNUSW);
-      }
+      PSE.setNoOverflow(Ptr, SCEVWrapPredicate::IncrementNUSW);
     }
     // If there's only one option for Ptr, look it up after bounds and wrap
     // checking, because assumptions might have been added to PSE.
-    if (TranslatedPtrs.size() == 1)
-      TranslatedPtrs[0] = {replaceSymbolicStrideSCEV(PSE, StridesMap, Ptr),
-                           false};
+    TranslatedPtr = {replaceSymbolicStrideSCEV(PSE, StridesMap, Ptr), false};
+  } else {
+    // Skip wrap checking when translating pointers.
----------------
david-arm wrote:

nit: I think you can fold the else and if together:

```
  } else if (ShouldCheckWrap) {
    // Skip wrap checking when translating pointers.
    return false;
  }
```

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


More information about the llvm-commits mailing list