From c61ce1ad091ad1faaca8d73447f53d43020ddffa Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Fri, 27 Jul 2007 19:13:43 +0000 Subject: [PATCH] Fix edge cases in handling basic block split. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40564 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Dominators.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/VMCore/Dominators.cpp b/lib/VMCore/Dominators.cpp index f8aef5dde2a..9b5ee1bb40c 100644 --- a/lib/VMCore/Dominators.cpp +++ b/lib/VMCore/Dominators.cpp @@ -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(); 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 {