Fix bug: Mem2Reg/2003-06-26-IterativePromote.ll
authorChris Lattner <sabre@nondot.org>
Wed, 25 Jun 2003 14:58:56 +0000 (14:58 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 25 Jun 2003 14:58:56 +0000 (14:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6901 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/Mem2Reg.cpp

index 6bd859a4037baa0ac9a3032aad96c1286b1bd917..b731ab1a4f7c025505ed1915278352b8e82ec811 100644 (file)
@@ -40,19 +40,26 @@ bool PromotePass::runOnFunction(Function &F) {
 
   BasicBlock &BB = F.getEntryNode();  // Get the entry node for the function
 
-  // Find allocas that are safe to promote, by looking at all instructions in
-  // the entry node
-  for (BasicBlock::iterator I = BB.begin(), E = --BB.end(); I != E; ++I)
-    if (AllocaInst *AI = dyn_cast<AllocaInst>(I))       // Is it an alloca?
-      if (isAllocaPromotable(AI, TD))
-        Allocas.push_back(AI);
-
-  if (!Allocas.empty()) {
+  bool Changed  = false;
+  
+  while (1) {
+    Allocas.clear();
+
+    // Find allocas that are safe to promote, by looking at all instructions in
+    // the entry node
+    for (BasicBlock::iterator I = BB.begin(), E = --BB.end(); I != E; ++I)
+      if (AllocaInst *AI = dyn_cast<AllocaInst>(I))       // Is it an alloca?
+        if (isAllocaPromotable(AI, TD))
+          Allocas.push_back(AI);
+
+    if (Allocas.empty()) break;
+
     PromoteMemToReg(Allocas, getAnalysis<DominanceFrontier>(), TD);
     NumPromoted += Allocas.size();
-    return true;
+    Changed = true;
   }
-  return false;
+
+  return Changed;
 }
 
 // createPromoteMemoryToRegister - Provide an entry point to create this pass.