LoopIndexSplit can sometimes result in cases where a block in its own domfrontier.
authorOwen Anderson <resistor@mac.com>
Tue, 3 Jun 2008 18:29:48 +0000 (18:29 +0000)
committerOwen Anderson <resistor@mac.com>
Tue, 3 Jun 2008 18:29:48 +0000 (18:29 +0000)
Don't crash when we encounter one of these.

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

lib/Transforms/Utils/BreakCriticalEdges.cpp

index bc9fdfde88b33ae3a97ae56611f1367f9cf7c418..a821423d17f7d14194d1f8d57ec123f9131f3a93 100644 (file)
@@ -235,9 +235,12 @@ bool llvm::SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P,
       DominanceFrontier::iterator I = DF->find(DestBB);
       if (I != DF->end()) {
         DF->addBasicBlock(NewBB, I->second);
-        // However NewBB's frontier does not include DestBB.
-        DominanceFrontier::iterator NF = DF->find(NewBB);
-        DF->removeFromFrontier(NF, DestBB);
+        
+        if (I->second.count(DestBB)) {
+          // However NewBB's frontier does not include DestBB.
+          DominanceFrontier::iterator NF = DF->find(NewBB);
+          DF->removeFromFrontier(NF, DestBB);
+        }
       }
       else
         DF->addBasicBlock(NewBB, DominanceFrontier::DomSetType());