aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/LoopAccessAnalysis.cpp
diff options
context:
space:
mode:
authorFlorian Hahn <flo@fhahn.com>2025-02-15 19:44:39 +0100
committerFlorian Hahn <flo@fhahn.com>2025-02-15 19:44:39 +0100
commite60de25c4e9a6d59b7fd868e803cfe3cd77d4078 (patch)
tree5d2da2e32501b8dd1066a4de25752a220f99a9e8 /llvm/lib/Analysis/LoopAccessAnalysis.cpp
parent948e97a40eba6c176183e8e7aefb994681b593ea (diff)
downloadllvm-e60de25c4e9a6d59b7fd868e803cfe3cd77d4078.zip
llvm-e60de25c4e9a6d59b7fd868e803cfe3cd77d4078.tar.gz
llvm-e60de25c4e9a6d59b7fd868e803cfe3cd77d4078.tar.bz2
[LAA] Replace symbolic strides for translated pointers earlier (NFC).
Move up replaceSymbolicStrideSCEV before isNoWrap. It needs to be called after hasComputableBounds, as this may create an AddRec via PSE, which replaceSymbolicStrideSCEV will look up. This is in preparation for simplifying isNoWrap.
Diffstat (limited to 'llvm/lib/Analysis/LoopAccessAnalysis.cpp')
-rw-r--r--llvm/lib/Analysis/LoopAccessAnalysis.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/LoopAccessAnalysis.cpp b/llvm/lib/Analysis/LoopAccessAnalysis.cpp
index e5b87d2..43380b5 100644
--- a/llvm/lib/Analysis/LoopAccessAnalysis.cpp
+++ b/llvm/lib/Analysis/LoopAccessAnalysis.cpp
@@ -1147,6 +1147,11 @@ bool AccessAnalysis::createCheckForAccess(RuntimePointerChecking &RtCheck,
if (!hasComputableBounds(PSE, Ptr, P.getPointer(), TheLoop, Assume))
return false;
+ // 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)
+ P.setPointer(replaceSymbolicStrideSCEV(PSE, StridesMap, Ptr));
+
// When we run after a failing dependency check we have to make sure
// we don't have wrapping pointers.
if (ShouldCheckWrap) {
@@ -1157,10 +1162,6 @@ bool AccessAnalysis::createCheckForAccess(RuntimePointerChecking &RtCheck,
if (!isNoWrap(PSE, StridesMap, Ptr, AccessTy, TheLoop, Assume))
return false;
}
- // 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)
- P.setPointer(replaceSymbolicStrideSCEV(PSE, StridesMap, Ptr));
}
for (auto [PtrExpr, NeedsFreeze] : TranslatedPtrs) {