forked from OSchip/llvm-project
[NFC] Teach getInnermostLoopFor walk up the loop trees
This should be NFC in current use case of this method, but it will help to use it for solving more compex tasks in follow-up patches. llvm-svn: 354227
This commit is contained in:
parent
f62aeda58d
commit
4561475e09
|
@ -94,15 +94,19 @@ static void removeBlockFromLoops(BasicBlock *BB, Loop *FirstLoop,
|
|||
/// contains the header of loop \p L.
|
||||
static Loop *getInnermostLoopFor(SmallPtrSetImpl<BasicBlock *> &BBs,
|
||||
Loop &L, LoopInfo &LI) {
|
||||
Loop *StillReachable = nullptr;
|
||||
Loop *Innermost = nullptr;
|
||||
for (BasicBlock *BB : BBs) {
|
||||
Loop *BBL = LI.getLoopFor(BB);
|
||||
if (BBL && BBL->contains(L.getHeader()))
|
||||
if (!StillReachable ||
|
||||
BBL->getLoopDepth() > StillReachable->getLoopDepth())
|
||||
StillReachable = BBL;
|
||||
while (BBL && !BBL->contains(L.getHeader()))
|
||||
BBL = BBL->getParentLoop();
|
||||
if (BBL == &L)
|
||||
BBL = BBL->getParentLoop();
|
||||
if (!BBL)
|
||||
continue;
|
||||
if (!Innermost || BBL->getLoopDepth() > Innermost->getLoopDepth())
|
||||
Innermost = BBL;
|
||||
}
|
||||
return StillReachable;
|
||||
return Innermost;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
Loading…
Reference in New Issue