Use the getUniquePredecessor() utility function, instead of doing

what it does manually.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111248 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2010-08-17 17:07:02 +00:00
parent eb97677764
commit 1c034dcbbc

View File

@ -97,23 +97,13 @@ bool llvm::DeleteDeadPHIs(BasicBlock *BB) {
/// MergeBlockIntoPredecessor - Attempts to merge a block into its predecessor,
/// if possible. The return value indicates success or failure.
bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, Pass *P) {
pred_iterator PI(pred_begin(BB)), PE(pred_end(BB));
// Can't merge the entry block. Don't merge away blocks who have their
// address taken: this is a bug if the predecessor block is the entry node
// (because we'd end up taking the address of the entry) and undesirable in
// any case.
if (pred_begin(BB) == pred_end(BB) ||
BB->hasAddressTaken()) return false;
// Don't merge away blocks who have their address taken.
if (BB->hasAddressTaken()) return false;
BasicBlock *PredBB = *PI++;
for (; PI != PE; ++PI) // Search all predecessors, see if they are all same
if (*PI != PredBB) {
PredBB = 0; // There are multiple different predecessors...
break;
}
// Can't merge if there are multiple predecessors.
// Can't merge if there are multiple predecessors, or no predecessors.
BasicBlock *PredBB = BB->getUniquePredecessor();
if (!PredBB) return false;
// Don't break self-loops.
if (PredBB == BB) return false;
// Don't break invokes.