diff options
| author | Owen Anderson <resistor@mac.com> | 2007-10-25 00:16:57 +0000 |
|---|---|---|
| committer | Owen Anderson <resistor@mac.com> | 2007-10-25 00:16:57 +0000 |
| commit | 00974dce680fd63ddb25fab1fee2812a7a935b5a (patch) | |
| tree | fdf37108ab21a1af195a822fb81e59869c3a62c7 | |
| parent | 3df412a6eac8dd99e15dd63e2394bb032744d796 (diff) | |
| download | bcm5719-llvm-00974dce680fd63ddb25fab1fee2812a7a935b5a.tar.gz bcm5719-llvm-00974dce680fd63ddb25fab1fee2812a7a935b5a.zip | |
Make it possible for DomTreeBase to be constructed from MachineFunction's as well as just Function's.
llvm-svn: 43321
| -rw-r--r-- | llvm/include/llvm/Analysis/DominatorInternals.h | 7 | ||||
| -rw-r--r-- | llvm/include/llvm/Analysis/Dominators.h | 19 |
2 files changed, 15 insertions, 11 deletions
diff --git a/llvm/include/llvm/Analysis/DominatorInternals.h b/llvm/include/llvm/Analysis/DominatorInternals.h index 3486b77d77b..c3f81e66498 100644 --- a/llvm/include/llvm/Analysis/DominatorInternals.h +++ b/llvm/include/llvm/Analysis/DominatorInternals.h @@ -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; diff --git a/llvm/include/llvm/Analysis/Dominators.h b/llvm/include/llvm/Analysis/Dominators.h index 7e7f1a70a3c..40c733d815e 100644 --- a/llvm/include/llvm/Analysis/Dominators.h +++ b/llvm/include/llvm/Analysis/Dominators.h @@ -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); } } }; |

