[llvm-commits] [llvm] r123073 - /llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp

Chris Lattner sabre at nondot.org
Sat Jan 8 10:55:50 PST 2011


Author: lattner
Date: Sat Jan  8 12:55:50 2011
New Revision: 123073

URL: http://llvm.org/viewvc/llvm-project?rev=123073&view=rev
Log:
inline preserveCanonicalLoopForm now that it is simple.

Modified:
    llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp?rev=123073&r1=123072&r2=123073&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp Sat Jan  8 12:55:50 2011
@@ -38,10 +38,6 @@
       initializeLoopRotatePass(*PassRegistry::getPassRegistry());
     }
 
-    // Rotate Loop L as many times as possible. Return true if
-    // loop is rotated at least once.
-    bool runOnLoop(Loop *L, LPPassManager &LPM);
-
     // LCSSA form makes instruction renaming easier.
     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
       AU.addPreserved<DominatorTree>();
@@ -54,19 +50,9 @@
       AU.addPreserved<ScalarEvolution>();
     }
 
-    // Helper functions
-
-    /// Do actual work
+    bool runOnLoop(Loop *L, LPPassManager &LPM);
     bool rotateLoop(Loop *L);
     
-    /// After loop rotation, loop pre-header has multiple sucessors.
-    /// Insert one forwarding basic block to ensure that loop pre-header
-    /// has only one successor.
-    void preserveCanonicalLoopForm(Loop *L, BasicBlock *OrigHeader,
-                                   BasicBlock *OrigPreHeader,
-                                   BasicBlock *OrigLatch, BasicBlock *NewHeader,
-                                   BasicBlock *Exit);
-
   private:
     LoopInfo *LI;
   };
@@ -295,27 +281,12 @@
   // PHI nodes, which are now trivial.
   FoldSingleEntryPHINodes(OrigHeader);
 
-  // TODO: We could just go ahead and merge OrigHeader into its predecessor
-  // at this point, if we don't mind updating dominator info.
-
-  // Establish a new preheader, update dominators, etc.
-  preserveCanonicalLoopForm(L, OrigHeader, OrigPreHeader, OrigLatch,
-                            NewHeader, Exit);
-
-  ++NumRotated;
-  return true;
-}
-
-
-/// Update LoopInfo, DominatorTree, and DomFrontiers to reflect the CFG change
-/// we just made.  Then split edges as necessary to preserve LoopSimplify form.
-void LoopRotate::preserveCanonicalLoopForm(Loop *L, BasicBlock *OrigHeader,
-                                           BasicBlock *OrigPreHeader,
-                                           BasicBlock *OrigLatch,
-                                           BasicBlock *NewHeader,
-                                           BasicBlock *Exit) {
+  
+  
+  // Update DominatorTree to reflect the CFG change we just made.  Then split
+  // edges as necessary to preserve LoopSimplify form.
   assert(L->getHeader() == NewHeader && "Latch block is our new header");
-
+  
   if (DominatorTree *DT = getAnalysisIfAvailable<DominatorTree>()) {
     // Since OrigPreheader now has the conditional branch to Exit block, it is
     // the dominator of Exit.
@@ -331,13 +302,20 @@
   BasicBlock *NewPH = SplitCriticalEdge(OrigPreHeader, NewHeader, this);
   NewPH->setName(NewHeader->getName() + ".lr.ph");
   
-  // Preserve canonical loop form, which means Exit block should have only one
+  // Preserve canonical loop form, which means that 'Exit' should have only one
   // predecessor.
   SplitCriticalEdge(L->getLoopLatch(), Exit, this);
-
-  assert(NewHeader && L->getHeader() == NewHeader &&
-         "Invalid loop header after loop rotation");
+  
   assert(L->getLoopPreheader() == NewPH &&
          "Invalid loop preheader after loop rotation");
   assert(L->getLoopLatch() && "Invalid loop latch after loop rotation");
+
+  
+  // TODO: We could just go ahead and merge OrigHeader into its predecessor
+  // at this point, if we don't mind updating dominator info.
+  
+  ++NumRotated;
+  return true;
 }
+
+





More information about the llvm-commits mailing list