diff options
author | Florian Hahn <flo@fhahn.com> | 2022-09-27 08:47:19 +0100 |
---|---|---|
committer | Florian Hahn <flo@fhahn.com> | 2022-09-27 08:49:04 +0100 |
commit | 275bee32ad305eb5da121e8a60918256f3caf1e7 (patch) | |
tree | 2367a0e8a622bee9438db4a59c7d83f369703f92 /llvm/lib/Transforms/Utils/LoopUnroll.cpp | |
parent | 2dfe7a34297ad28d6d54964a1c98d96ab7f5f69d (diff) | |
download | llvm-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.cpp | 4 |
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) |