aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/LoopUnroll.cpp
diff options
context:
space:
mode:
authorFlorian Hahn <flo@fhahn.com>2022-09-27 08:47:19 +0100
committerFlorian Hahn <flo@fhahn.com>2022-09-27 08:49:04 +0100
commit275bee32ad305eb5da121e8a60918256f3caf1e7 (patch)
tree2367a0e8a622bee9438db4a59c7d83f369703f92 /llvm/lib/Transforms/Utils/LoopUnroll.cpp
parent2dfe7a34297ad28d6d54964a1c98d96ab7f5f69d (diff)
downloadllvm-275bee32ad305eb5da121e8a60918256f3caf1e7.zip
llvm-275bee32ad305eb5da121e8a60918256f3caf1e7.tar.gz
llvm-275bee32ad305eb5da121e8a60918256f3caf1e7.tar.bz2
[LoopUnroll] Forget block and loop dispositions during unrolling.
After unrolling a loop, the block and loop dispositions need to be cleared. As we don't know which SCEVs in the loop/blocks may be impacted, completely clear the cache. This should also fix some cases where deleted loops remained in the LoopDispositions cache. This fixes a verification failure surfaced by D134531. I am planning on reviewing/updating the existing uses of forgetLoopDispositions to check if they should be replaced by forgetBlockAndLoopDispositions. Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D134612
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUnroll.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/LoopUnroll.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopUnroll.cpp b/llvm/lib/Transforms/Utils/LoopUnroll.cpp
index 75961a1..6d6c3db 100644
--- a/llvm/lib/Transforms/Utils/LoopUnroll.cpp
+++ b/llvm/lib/Transforms/Utils/LoopUnroll.cpp
@@ -465,8 +465,10 @@ LoopUnrollResult llvm::UnrollLoop(Loop *L, UnrollLoopOptions ULO, LoopInfo *LI,
if (SE) {
if (ULO.ForgetAllSCEV)
SE->forgetAllLoops();
- else
+ else {
SE->forgetTopmostLoop(L);
+ SE->forgetBlockAndLoopDispositions();
+ }
}
if (!LatchIsExiting)