diff options
Diffstat (limited to 'lib/Transforms/Utils/PromoteMemoryToRegister.cpp')
-rw-r--r-- | lib/Transforms/Utils/PromoteMemoryToRegister.cpp | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp index 4bfc4e041a..abfa28b752 100644 --- a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp +++ b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp @@ -193,6 +193,7 @@ bool PromoteMem2Reg::QueuePhiNode(BasicBlock *BB, unsigned AllocaNo) { void PromoteMem2Reg::RenamePass(BasicBlock *BB, BasicBlock *Pred, std::vector<Value*> &IncomingVals) { + // If this BB needs a PHI node, update the PHI node for each variable we need // PHI nodes for. std::map<BasicBlock*, std::vector<PHINode *> >::iterator @@ -220,8 +221,7 @@ void PromoteMem2Reg::RenamePass(BasicBlock *BB, BasicBlock *Pred, // mark as visited Visited.insert(BB); - BasicBlock::iterator II = BB->begin(); - while (1) { + for (BasicBlock::iterator II = BB->begin(); !isa<TerminatorInst>(II); ) { Instruction *I = II++; // get the instruction, increment iterator if (LoadInst *LI = dyn_cast<LoadInst>(I)) { @@ -246,16 +246,15 @@ void PromoteMem2Reg::RenamePass(BasicBlock *BB, BasicBlock *Pred, BB->getInstList().erase(SI); } } - - } else if (TerminatorInst *TI = dyn_cast<TerminatorInst>(I)) { - // Recurse across our successors - for (unsigned i = 0; i != TI->getNumSuccessors(); i++) { - std::vector<Value*> OutgoingVals(IncomingVals); - RenamePass(TI->getSuccessor(i), BB, OutgoingVals); - } - break; } } + + // Recurse to our successors + TerminatorInst *TI = BB->getTerminator(); + for (unsigned i = 0; i != TI->getNumSuccessors(); i++) { + std::vector<Value*> OutgoingVals(IncomingVals); + RenamePass(TI->getSuccessor(i), BB, OutgoingVals); + } } /// PromoteMemToReg - Promote the specified list of alloca instructions into |