If NewBB dominates DestBB then DestBB is not part of NewBB's dominance frontier.
authorDevang Patel <dpatel@apple.com>
Mon, 13 Aug 2007 21:59:17 +0000 (21:59 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 13 Aug 2007 21:59:17 +0000 (21:59 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41051 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/BreakCriticalEdges.cpp

index af9a114bbebf78cdd050304f9a715cf6d81c6aae..e28d59d7c3af7d4ef9c1ad4b2a47e2130158eabd 100644 (file)
@@ -227,8 +227,12 @@ bool llvm::SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum, Pass *P,
     DominanceFrontier::DomSetType NewDFSet;
     if (NewBBDominatesDestBB) {
       DominanceFrontier::iterator I = DF->find(DestBB);
-      if (I != DF->end())
+      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);
+      }
       else
         DF->addBasicBlock(NewBB, DominanceFrontier::DomSetType());
     } else {