Remove workaround in PostDominators
authorTobias Grosser <grosser@fim.uni-passau.de>
Thu, 7 Jan 2010 23:50:25 +0000 (23:50 +0000)
committerTobias Grosser <grosser@fim.uni-passau.de>
Thu, 7 Jan 2010 23:50:25 +0000 (23:50 +0000)
Remove a FIXME and unify code that was necessary to work around broken
updateDFSNumbers().  Before updateDFSNumbers() did not work correctly for post
dominators.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92968 91177308-0d34-0410-b5e6-96231b3b80d8

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

index cca0d502b69c393a036b81e35e14cca5154f41b3..5ecb348144595a18534b84e0eb6bc5309d3b5bff 100644 (file)
@@ -347,15 +347,8 @@ void Calculate(DominatorTreeBase<typename GraphTraits<NodeT>::NodeType>& DT,
   DT.IDoms.clear();
   DT.Info.clear();
   std::vector<typename GraphT::NodeType*>().swap(DT.Vertex);
-  
-  // FIXME: This does not work on PostDomTrees.  It seems likely that this is
-  // due to an error in the algorithm for post-dominators.  This really should
-  // be investigated and fixed at some point.
-  // DT.updateDFSNumbers();
-
-  // Start out with the DFS numbers being invalid.  Let them be computed if
-  // demanded.
-  DT.DFSInfoValid = false;
+
+  DT.updateDFSNumbers();
 }
 
 }
index 7ac474aff3470af2a52aa05e30dd1d1d807acbbe..b70b23c01f464dbf404ea37f597d9442995fcd88 100644 (file)
@@ -652,21 +652,17 @@ public:
   /// recalculate - compute a dominator tree for the given function
   template<class FT>
   void recalculate(FT& F) {
-    if (!this->IsPostDominators) {
-      reset();
+    reset();
+    this->Vertex.push_back(0);
 
-      // Initialize roots
+    if (!this->IsPostDominators) {
+      // Initialize root
       this->Roots.push_back(&F.front());
       this->IDoms[&F.front()] = 0;
       this->DomTreeNodes[&F.front()] = 0;
-      this->Vertex.push_back(0);
 
       Calculate<FT, NodeT*>(*this, F);
-
-      updateDFSNumbers();
     } else {
-      reset();     // Reset from the last time we were run...
-
       // Initialize the roots list
       for (typename FT::iterator I = F.begin(), E = F.end(); I != E; ++I) {
         if (std::distance(GraphTraits<FT*>::child_begin(I),
@@ -678,8 +674,6 @@ public:
         this->DomTreeNodes[I] = 0;
       }
 
-      this->Vertex.push_back(0);
-
       Calculate<FT, Inverse<NodeT*> >(*this, F);
     }
   }