Add dominates/properlyDominates queries to IDom.
llvm-svn: 29456
This commit is contained in:
parent
17c67efe8a
commit
38e1a09d4d
|
@ -102,6 +102,16 @@ public:
|
|||
return get(BB);
|
||||
}
|
||||
|
||||
/// dominates - Return true if A dominates B.
|
||||
///
|
||||
bool dominates(BasicBlock *A, BasicBlock *B) const;
|
||||
|
||||
/// properlyDominates - Return true if A dominates B and A != B.
|
||||
///
|
||||
bool properlyDominates(BasicBlock *A, BasicBlock *B) const {
|
||||
return A != B || properlyDominates(A, B);
|
||||
}
|
||||
|
||||
/// get() - Synonym for operator[].
|
||||
///
|
||||
inline BasicBlock *get(BasicBlock *BB) const {
|
||||
|
|
|
@ -211,6 +211,17 @@ bool ImmediateDominators::runOnFunction(Function &F) {
|
|||
return false;
|
||||
}
|
||||
|
||||
/// dominates - Return true if A dominates B.
|
||||
///
|
||||
bool ImmediateDominatorsBase::dominates(BasicBlock *A, BasicBlock *B) const {
|
||||
assert(A && B && "Null pointers?");
|
||||
|
||||
// Walk up the dominator tree from B to determine if A dom B.
|
||||
while (A != B && B)
|
||||
B = get(B);
|
||||
return A == B;
|
||||
}
|
||||
|
||||
void ImmediateDominatorsBase::print(std::ostream &o, const Module* ) const {
|
||||
Function *F = getRoots()[0]->getParent();
|
||||
for (Function::iterator I = F->begin(), E = F->end(); I != E; ++I) {
|
||||
|
|
Loading…
Reference in New Issue