[llvm] r354124 - [NFCI] Factor out block removal from stack of nested loops
Max Kazantsev via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 15 04:18:10 PST 2019
Author: mkazantsev
Date: Fri Feb 15 04:18:10 2019
New Revision: 354124
URL: http://llvm.org/viewvc/llvm-project?rev=354124&view=rev
Log:
[NFCI] Factor out block removal from stack of nested loops
Modified:
llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp?rev=354124&r1=354123&r2=354124&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp Fri Feb 15 04:18:10 2019
@@ -79,6 +79,17 @@ static BasicBlock *getOnlyLiveSuccessor(
return nullptr;
}
+/// Removes \p BB from all loops from [FirstLoop, LastLoop) in parent chain.
+static void removeBlockFromLoops(BasicBlock *BB, Loop *FirstLoop,
+ Loop *LastLoop = nullptr) {
+ assert((!LastLoop || LastLoop->contains(FirstLoop->getHeader())) &&
+ "First loop is supposed to be inside of last loop!");
+ assert(FirstLoop->contains(BB) && "Must be a loop block!");
+ for (Loop *Current = FirstLoop; Current != LastLoop;
+ Current = Current->getParentLoop())
+ Current->removeBlockFromLoop(BB);
+}
+
namespace {
/// Helper class that can turn branches and switches with constant conditions
/// into unconditional branches.
@@ -371,12 +382,9 @@ private:
// its parents as well). Make the fixup.
if (StillReachable != OuterLoop) {
LI.changeLoopFor(NewPreheader, StillReachable);
- for (Loop *NotContaining = OuterLoop; NotContaining != StillReachable;
- NotContaining = NotContaining->getParentLoop()) {
- NotContaining->removeBlockFromLoop(NewPreheader);
- for (auto *BB : L.blocks())
- NotContaining->removeBlockFromLoop(BB);
- }
+ removeBlockFromLoops(NewPreheader, OuterLoop, StillReachable);
+ for (auto *BB : L.blocks())
+ removeBlockFromLoops(BB, OuterLoop, StillReachable);
OuterLoop->removeChildLoop(&L);
if (StillReachable)
StillReachable->addChildLoop(&L);
More information about the llvm-commits
mailing list