Make it possible for DomTreeBase to be constructed from MachineFunction's as well...
authorOwen Anderson <resistor@mac.com>
Thu, 25 Oct 2007 00:16:57 +0000 (00:16 +0000)
committerOwen Anderson <resistor@mac.com>
Thu, 25 Oct 2007 00:16:57 +0000 (00:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43321 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/DominatorInternals.h
include/llvm/Analysis/Dominators.h

index 3486b77d77b67cdbcb3269a81743df113fc9cf4e..c3f81e66498bc758109ea7d4277637a571f0a8bb 100644 (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;
index 7e7f1a70a3c467a56863c8d782e4c3e7b56088cb..40c733d815e2493591d1c0b4618da3314c23ae8b 100644 (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);
     }
   }
 };