Switch DomTreeNode::assignDFSNumber from using a std::set to using
authorChris Lattner <sabre@nondot.org>
Sun, 5 Aug 2007 00:10:08 +0000 (00:10 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 5 Aug 2007 00:10:08 +0000 (00:10 +0000)
a smallptrset.  This speeds up domtree by about 15% and postdomtree by 20%.

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

lib/VMCore/Dominators.cpp

index bb780c505d7658747937eb30baa361dbfb198b71..6231eb8e469d6d3e397f8c1249a79bb3c6751170 100644 (file)
@@ -496,10 +496,10 @@ BasicBlock *DominatorTreeBase::findNearestCommonDominator(BasicBlock *A,
 /// in dfs order.
 void DomTreeNode::assignDFSNumber(int num) {
   std::vector<DomTreeNode *>  workStack;
-  std::set<DomTreeNode *> visitedNodes;
+  SmallPtrSet<DomTreeNode *, 32> Visited;
   
   workStack.push_back(this);
-  visitedNodes.insert(this);
+  Visited.insert(this);
   this->DFSNumIn = num++;
   
   while (!workStack.empty()) {
@@ -509,12 +509,12 @@ void DomTreeNode::assignDFSNumber(int num) {
     for (std::vector<DomTreeNode*>::iterator DI = Node->begin(),
            E = Node->end(); DI != E && !visitChild; ++DI) {
       DomTreeNode *Child = *DI;
-      if (visitedNodes.count(Child) == 0) {
-        visitChild = true;
-        Child->DFSNumIn = num++;
-        workStack.push_back(Child);
-        visitedNodes.insert(Child);
-      }
+      if (!Visited.insert(Child))
+        continue;
+      
+      visitChild = true;
+      Child->DFSNumIn = num++;
+      workStack.push_back(Child);
     }
     if (!visitChild) {
       // If we reach here means all children are visited