[llvm] [LAA] Add stencil group merging to reduce runtime pointer checks (PR #187252)

Igor Kirillov via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 17 05:55:28 PDT 2026


================
@@ -1393,9 +1456,26 @@ void RuntimePointerChecking::mergeStencilGroups(PredicatedScalarEvolution &PSE,
         return false;
       }
 
-      for (const auto &[Stride, Coeff] : DLow->Coefficients)
+      auto UpperLimit = getStencilStrideUpperLimit(
+          *DLow, SE->getTypeSizeInBits(LowOffset->getType()));
+      if (!UpperLimit)
+        return false;
+
+      for (const auto &[Stride, Coeff] : DLow->Coefficients) {
+        // Require a positive stride if needed. The lower limit is always 1.
         if (!SE->isKnownPositive(Stride))
-          LocalStridesNeedingPreds.insert(Stride);
+          LocalStrideLowerLimits.insert(Stride);
+
+        // Check whether an upper-limit predicate is needed.
+        if (!Coeff || SE->isKnownPredicate(ICmpInst::ICMP_SLE, Stride,
+                                           SE->getConstant(*UpperLimit)))
+          continue;
+        auto [It, Inserted] =
+            LocalStrideUpperLimits.insert({Stride, *UpperLimit});
+        // Keep the smallest limit seen so far.
+        if (!Inserted && UpperLimit->ult(It->second))
+          It->second = *UpperLimit;
----------------
igogo-x86 wrote:

The duplicate is gone. Both places now call `StrideLimits::requireUpperLimit`.

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


More information about the llvm-commits mailing list