aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-08-01 22:24:47 +0000
committerChris Lattner <sabre@nondot.org>2006-08-01 22:24:47 +0000
commit6aba48338f67f08637b05f38005059f27aaf69bf (patch)
tree6ada6ce61c73e263987b2c55e45693595b59faa7
parent9373beba6010dd34316a801c3a9b37ab9e048031 (diff)
Add dominates/properlyDominates queries to IDom.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29456 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Analysis/Dominators.h10
-rw-r--r--lib/VMCore/Dominators.cpp11
2 files changed, 21 insertions, 0 deletions
diff --git a/include/llvm/Analysis/Dominators.h b/include/llvm/Analysis/Dominators.h
index 31b8562f2c..085225505e 100644
--- a/include/llvm/Analysis/Dominators.h
+++ b/include/llvm/Analysis/Dominators.h
@@ -101,7 +101,17 @@ public:
inline BasicBlock *operator[](BasicBlock *BB) const {
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 {
diff --git a/lib/VMCore/Dominators.cpp b/lib/VMCore/Dominators.cpp
index 35c847f7d6..f079acfdb4 100644
--- a/lib/VMCore/Dominators.cpp
+++ b/lib/VMCore/Dominators.cpp
@@ -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) {