mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-27 00:21:03 +00:00
Fix simplifycfg crash in handing block merge.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55971 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -54,7 +54,17 @@ bool llvm::MergeBlockIntoPredecessor(BasicBlock* BB, Pass* P) {
|
||||
|
||||
// Can't merge if there are multiple successors.
|
||||
if (!OnlySucc) return false;
|
||||
|
||||
|
||||
// Can't merge if there is PHI loop.
|
||||
for (BasicBlock::iterator BI = BB->begin(), BE = BB->end(); BI != BE; ++BI) {
|
||||
if (PHINode *PN = dyn_cast<PHINode>(BI)) {
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
|
||||
if (PN->getIncomingValue(i) == PN)
|
||||
return false;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
|
||||
// Begin by getting rid of unneeded PHIs.
|
||||
while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) {
|
||||
PN->replaceAllUsesWith(PN->getIncomingValue(0));
|
||||
|
Reference in New Issue
Block a user