Factor some code from the DomTree and PostDomTree calculate methods up into 
each one's runOnFunction method.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42563 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Analysis/PostDominatorCalculation.h b/lib/Analysis/PostDominatorCalculation.h
index 5aa692e..724ff79 100644
--- a/lib/Analysis/PostDominatorCalculation.h
+++ b/lib/Analysis/PostDominatorCalculation.h
@@ -19,24 +19,6 @@
 namespace llvm {
 
 void PDTcalculate(PostDominatorTree& PDT, Function &F) {
-  // Step #0: Scan the function looking for the root nodes of the post-dominance
-  // relationships.  These blocks, which have no successors, end with return and
-  // unwind instructions.
-  for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) {
-    TerminatorInst *Insn = I->getTerminator();
-    if (Insn->getNumSuccessors() == 0) {
-      // Unreachable block is not a root node.
-      if (!isa<UnreachableInst>(Insn))
-        PDT.Roots.push_back(I);
-    }
-    
-    // Prepopulate maps so that we don't get iterator invalidation issues later.
-    PDT.IDoms[I] = 0;
-    PDT.DomTreeNodes[I] = 0;
-  }
-  
-  PDT.Vertex.push_back(0);
-  
   // Step #1: Number blocks in depth-first order and initialize variables used
   // in later stages of the algorithm.
   unsigned N = 0;
diff --git a/lib/Analysis/PostDominators.cpp b/lib/Analysis/PostDominators.cpp
index cd29749..0ca7388 100644
--- a/lib/Analysis/PostDominators.cpp
+++ b/lib/Analysis/PostDominators.cpp
@@ -28,6 +28,29 @@
 static RegisterPass<PostDominatorTree>
 F("postdomtree", "Post-Dominator Tree Construction", true);
 
+bool PostDominatorTree::runOnFunction(Function &F) {
+  reset();     // Reset from the last time we were run...
+    
+  // Initialize the roots list
+  for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) {
+    TerminatorInst *Insn = I->getTerminator();
+    if (Insn->getNumSuccessors() == 0) {
+      // Unreachable block is not a root node.
+      if (!isa<UnreachableInst>(Insn))
+        Roots.push_back(I);
+    }
+    
+    // Prepopulate maps so that we don't get iterator invalidation issues later.
+    IDoms[I] = 0;
+    DomTreeNodes[I] = 0;
+  }
+  
+  Vertex.push_back(0);
+    
+  PDTcalculate(*this, F);
+  return false;
+}
+
 //===----------------------------------------------------------------------===//
 //  PostDominanceFrontier Implementation
 //===----------------------------------------------------------------------===//