diff options
Diffstat (limited to 'lib/Transforms/Utils/SimplifyCFG.cpp')
-rw-r--r-- | lib/Transforms/Utils/SimplifyCFG.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/Transforms/Utils/SimplifyCFG.cpp b/lib/Transforms/Utils/SimplifyCFG.cpp index f7eaa67acf..341b5ac37d 100644 --- a/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/lib/Transforms/Utils/SimplifyCFG.cpp @@ -167,15 +167,16 @@ bool SimplifyCFG(BasicBlock *BB) { TerminatorInst *Term = OnlyPred->getTerminator(); // Resolve any PHI nodes at the start of the block. They are all - // guaranteed to have exactly one entry if they exist. + // guaranteed to have exactly one entry if they exist, unless there are + // multiple duplicate (but guaranteed to be equal) entries for the + // incoming edges. This occurs when there are multiple edges from + // OnlyPred to OnlySucc. // while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) { - assert(PN->getNumIncomingValues() == 1 && "Only one pred!"); PN->replaceAllUsesWith(PN->getIncomingValue(0)); BB->getInstList().pop_front(); // Delete the phi node... } - // Delete the unconditional branch from the predecessor... OnlyPred->getInstList().pop_back(); |