[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