From 4561475e0913db9dd36890284044190d6ab395de Mon Sep 17 00:00:00 2001 From: Max Kazantsev Date: Sun, 17 Feb 2019 18:21:51 +0000 Subject: [PATCH] [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 --- llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp index 4f1213d..eb8de34 100644 --- a/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp +++ b/llvm/lib/Transforms/Scalar/LoopSimplifyCFG.cpp @@ -94,15 +94,19 @@ static void removeBlockFromLoops(BasicBlock *BB, Loop *FirstLoop, /// contains the header of loop \p L. static Loop *getInnermostLoopFor(SmallPtrSetImpl &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 { -- 2.7.4