aboutsummaryrefslogtreecommitdiff
path: root/lib/Analysis/PostDominators.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-05-13 22:03:16 +0000
committerChris Lattner <sabre@nondot.org>2002-05-13 22:03:16 +0000
commitef704a23b4c3cadf11b093fa628cafa38fa05ad5 (patch)
tree0d5f7527a80ce17ea92d35840777189dbd478dc4 /lib/Analysis/PostDominators.cpp
parente0e734eea052a4e8372e6f430ef41149128ba0a6 (diff)
Add method to check to see if two _Instructions_ dominate each other
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2616 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/PostDominators.cpp')
-rw-r--r--lib/Analysis/PostDominators.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/Analysis/PostDominators.cpp b/lib/Analysis/PostDominators.cpp
index e4eb2c1119..ca0b64a064 100644
--- a/lib/Analysis/PostDominators.cpp
+++ b/lib/Analysis/PostDominators.cpp
@@ -31,6 +31,20 @@ bool DominatorSet::runOnFunction(Function *F) {
return false;
}
+// dominates - Return true if A dominates B. This performs the special checks
+// neccesary if A and B are in the same basic block.
+//
+bool DominatorSet::dominates(Instruction *A, Instruction *B) const {
+ BasicBlock *BBA = A->getParent(), *BBB = B->getParent();
+ if (BBA != BBB) return dominates(BBA, BBB);
+
+ // Loop through the basic block until we find A or B.
+ BasicBlock::iterator I = BBA->begin();
+ for (; *I != A && *I != B; ++I) /*empty*/;
+
+ // A dominates B if it is found first in the basic block...
+ return *I == A;
+}
// calcForwardDominatorSet - This method calculates the forward dominator sets
// for the specified function.