mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-22 10:29:35 +00:00
introduce BasicBlock::getUniquePredecessor()
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60872 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e1d44b59ee
commit
87f1e7796d
@ -134,6 +134,16 @@ public:
|
||||
return const_cast<BasicBlock*>(this)->getSinglePredecessor();
|
||||
}
|
||||
|
||||
/// getUniquePredecessor - If this basic block has a unique predecessor block,
|
||||
/// return the block, otherwise return a null pointer.
|
||||
/// Note that unique predecessor doesn't mean single edge, there can be
|
||||
/// multiple edges from the unique predecessor to this block (for example in
|
||||
/// case of a switch statement with multiple cases having same destination).
|
||||
BasicBlock *getUniquePredecessor();
|
||||
const BasicBlock *getUniquePredecessor() const {
|
||||
return const_cast<BasicBlock*>(this)->getUniquePredecessor();
|
||||
}
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
/// Instruction iterator methods
|
||||
///
|
||||
|
@ -169,6 +169,25 @@ BasicBlock *BasicBlock::getSinglePredecessor() {
|
||||
return (PI == E) ? ThePred : 0 /*multiple preds*/;
|
||||
}
|
||||
|
||||
/// getUniquePredecessor - If this basic block has a unique predecessor block,
|
||||
/// return the block, otherwise return a null pointer.
|
||||
/// Note that unique predecessor doesn't mean single edge, there can be
|
||||
/// multiple edges from the unique predecessor to this block (for example in
|
||||
/// case of a switch statement with multiple cases having same destination).
|
||||
BasicBlock *BasicBlock::getUniquePredecessor() {
|
||||
pred_iterator PI = pred_begin(this), E = pred_end(this);
|
||||
if (PI == E) return 0; // No preds.
|
||||
BasicBlock *PredBB = *PI;
|
||||
++PI;
|
||||
for (;PI != E; ++PI) {
|
||||
if (*PI != PredBB)
|
||||
return 0;
|
||||
// same predecessor appears multiple times in predecessor list,
|
||||
// this is ok
|
||||
}
|
||||
return PredBB;
|
||||
}
|
||||
|
||||
/// removePredecessor - This method is used to notify a BasicBlock that the
|
||||
/// specified Predecessor of the block is no longer able to reach it. This is
|
||||
/// actually not used to update the Predecessor list, but is actually used to
|
||||
|
Loading…
Reference in New Issue
Block a user