Make it possible for DomTreeBase to be constructed from MachineFunction's as well as just Function's.

llvm-svn: 43321
This commit is contained in:
Owen Anderson 2007-10-25 00:16:57 +00:00
parent 3df412a6ea
commit 00974dce68
2 changed files with 15 additions and 11 deletions

View File

@ -216,8 +216,11 @@ void Link(DominatorTreeBase<typename GraphT::NodeType>& DT,
#endif
}
template<class NodeT, class GraphT>
void Calculate(DominatorTreeBase<typename GraphT::NodeType>& DT, Function& F) {
template<class FuncT, class NodeT>
void Calculate(DominatorTreeBase<typename GraphTraits<NodeT>::NodeType>& DT,
FuncT& F) {
typedef GraphTraits<NodeT> GraphT;
// Step #1: Number blocks in depth-first order and initialize variables used
// in later stages of the algorithm.
unsigned N = 0;

View File

@ -162,9 +162,9 @@ typedef DomTreeNodeBase<MachineBasicBlock> MachineDomTreeNode;
/// DominatorTree - Calculate the immediate dominator tree for a function.
///
template<class N, class GraphT>
void Calculate(DominatorTreeBase<typename GraphT::NodeType>& DT,
Function& F);
template<class FuncT, class N>
void Calculate(DominatorTreeBase<typename GraphTraits<N>::NodeType>& DT,
FuncT& F);
template<class NodeT>
class DominatorTreeBase : public DominatorBase<NodeT> {
@ -545,9 +545,9 @@ protected:
typename GraphT::NodeType* V,
unsigned N);
template<class N, class GraphT>
friend void Calculate(DominatorTreeBase<typename GraphT::NodeType>& DT,
Function& F);
template<class FuncT, class N>
friend void Calculate(DominatorTreeBase<typename GraphTraits<N>::NodeType>& DT,
FuncT& F);
/// updateDFSNumbers - Assign In and Out numbers to the nodes while walking
/// dominator tree in dfs order.
@ -609,7 +609,8 @@ protected:
public:
/// recalculate - compute a dominator tree for the given function
void recalculate(Function& F) {
template<class FT>
void recalculate(FT& F) {
if (!this->IsPostDominators) {
reset();
@ -619,7 +620,7 @@ public:
this->DomTreeNodes[&F.getEntryBlock()] = 0;
this->Vertex.push_back(0);
Calculate<NodeT*, GraphTraits<NodeT*> >(*this, F);
Calculate<FT, NodeT*>(*this, F);
updateDFSNumbers();
} else {
@ -641,7 +642,7 @@ public:
this->Vertex.push_back(0);
Calculate<Inverse<NodeT*>, GraphTraits<Inverse<NodeT*> > >(*this, F);
Calculate<FT, Inverse<NodeT*> >(*this, F);
}
}
};