Add dominates/properlyDominates queries to IDom.

llvm-svn: 29456
This commit is contained in:
Chris Lattner 2006-08-01 22:24:47 +00:00
parent 17c67efe8a
commit 38e1a09d4d
2 changed files with 21 additions and 0 deletions

View File

@ -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 {

View File

@ -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) {