Fix a non-deterministic loop in llvm::MergeBlockIntoPredecessor.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 11 Jan 2011 22:54:38 +0000 (22:54 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 11 Jan 2011 22:54:38 +0000 (22:54 +0000)
DT->changeImmediateDominator() trivially ignores identity updates, so there is
really no need for the uniqueing provided by SmallPtrSet.

I expect this to fix PR8954.

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

lib/Transforms/Utils/BasicBlockUtils.cpp

index e71e84feac41fd92af2d881176c395e8a6ed0631..c5b9707049470e9749f8b835bf5394b99c87a853 100644 (file)
@@ -169,8 +169,8 @@ bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, Pass *P) {
     if (DominatorTree *DT = P->getAnalysisIfAvailable<DominatorTree>()) {
       if (DomTreeNode *DTN = DT->getNode(BB)) {
         DomTreeNode *PredDTN = DT->getNode(PredBB);
-        SmallPtrSet<DomTreeNode*, 8> Children(DTN->begin(), DTN->end());
-        for (SmallPtrSet<DomTreeNode*, 8>::iterator DI = Children.begin(),
+        SmallVector<DomTreeNode*, 8> Children(DTN->begin(), DTN->end());
+        for (SmallVector<DomTreeNode*, 8>::iterator DI = Children.begin(),
              DE = Children.end(); DI != DE; ++DI)
           DT->changeImmediateDominator(*DI, PredDTN);