mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
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
This commit is contained in:
parent
e0e734eea0
commit
ef704a23b4
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "llvm/Pass.h"
|
#include "llvm/Pass.h"
|
||||||
#include <set>
|
#include <set>
|
||||||
|
class Instruction;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
@ -95,6 +96,12 @@ public:
|
|||||||
return getDominators(B).count(A) != 0;
|
return getDominators(B).count(A) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// dominates - Return true if A dominates B. This performs the special checks
|
||||||
|
// neccesary if A and B are in the same basic block.
|
||||||
|
//
|
||||||
|
bool dominates(Instruction *A, Instruction *B) const;
|
||||||
|
|
||||||
|
|
||||||
// getAnalysisUsage - This obviously provides a dominator set, but it also
|
// getAnalysisUsage - This obviously provides a dominator set, but it also
|
||||||
// uses the UnifyFunctionExitNode pass if building post-dominators
|
// uses the UnifyFunctionExitNode pass if building post-dominators
|
||||||
//
|
//
|
||||||
|
@ -31,6 +31,20 @@ bool DominatorSet::runOnFunction(Function *F) {
|
|||||||
return false;
|
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
|
// calcForwardDominatorSet - This method calculates the forward dominator sets
|
||||||
// for the specified function.
|
// for the specified function.
|
||||||
|
@ -31,6 +31,20 @@ bool DominatorSet::runOnFunction(Function *F) {
|
|||||||
return false;
|
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
|
// calcForwardDominatorSet - This method calculates the forward dominator sets
|
||||||
// for the specified function.
|
// for the specified function.
|
||||||
|
Loading…
Reference in New Issue
Block a user