[llvm-commits] [llvm] r158862 - /llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h

Andrew Trick atrick at apple.com
Wed Jun 20 15:18:33 PDT 2012


Author: atrick
Date: Wed Jun 20 17:18:33 2012
New Revision: 158862

URL: http://llvm.org/viewvc/llvm-project?rev=158862&view=rev
Log:
Restructure PopulateLoopsDFS::insertIntoLoop.

As Nadav pointed out the first implementation was obscure.

Modified:
    llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h

Modified: llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h?rev=158862&r1=158861&r2=158862&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h (original)
+++ llvm/trunk/include/llvm/Analysis/LoopInfoImpl.h Wed Jun 20 17:18:33 2012
@@ -618,7 +618,7 @@
   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 @@
       pushBlock(BB);
     }
     // Visit the top of the stack in postorder and backtrack.
-    reverseInsertIntoLoop(dfsSource());
+    insertIntoLoop(dfsSource());
     DFSStack.pop_back();
   }
 }
@@ -656,14 +656,11 @@
 /// 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<class BlockT, class LoopT>
-void PopulateLoopsDFS<BlockT, LoopT>::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<BlockT, LoopT>::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 @@
                  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





More information about the llvm-commits mailing list