diff options
author | Florian Hahn <flo@fhahn.com> | 2021-05-28 10:32:40 +0100 |
---|---|---|
committer | Florian Hahn <flo@fhahn.com> | 2021-05-28 10:33:52 +0100 |
commit | ec1f6f7e3f92d806d0f7e4d687173a150102ec5d (patch) | |
tree | 8af25462ff2034735bc09880b1f8adeca162afae /llvm/lib/Analysis/LoopAccessAnalysis.cpp | |
parent | 690f5b7a0128a210093e9b217932743ad35b5c5a (diff) | |
download | llvm-ec1f6f7e3f92d806d0f7e4d687173a150102ec5d.zip llvm-ec1f6f7e3f92d806d0f7e4d687173a150102ec5d.tar.gz llvm-ec1f6f7e3f92d806d0f7e4d687173a150102ec5d.tar.bz2 |
Revert "[LAA] Support pointer phis in loop by analyzing each incoming pointer."
This reverts commit 1ed7f8ede564c3b11da4fdca30c36ccbff422576.
This change can cause loop-distribute to crash in some cases. Revert
until I have more time to wrap up a fix.
See PR50296, PR5028 and D102266.
Diffstat (limited to 'llvm/lib/Analysis/LoopAccessAnalysis.cpp')
-rw-r--r-- | llvm/lib/Analysis/LoopAccessAnalysis.cpp | 25 |
1 files changed, 2 insertions, 23 deletions
diff --git a/llvm/lib/Analysis/LoopAccessAnalysis.cpp b/llvm/lib/Analysis/LoopAccessAnalysis.cpp index 3535058..3248b2a 100644 --- a/llvm/lib/Analysis/LoopAccessAnalysis.cpp +++ b/llvm/lib/Analysis/LoopAccessAnalysis.cpp @@ -1938,18 +1938,7 @@ void LoopAccessInfo::analyzeLoop(AAResults *AA, LoopInfo *LI, if (blockNeedsPredication(ST->getParent(), TheLoop, DT)) Loc.AATags.TBAA = nullptr; - // SCEV does not look through non-header PHIs inside the loop. Such phis - // can be analyzed by adding separate accesses for each incoming pointer - // value. - auto *PN = dyn_cast<PHINode>(Loc.Ptr); - if (PN && TheLoop->contains(PN->getParent()) && - PN->getParent() != TheLoop->getHeader()) { - for (const Use &Inc : PN->incoming_values()) { - MemoryLocation NewLoc = Loc.getWithNewPtr(Inc); - Accesses.addStore(NewLoc); - } - } else - Accesses.addStore(Loc); + Accesses.addStore(Loc); } } @@ -1993,17 +1982,7 @@ void LoopAccessInfo::analyzeLoop(AAResults *AA, LoopInfo *LI, if (blockNeedsPredication(LD->getParent(), TheLoop, DT)) Loc.AATags.TBAA = nullptr; - // SCEV does not look through non-header PHIs inside the loop. Such phis can - // be analyzed by adding separate accesses for each incoming pointer value. - auto *PN = dyn_cast<PHINode>(Loc.Ptr); - if (PN && TheLoop->contains(PN->getParent()) && - PN->getParent() != TheLoop->getHeader()) { - for (const Use &Inc : PN->incoming_values()) { - MemoryLocation NewLoc = Loc.getWithNewPtr(Inc); - Accesses.addLoad(NewLoc, IsReadOnlyPtr); - } - } else - Accesses.addLoad(Loc, IsReadOnlyPtr); + Accesses.addLoad(Loc, IsReadOnlyPtr); } // If we write (or read-write) to a single destination and there are no |