Changes in directory llvm/lib/VMCore:
Dominators.cpp updated: 1.111 -> 1.112 --- Log message: Check immediate dominators first while searching for nearset common dominator. Fix 80 col violations. --- Diffs of the changes: (+18 -6) Dominators.cpp | 24 ++++++++++++++++++------ 1 files changed, 18 insertions(+), 6 deletions(-) Index: llvm/lib/VMCore/Dominators.cpp diff -u llvm/lib/VMCore/Dominators.cpp:1.111 llvm/lib/VMCore/Dominators.cpp:1.112 --- llvm/lib/VMCore/Dominators.cpp:1.111 Mon Jun 11 19:14:41 2007 +++ llvm/lib/VMCore/Dominators.cpp Mon Jun 11 19:35:38 2007 @@ -23,7 +23,6 @@ #include "llvm/Instructions.h" #include "llvm/Support/Streams.h" #include <algorithm> -#include <set> using namespace llvm; namespace llvm { @@ -363,7 +362,8 @@ // DominatorTreeBase::reset - Free all of the tree node memory. // void DominatorTreeBase::reset() { - for (DomTreeNodeMapType::iterator I = DomTreeNodes.begin(), E = DomTreeNodes.end(); I != E; ++I) + for (DomTreeNodeMapType::iterator I = DomTreeNodes.begin(), + E = DomTreeNodes.end(); I != E; ++I) delete I->second; DomTreeNodes.clear(); IDoms.clear(); @@ -374,10 +374,13 @@ /// findNearestCommonDominator - Find nearest common dominator basic block /// for basic block A and B. If there is no such block then return NULL. -BasicBlock *DominatorTreeBase::findNearestCommonDominator(BasicBlock *A, BasicBlock *B) { +BasicBlock *DominatorTreeBase::findNearestCommonDominator(BasicBlock *A, + BasicBlock *B) { - assert (!isPostDominator() && "This is not implemented for post dominators"); - assert (A->getParent() == B->getParent() && "Two blocks are not in same function"); + assert (!isPostDominator() + && "This is not implemented for post dominators"); + assert (A->getParent() == B->getParent() + && "Two blocks are not in same function"); // If either A or B is a entry block then it is nearest common dominator. BasicBlock &Entry = A->getParent()->getEntryBlock(); @@ -391,8 +394,17 @@ DomTreeNode *NodeB = getNode(B); + // If B immediately dominates A then B is nearest common dominator. + if (NodeA->getIDom() == NodeB) + return B; + + // If A immediately dominates B then A is nearest common dominator. + if (NodeB->getIDom() == NodeA) + return A; + // Collect NodeA dominators set. - std::set<DomTreeNode *> NodeADoms; + // SmallPtrSet<DomTreeNode*, 16> NodeADoms; + std::set<DomTreeNode*> NodeADoms; NodeADoms.insert(NodeA); DomTreeNode *IDomA = NodeA->getIDom(); while(IDomA) { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits