Fix edge cases in handling basic block split.
authorDevang Patel <dpatel@apple.com>
Fri, 27 Jul 2007 19:13:43 +0000 (19:13 +0000)
committerDevang Patel <dpatel@apple.com>
Fri, 27 Jul 2007 19:13:43 +0000 (19:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40564 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/Dominators.cpp

index f8aef5dde2a2eb9549d6181bd53ba966d04e2732..9b5ee1bb40ce166ef72132b84e7b6c432da170e0 100644 (file)
@@ -616,7 +616,11 @@ void DominanceFrontier::splitBlock(BasicBlock *NewBB) {
        PI != PE; ++PI)
       PredBlocks.push_back(*PI);  
 
-  assert(!PredBlocks.empty() && "No predblocks??");
+  if (PredBlocks.empty())
+    // If NewBB does not have any predecessors then it is a entry block.
+    // In this case, NewBB and its successor NewBBSucc dominates all
+    // other blocks.
+    return;
 
   DominatorTree &DT = getAnalysis<DominatorTree>();
   bool NewBBDominatesNewBBSucc = true;
@@ -643,8 +647,13 @@ void DominanceFrontier::splitBlock(BasicBlock *NewBB) {
         else
           ++SetI;
       }
-      
-      addBasicBlock(NewBB, Set);
+
+      DominanceFrontier::iterator NewBBI = find(NewBB);
+      if (NewBBI != end()) {
+        DominanceFrontier::DomSetType NewBBSet = NewBBI->second;
+        NewBBSet.insert(Set.begin(), Set.end());
+      } else 
+        addBasicBlock(NewBB, Set);
     }
     
   } else {