aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Utils/LoopUnroll.cpp
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2021-05-28 22:38:36 +0200
committerNikita Popov <nikita.ppv@gmail.com>2021-05-29 00:11:21 +0200
commit90310dfff8fd17b0cabdee1fd72d675e5eb2aa78 (patch)
tree8b94092ec98a35befbd3f97d636f52382c03db7d /llvm/lib/Transforms/Utils/LoopUnroll.cpp
parentbc6799f2f79f0ae87e9f1ebf9d25ba799fbd25a9 (diff)
downloadllvm-90310dfff8fd17b0cabdee1fd72d675e5eb2aa78.zip
llvm-90310dfff8fd17b0cabdee1fd72d675e5eb2aa78.tar.gz
llvm-90310dfff8fd17b0cabdee1fd72d675e5eb2aa78.tar.bz2
[LoopUnroll] Use changeToUnreachable() (NFC)
When fulling unrolling with a non-latch exit, the latch block is folded to unreachable. Replace this folding with the existing changeToUnreachable() helper, rather than performing it manually. This also moves the fold to happen after the manual DT update for exit blocks. I believe this is correct in that the conversion of an unconditional backedge into unreachable should not affect the DT at all. Differential Revision: https://reviews.llvm.org/D103340
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUnroll.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/LoopUnroll.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopUnroll.cpp b/llvm/lib/Transforms/Utils/LoopUnroll.cpp
index cb84eb6..3574abe 100644
--- a/llvm/lib/Transforms/Utils/LoopUnroll.cpp
+++ b/llvm/lib/Transforms/Utils/LoopUnroll.cpp
@@ -763,13 +763,6 @@ LoopUnrollResult llvm::UnrollLoop(Loop *L, UnrollLoopOptions ULO, LoopInfo *LI,
}
}
- // When completely unrolling, the last latch becomes unreachable.
- if (!LatchIsExiting && CompletelyUnroll) {
- BranchInst *Term = cast<BranchInst>(Latches.back()->getTerminator());
- new UnreachableInst(Term->getContext(), Term);
- Term->eraseFromParent();
- }
-
// Update dominators of blocks we might reach through exits.
// Immediate dominator of such block might change, because we add more
// routes which can lead to the exit: we can now reach it from the copied
@@ -819,6 +812,12 @@ LoopUnrollResult llvm::UnrollLoop(Loop *L, UnrollLoopOptions ULO, LoopInfo *LI,
DT->verify(DominatorTree::VerificationLevel::Fast));
DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Lazy);
+
+ // When completely unrolling, the last latch becomes unreachable.
+ if (!LatchIsExiting && CompletelyUnroll)
+ changeToUnreachable(Latches.back()->getTerminator(), /* UseTrap */ false,
+ PreserveLCSSA, &DTU);
+
// Merge adjacent basic blocks, if possible.
for (BasicBlock *Latch : Latches) {
BranchInst *Term = dyn_cast<BranchInst>(Latch->getTerminator());