diff options
| author | Chris Lattner <sabre@nondot.org> | 2010-12-13 05:10:48 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2010-12-13 05:10:48 +0000 |
| commit | 2e3832d9a0c3279084ba0e84a752169954d8fb32 (patch) | |
| tree | 06fafb447ea5a2f0f92904993994083add6e74e3 /llvm/lib/Transforms/Utils | |
| parent | bc9e6d9dbe8d9a1764a8aba59d2497cf4b56d16a (diff) | |
| download | bcm5719-llvm-2e3832d9a0c3279084ba0e84a752169954d8fb32.tar.gz bcm5719-llvm-2e3832d9a0c3279084ba0e84a752169954d8fb32.zip | |
move 'MergeBlocksIntoPredecessor' call earlier. Use
getSinglePredecessor to simplify code.
llvm-svn: 121683
Diffstat (limited to 'llvm/lib/Transforms/Utils')
| -rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 29 |
1 files changed, 9 insertions, 20 deletions
diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index 4e58e492b93..52ad1ee0704 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -1957,6 +1957,13 @@ bool SimplifyCFGOpt::run(BasicBlock *BB) { // Check for and eliminate duplicate PHI nodes in this block. Changed |= EliminateDuplicatePHINodes(BB); + // Merge basic blocks into their predecessor if there is only one distinct + // pred, and if there is only one distinct successor of the predecessor, and + // if there are no PHI nodes. + // + if (MergeBlockIntoPredecessor(BB)) + return true; + // If there is a trivial two-entry PHI node in this basic block, and we can // eliminate it, do so now. if (PHINode *PN = dyn_cast<PHINode>(BB->begin())) @@ -2309,33 +2316,15 @@ bool SimplifyCFGOpt::run(BasicBlock *BB) { } } - // Merge basic blocks into their predecessor if there is only one distinct - // pred, and if there is only one distinct successor of the predecessor, and - // if there are no PHI nodes. - // - if (MergeBlockIntoPredecessor(BB)) - return true; - // Otherwise, if this block only has a single predecessor, and if that block // is a conditional branch, see if we can hoist any code from this block up // into our predecessor. - pred_iterator PI(pred_begin(BB)), PE(pred_end(BB)); - BasicBlock *OnlyPred = 0; - for (; PI != PE; ++PI) { // Search all predecessors, see if they are all same - if (!OnlyPred) - OnlyPred = *PI; - else if (*PI != OnlyPred) { - OnlyPred = 0; // There are multiple different predecessors... - break; - } - } - - if (OnlyPred) { + if (BasicBlock *OnlyPred = BB->getSinglePredecessor()) { BranchInst *BI = dyn_cast<BranchInst>(OnlyPred->getTerminator()); if (BI && BI->isConditional()) { // Get the other block. BasicBlock *OtherBB = BI->getSuccessor(BI->getSuccessor(0) == BB); - PI = pred_begin(OtherBB); + pred_iterator PI = pred_begin(OtherBB); ++PI; if (PI == pred_end(OtherBB)) { |

