forked from OSchip/llvm-project
[NFC] Factor out a function for future reuse
llvm-svn: 354218
This commit is contained in:
parent
d37afc92aa
commit
0f943269a0
|
@ -90,6 +90,20 @@ static void removeBlockFromLoops(BasicBlock *BB, Loop *FirstLoop,
|
|||
Current->removeBlockFromLoop(BB);
|
||||
}
|
||||
|
||||
/// Find innermost loop that is reachable from \p BBs and contains loop \p L.
|
||||
static Loop *getInnermostSuccessorLoop(SmallPtrSetImpl<BasicBlock *> &BBs,
|
||||
Loop &L, LoopInfo &LI) {
|
||||
Loop *StillReachable = nullptr;
|
||||
for (BasicBlock *BB : BBs) {
|
||||
Loop *BBL = LI.getLoopFor(BB);
|
||||
if (BBL && BBL->contains(L.getHeader()))
|
||||
if (!StillReachable ||
|
||||
BBL->getLoopDepth() > StillReachable->getLoopDepth())
|
||||
StillReachable = BBL;
|
||||
}
|
||||
return StillReachable;
|
||||
}
|
||||
|
||||
namespace {
|
||||
/// Helper class that can turn branches and switches with constant conditions
|
||||
/// into unconditional branches.
|
||||
|
@ -369,14 +383,7 @@ private:
|
|||
// the current loop. We need to fix loop info accordingly. For this, we
|
||||
// find the most nested loop that still contains L and remove L from all
|
||||
// loops that are inside of it.
|
||||
Loop *StillReachable = nullptr;
|
||||
for (BasicBlock *BB : LiveExitBlocks) {
|
||||
Loop *BBL = LI.getLoopFor(BB);
|
||||
if (BBL && BBL->contains(L.getHeader()))
|
||||
if (!StillReachable ||
|
||||
BBL->getLoopDepth() > StillReachable->getLoopDepth())
|
||||
StillReachable = BBL;
|
||||
}
|
||||
Loop *StillReachable = getInnermostSuccessorLoop(LiveExitBlocks, L, LI);
|
||||
|
||||
// Okay, our loop is no longer in the outer loop (and maybe not in some of
|
||||
// its parents as well). Make the fixup.
|
||||
|
|
Loading…
Reference in New Issue