mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-29 10:25:12 +00:00
Remove ImmediateDominator analysis. The same information can be obtained from DomTree. A lot of code for
constructing ImmediateDominator is now folded into DomTree construction. This is part of the ongoing work for PR217. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36063 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -18,26 +18,6 @@
|
||||
|
||||
namespace llvm {
|
||||
|
||||
//===-------------------------------------
|
||||
/// ImmediatePostDominators Class - Concrete subclass of ImmediateDominatorsBase
|
||||
/// that is used to compute a normal immediate dominator set.
|
||||
///
|
||||
struct ImmediatePostDominators : public ImmediateDominatorsBase {
|
||||
ImmediatePostDominators() : ImmediateDominatorsBase(false) {}
|
||||
|
||||
virtual bool runOnFunction(Function &F);
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
}
|
||||
|
||||
private:
|
||||
unsigned DFSPass(BasicBlock *V, InfoRec &VInfo, unsigned N);
|
||||
void Compress(BasicBlock *V, InfoRec &VInfo);
|
||||
BasicBlock *Eval(BasicBlock *v);
|
||||
void Link(BasicBlock *V, BasicBlock *W, InfoRec &WInfo);
|
||||
};
|
||||
|
||||
/// PostDominatorTree Class - Concrete subclass of DominatorTree that is used to
|
||||
/// compute the a post-dominator tree.
|
||||
///
|
||||
@@ -46,19 +26,25 @@ struct PostDominatorTree : public DominatorTreeBase {
|
||||
|
||||
virtual bool runOnFunction(Function &F) {
|
||||
reset(); // Reset from the last time we were run...
|
||||
ImmediatePostDominators &IPD = getAnalysis<ImmediatePostDominators>();
|
||||
Roots = IPD.getRoots();
|
||||
calculate(IPD);
|
||||
calculate(F);
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
AU.addRequired<ImmediatePostDominators>();
|
||||
}
|
||||
private:
|
||||
void calculate(const ImmediatePostDominators &IPD);
|
||||
void calculate(Function &F);
|
||||
Node *getNodeForBlock(BasicBlock *BB);
|
||||
unsigned DFSPass(BasicBlock *V, InfoRec &VInfo,unsigned N);
|
||||
void Compress(BasicBlock *V, InfoRec &VInfo);
|
||||
BasicBlock *Eval(BasicBlock *V);
|
||||
void Link(BasicBlock *V, BasicBlock *W, InfoRec &WInfo);
|
||||
|
||||
inline BasicBlock *getIDom(BasicBlock *BB) const {
|
||||
std::map<BasicBlock*, BasicBlock*>::const_iterator I = IDoms.find(BB);
|
||||
return I != IDoms.end() ? I->second : 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -69,18 +55,18 @@ struct PostETForest : public ETForestBase {
|
||||
|
||||
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
AU.addRequired<ImmediatePostDominators>();
|
||||
AU.addRequired<PostDominatorTree>();
|
||||
}
|
||||
|
||||
virtual bool runOnFunction(Function &F) {
|
||||
reset(); // Reset from the last time we were run...
|
||||
ImmediatePostDominators &ID = getAnalysis<ImmediatePostDominators>();
|
||||
Roots = ID.getRoots();
|
||||
calculate(ID);
|
||||
PostDominatorTree &DT = getAnalysis<PostDominatorTree>();
|
||||
Roots = DT.getRoots();
|
||||
calculate(DT);
|
||||
return false;
|
||||
}
|
||||
|
||||
void calculate(const ImmediatePostDominators &ID);
|
||||
void calculate(const PostDominatorTree &DT);
|
||||
ETNode *getNodeForBlock(BasicBlock *BB);
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user