mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-12 06:06:32 +00:00
Add instruction level dominates(A,B) interface.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37504 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
27af5c414b
commit
e029b2c369
@ -219,6 +219,10 @@ protected:
|
||||
return dominates(getNode(A), getNode(B));
|
||||
}
|
||||
|
||||
// dominates - Return true if A dominates B. This performs the
|
||||
// special checks necessary if A and B are in the same basic block.
|
||||
bool dominates(Instruction *A, Instruction *B);
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// API to update (Post)DominatorTree information based on modifications to
|
||||
// the CFG...
|
||||
|
@ -324,6 +324,29 @@ void DominatorTreeBase::updateDFSNumbers()
|
||||
DFSInfoValid = true;
|
||||
}
|
||||
|
||||
// dominates - Return true if A dominates B. THis performs the
|
||||
// special checks necessary if A and B are in the same basic block.
|
||||
bool DominatorTreeBase::dominates(Instruction *A, Instruction *B) {
|
||||
BasicBlock *BBA = A->getParent(), *BBB = B->getParent();
|
||||
if (BBA != BBB) return dominates(BBA, BBB);
|
||||
|
||||
// It is not possible to determine dominance between two PHI nodes
|
||||
// based on their ordering.
|
||||
if (isa<PHINode>(A) && isa<PHINode>(B))
|
||||
return false;
|
||||
|
||||
// Loop through the basic block until we find A or B.
|
||||
BasicBlock::iterator I = BBA->begin();
|
||||
for (; &*I != A && &*I != B; ++I) /*empty*/;
|
||||
|
||||
if(!IsPostDominators) {
|
||||
// A dominates B if it is found first in the basic block.
|
||||
return &*I == A;
|
||||
} else {
|
||||
// A post-dominates B if B is found first in the basic block.
|
||||
return &*I == B;
|
||||
}
|
||||
}
|
||||
|
||||
// DominatorTreeBase::reset - Free all of the tree node memory.
|
||||
//
|
||||
|
Loading…
Reference in New Issue
Block a user