diff options
author | Nick Lewycky <nicholas@mxc.ca> | 2008-03-13 02:42:41 +0000 |
---|---|---|
committer | Nick Lewycky <nicholas@mxc.ca> | 2008-03-13 02:42:41 +0000 |
commit | fd87d6450d9e294fb06d6c1c51483d8449783efd (patch) | |
tree | 43b6c0f2250bc378f285078d15399ebeca8081bc /lib | |
parent | e6b934fb6968f76d57149896b887aac6c500dacd (diff) | |
download | external_llvm-fd87d6450d9e294fb06d6c1c51483d8449783efd.zip external_llvm-fd87d6450d9e294fb06d6c1c51483d8449783efd.tar.gz external_llvm-fd87d6450d9e294fb06d6c1c51483d8449783efd.tar.bz2 |
Update -mem2reg to use succ_iterator instead of iterating across TerminatorInst
successors. This makes it support nounwind.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48320 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Transforms/Utils/PromoteMemoryToRegister.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp index 7d08a7c..3d25dee 100644 --- a/lib/Transforms/Utils/PromoteMemoryToRegister.cpp +++ b/lib/Transforms/Utils/PromoteMemoryToRegister.cpp @@ -884,12 +884,10 @@ NextIteration: // operands so far. Remember this count. unsigned NewPHINumOperands = APN->getNumOperands(); - TerminatorInst *PredTerm = Pred->getTerminator(); unsigned NumEdges = 0; - for (unsigned i = 0, e = PredTerm->getNumSuccessors(); i != e; ++i) { - if (PredTerm->getSuccessor(i) == BB) + for (succ_iterator I = succ_begin(Pred), E = succ_end(Pred); I != E; ++I) + if (*I == BB) ++NumEdges; - } assert(NumEdges && "Must be at least one edge from Pred to BB!"); // Add entries for all the phis. @@ -952,18 +950,17 @@ NextIteration: } // 'Recurse' to our successors. - TerminatorInst *TI = BB->getTerminator(); - unsigned NumSuccs = TI->getNumSuccessors(); - if (NumSuccs == 0) return; - - // Add all-but-one successor to the worklist. - for (unsigned i = 0; i != NumSuccs-1; i++) - Worklist.push_back(RenamePassData(TI->getSuccessor(i), BB, IncomingVals)); - + succ_iterator I = succ_begin(BB), E = succ_end(BB); + if (I == E) return; + // Handle the last successor without using the worklist. This allows us to // handle unconditional branches directly, for example. + --E; + for (; I != E; ++I) + Worklist.push_back(RenamePassData(*I, BB, IncomingVals)); + Pred = BB; - BB = TI->getSuccessor(NumSuccs-1); + BB = *I; goto NextIteration; } |