[llvm-commits] CVS: llvm/lib/Transforms/Scalar/LoopSimplify.cpp

Chris Lattner lattner at cs.uiuc.edu
Sun Apr 18 17:27:00 PDT 2004


Changes in directory llvm/lib/Transforms/Scalar:

LoopSimplify.cpp updated: 1.43 -> 1.44

---
Log message:

Correct rewriting of exit blocks after my last patch


---
Diffs of the changes:  (+8 -3)

Index: llvm/lib/Transforms/Scalar/LoopSimplify.cpp
diff -u llvm/lib/Transforms/Scalar/LoopSimplify.cpp:1.43 llvm/lib/Transforms/Scalar/LoopSimplify.cpp:1.44
--- llvm/lib/Transforms/Scalar/LoopSimplify.cpp:1.43	Sun Apr 18 17:14:10 2004
+++ llvm/lib/Transforms/Scalar/LoopSimplify.cpp	Sun Apr 18 17:27:10 2004
@@ -73,7 +73,7 @@
     bool ProcessLoop(Loop *L);
     BasicBlock *SplitBlockPredecessors(BasicBlock *BB, const char *Suffix,
                                        const std::vector<BasicBlock*> &Preds);
-    void RewriteLoopExitBlock(Loop *L, BasicBlock *Exit);
+    BasicBlock *RewriteLoopExitBlock(Loop *L, BasicBlock *Exit);
     void InsertPreheaderForLoop(Loop *L);
     Loop *SeparateNestedLoop(Loop *L);
     void InsertUniqueBackedgeBlock(Loop *L);
@@ -158,7 +158,11 @@
     for (pred_iterator PI = pred_begin(ExitBlock), PE = pred_end(ExitBlock);
          PI != PE; ++PI)
       if (!L->contains(*PI)) {
-        RewriteLoopExitBlock(L, ExitBlock);
+        BasicBlock *NewBB = RewriteLoopExitBlock(L, ExitBlock);
+        for (unsigned j = i; j != ExitBlocks.size(); ++j)
+          if (ExitBlocks[j] == ExitBlock)
+            ExitBlocks[j] = NewBB;
+
         NumInserted++;
         Changed = true;
         break;
@@ -387,7 +391,7 @@
 /// RewriteLoopExitBlock - Ensure that the loop preheader dominates all exit
 /// blocks.  This method is used to split exit blocks that have predecessors
 /// outside of the loop.
-void LoopSimplify::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) {
+BasicBlock *LoopSimplify::RewriteLoopExitBlock(Loop *L, BasicBlock *Exit) {
   DominatorSet &DS = getAnalysis<DominatorSet>();
   
   std::vector<BasicBlock*> LoopBlocks;
@@ -405,6 +409,7 @@
 
   // Update dominator information (set, immdom, domtree, and domfrontier)
   UpdateDomInfoForRevectoredPreds(NewBB, LoopBlocks);
+  return NewBB;
 }
 
 /// AddBlockAndPredsToSet - Add the specified block, and all of its





More information about the llvm-commits mailing list