From b9598e41bc5187cfe8fb6345a90be27e6967958f Mon Sep 17 00:00:00 2001 From: Andrew Trick Date: Wed, 20 Jun 2012 22:18:33 +0000 Subject: Restructure PopulateLoopsDFS::insertIntoLoop. As Nadav pointed out the first implementation was obscure. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158862 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Analysis/LoopInfoImpl.h | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'include/llvm/Analysis/LoopInfoImpl.h') diff --git a/include/llvm/Analysis/LoopInfoImpl.h b/include/llvm/Analysis/LoopInfoImpl.h index e58654ab87..1be717cb71 100644 --- a/include/llvm/Analysis/LoopInfoImpl.h +++ b/include/llvm/Analysis/LoopInfoImpl.h @@ -618,7 +618,7 @@ public: void traverse(BlockT *EntryBlock); protected: - void reverseInsertIntoLoop(BlockT *Block); + void insertIntoLoop(BlockT *Block); BlockT *dfsSource() { return DFSStack.back().first; } SuccIterTy &dfsSucc() { return DFSStack.back().second; } @@ -647,7 +647,7 @@ void PopulateLoopsDFS::traverse(BlockT *EntryBlock) { pushBlock(BB); } // Visit the top of the stack in postorder and backtrack. - reverseInsertIntoLoop(dfsSource()); + insertIntoLoop(dfsSource()); DFSStack.pop_back(); } } @@ -656,14 +656,11 @@ void PopulateLoopsDFS::traverse(BlockT *EntryBlock) { /// subloop header, add the subloop to its parent in PostOrder, then reverse the /// Block and Subloop vectors of the now complete subloop to achieve RPO. template -void PopulateLoopsDFS::reverseInsertIntoLoop(BlockT *Block) { - for (LoopT *Subloop = LI->getLoopFor(Block); - Subloop; Subloop = Subloop->getParentLoop()) { - - if (Block != Subloop->getHeader()) { - Subloop->getBlocksVector().push_back(Block); - continue; - } +void PopulateLoopsDFS::insertIntoLoop(BlockT *Block) { + LoopT *Subloop = LI->getLoopFor(Block); + if (Subloop && Block == Subloop->getHeader()) { + // We reach this point once per subloop after processing all the blocks in + // the subloop. if (Subloop->getParentLoop()) Subloop->getParentLoop()->getSubLoopsVector().push_back(Subloop); else @@ -675,7 +672,11 @@ void PopulateLoopsDFS::reverseInsertIntoLoop(BlockT *Block) { Subloop->getBlocksVector().end()); std::reverse(Subloop->getSubLoopsVector().begin(), Subloop->getSubLoopsVector().end()); + + Subloop = Subloop->getParentLoop(); } + for (; Subloop; Subloop = Subloop->getParentLoop()) + Subloop->getBlocksVector().push_back(Block); } /// Analyze LoopInfo discovers loops during a postorder DominatorTree traversal -- cgit v1.2.3