[llvm] [LAA] Rewrite findForkedPointer (NFC) (PR #140298)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 4 06:20:10 PDT 2025
================
@@ -1207,29 +1207,46 @@ static void findForkedSCEVs(
}
}
-static SmallVector<PointerIntPair<const SCEV *, 1, bool>>
-findForkedPointer(PredicatedScalarEvolution &PSE,
- const DenseMap<Value *, const SCEV *> &StridesMap, Value *Ptr,
- const Loop *L) {
- ScalarEvolution *SE = PSE.getSE();
- assert(SE->isSCEVable(Ptr->getType()) && "Value is not SCEVable!");
- SmallVector<PointerIntPair<const SCEV *, 1, bool>> Scevs;
- findForkedSCEVs(SE, L, Ptr, Scevs, MaxForkedSCEVDepth);
+/// Given \p ForkedSCEVs corresponding to \p Ptr, get AddRecs from \p Assume and
+/// \p StridesMap, and return SCEVs that could potentially be checked at runtime
+/// (AddRecs and loop-invariants). Returns an empty range as an early exit.
+static iterator_range<PointerIntPair<const SCEV *, 1, bool> *> getRTCheckPtrs(
+ PredicatedScalarEvolution &PSE, const Loop *L, Value *Ptr,
+ MutableArrayRef<PointerIntPair<const SCEV *, 1, bool>> ForkedSCEVs,
+ const DenseMap<Value *, const SCEV *> &StridesMap, bool Assume) {
+ for (auto &P : ForkedSCEVs) {
+ auto *AR = dyn_cast<SCEVAddRecExpr>(P.getPointer());
+ if (!AR && Assume)
+ AR = PSE.getAsAddRec(Ptr);
+
+ // Call replaceSymbolicStrideSCEV only after PSE.getAsAddRec, because
+ // assumptions might have been added to PSE, resulting in simplifications.
+ const SCEV *S = replaceSymbolicStrideSCEV(PSE, StridesMap, Ptr);
----------------
fhahn wrote:
Conceptually I am not sure if it make sense to call `replaceSymbolicStrideSCEV`; the pointer underlying IR pointer for the SCEV expression we are processing may be different than the original IR pointer, so using it here seems fragile for forked pointers.
https://github.com/llvm/llvm-project/pull/140298
More information about the llvm-commits
mailing list