[llvm-commits] [llvm] r42427 - in /llvm/trunk: include/llvm/Analysis/DominatorInternals.h include/llvm/Analysis/Dominators.h include/llvm/Analysis/PostDominators.h lib/Analysis/PostDominatorCalculation.h lib/Analysis/PostDominators.cpp lib/VMCore/DominatorInternals.cpp

Owen Anderson resistor at mac.com
Thu Sep 27 18:23:47 PDT 2007


Author: resistor
Date: Thu Sep 27 20:23:47 2007
New Revision: 42427

URL: http://llvm.org/viewvc/llvm-project?rev=42427&view=rev
Log:
Have PostDomTree use the newly templated DFSPass.

Modified:
    llvm/trunk/include/llvm/Analysis/DominatorInternals.h
    llvm/trunk/include/llvm/Analysis/Dominators.h
    llvm/trunk/include/llvm/Analysis/PostDominators.h
    llvm/trunk/lib/Analysis/PostDominatorCalculation.h
    llvm/trunk/lib/Analysis/PostDominators.cpp
    llvm/trunk/lib/VMCore/DominatorInternals.cpp

Modified: llvm/trunk/include/llvm/Analysis/DominatorInternals.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/DominatorInternals.h?rev=42427&r1=42426&r2=42427&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Analysis/DominatorInternals.h (original)
+++ llvm/trunk/include/llvm/Analysis/DominatorInternals.h Thu Sep 27 20:23:47 2007
@@ -21,7 +21,8 @@
 namespace llvm {
 
 template<class GraphT>
-unsigned DFSPass(DominatorTree& DT, typename GraphT::NodeType* V, unsigned N) {
+unsigned DFSPass(DominatorTreeBase& DT, typename GraphT::NodeType* V,
+                 unsigned N) {
   // This is more understandable as a recursive algorithm, but we can't use the
   // recursive algorithm due to stack depth issues.  Keep it here for
   // documentation purposes.

Modified: llvm/trunk/include/llvm/Analysis/Dominators.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/Dominators.h?rev=42427&r1=42426&r2=42427&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Analysis/Dominators.h (original)
+++ llvm/trunk/include/llvm/Analysis/Dominators.h Thu Sep 27 20:23:47 2007
@@ -280,6 +280,10 @@
   friend void Link(DominatorTreeBase& DT, BasicBlock *V,
                    BasicBlock *W, InfoRec &WInfo);
   
+  template<class GraphT> friend unsigned DFSPass(DominatorTreeBase& DT,
+                                                 typename GraphT::NodeType* V,
+                                                 unsigned N);
+  
   /// updateDFSNumbers - Assign In and Out numbers to the nodes while walking
   /// dominator tree in dfs order.
   void updateDFSNumbers();
@@ -319,9 +323,6 @@
 
 private:
   friend void DTcalculate(DominatorTree& DT, Function& F);
-  
-  template<class GraphT> friend
-  unsigned DFSPass(DominatorTree& DT, typename GraphT::NodeType* V, unsigned N);
 };
 
 //===-------------------------------------

Modified: llvm/trunk/include/llvm/Analysis/PostDominators.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/PostDominators.h?rev=42427&r1=42426&r2=42427&view=diff

==============================================================================
--- llvm/trunk/include/llvm/Analysis/PostDominators.h (original)
+++ llvm/trunk/include/llvm/Analysis/PostDominators.h Thu Sep 27 20:23:47 2007
@@ -37,10 +37,7 @@
     AU.setPreservesAll();
   }
 private:
-  unsigned DFSPass(BasicBlock *V, unsigned N);
   friend void PDTcalculate(PostDominatorTree& PDT, Function &F);
-  friend void PDTLink(PostDominatorTree& PDT,BasicBlock *V,
-                      BasicBlock *W, InfoRec &WInfo);
 };
 
 

Modified: llvm/trunk/lib/Analysis/PostDominatorCalculation.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/PostDominatorCalculation.h?rev=42427&r1=42426&r2=42427&view=diff

==============================================================================
--- llvm/trunk/lib/Analysis/PostDominatorCalculation.h (original)
+++ llvm/trunk/lib/Analysis/PostDominatorCalculation.h Thu Sep 27 20:23:47 2007
@@ -13,7 +13,9 @@
 #ifndef LLVM_ANALYSIS_POST_DOMINATOR_CALCULATION_H
 #define LLVM_ANALYSIS_POST_DOMINATOR_CALCULATION_H
 
+#include "llvm/Analysis/Dominators.h"
 #include "llvm/Analysis/PostDominators.h"
+#include "llvm/Analysis/DominatorInternals.h"
 
 namespace llvm {
 
@@ -40,7 +42,7 @@
   // in later stages of the algorithm.
   unsigned N = 0;
   for (unsigned i = 0, e = PDT.Roots.size(); i != e; ++i)
-    N = PDT.DFSPass(PDT.Roots[i], N);
+    N = DFSPass<GraphTraits<Inverse<BasicBlock*> > >(PDT, PDT.Roots[i], N);
   
   for (unsigned i = N; i >= 2; --i) {
     BasicBlock *W = PDT.Vertex[i];

Modified: llvm/trunk/lib/Analysis/PostDominators.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/PostDominators.cpp?rev=42427&r1=42426&r2=42427&view=diff

==============================================================================
--- llvm/trunk/lib/Analysis/PostDominators.cpp (original)
+++ llvm/trunk/lib/Analysis/PostDominators.cpp Thu Sep 27 20:23:47 2007
@@ -28,51 +28,6 @@
 static RegisterPass<PostDominatorTree>
 F("postdomtree", "Post-Dominator Tree Construction", true);
 
-unsigned PostDominatorTree::DFSPass(BasicBlock *V, unsigned N) {
-  std::vector<BasicBlock *> workStack;
-  SmallPtrSet<BasicBlock *, 32> Visited;
-  workStack.push_back(V);
-
-  do {
-    BasicBlock *currentBB = workStack.back();
-    InfoRec &CurVInfo = Info[currentBB];
-
-    // Visit each block only once.
-    if (Visited.insert(currentBB)) {
-      CurVInfo.Semi = ++N;
-      CurVInfo.Label = currentBB;
-      
-      Vertex.push_back(currentBB);  // Vertex[n] = current;
-      // Info[currentBB].Ancestor = 0;     
-      // Ancestor[n] = 0
-      // Child[currentBB] = 0;
-      CurVInfo.Size = 1;       // Size[currentBB] = 1
-    }
-
-    // Visit children
-    bool visitChild = false;
-    for (pred_iterator PI = pred_begin(currentBB), PE = pred_end(currentBB); 
-         PI != PE && !visitChild; ++PI) {
-      InfoRec &SuccVInfo = Info[*PI];
-      if (SuccVInfo.Semi == 0) {
-        SuccVInfo.Parent = currentBB;
-        if (!Visited.count(*PI)) {
-          workStack.push_back(*PI);   
-          visitChild = true;
-        }
-      }
-    }
-
-    // If all children are visited or if this block has no child then pop this
-    // block out of workStack.
-    if (!visitChild)
-      workStack.pop_back();
-
-  } while (!workStack.empty());
-
-  return N;
-}
-
 //===----------------------------------------------------------------------===//
 //  PostDominanceFrontier Implementation
 //===----------------------------------------------------------------------===//

Modified: llvm/trunk/lib/VMCore/DominatorInternals.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/DominatorInternals.cpp?rev=42427&r1=42426&r2=42427&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/DominatorInternals.cpp (original)
+++ llvm/trunk/lib/VMCore/DominatorInternals.cpp Thu Sep 27 20:23:47 2007
@@ -7,9 +7,6 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef LIB_LLVM_ANALYSIS_DOMINATOR_INTERNALS_H
-#define LIB_LLVM_ANALYSIS_DOMINATOR_INTERNALS_H
-
 #include "llvm/Analysis/Dominators.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/SmallPtrSet.h"
@@ -141,5 +138,3 @@
 }
 
 }
-
-#endif





More information about the llvm-commits mailing list