Check A dominates B and vise versa first while searching for nearest
authorDevang Patel <dpatel@apple.com>
Tue, 12 Jun 2007 17:17:57 +0000 (17:17 +0000)
committerDevang Patel <dpatel@apple.com>
Tue, 12 Jun 2007 17:17:57 +0000 (17:17 +0000)
common dominator.

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

lib/VMCore/Dominators.cpp

index 4d125fb02238df110d5abe72696ecd68a942ad7a..35b2bbfc224bec8cf3932d2fc3178bba9f173380 100644 (file)
@@ -387,12 +387,12 @@ BasicBlock *DominatorTreeBase::findNearestCommonDominator(BasicBlock *A,
 
   DomTreeNode *NodeB = getNode(B);
 
-  // If B immediately dominates A then B is nearest common dominator.
-  if (NodeA->getIDom() == NodeB)
+  // If B dominates A then B is nearest common dominator.
+  if (dominates(B,A))
     return B;
 
-  // If A immediately dominates B then A is nearest common dominator.
-  if (NodeB->getIDom() == NodeA) 
+  // If A dominates B then A is nearest common dominator.
+  if (dominates(A,B))
     return A;
 
   // Collect NodeA dominators set.
@@ -404,10 +404,6 @@ BasicBlock *DominatorTreeBase::findNearestCommonDominator(BasicBlock *A,
     IDomA = IDomA->getIDom();
   }
 
-  // If B dominates A then B is nearest common dominator.
-  if (NodeADoms.count(NodeB) != 0)
-    return B;
-
   // Walk NodeB immediate dominators chain and find common dominator node.
   DomTreeNode *IDomB = NodeB->getIDom();
   while(IDomB) {