mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-21 18:24:23 +00:00
Don't eliminate a partially redundant load if it's in a landing pad.
A landing pad can be jumped to only by the unwind edge of an invoke instruction. If we eliminate a partially redundant load in a landing pad, it will create a basic block that violates this constraint. It then leads to other problems down the line if it tries to merge that basic block with the landing pad. Avoid this by not eliminating the load in a landing pad. PR17621 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@193064 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -503,19 +503,7 @@ void llvm::MergeBasicBlockIntoOnlyPred(BasicBlock *DestBB, Pass *P) {
|
||||
|
||||
// Splice all the instructions from PredBB to DestBB.
|
||||
PredBB->getTerminator()->eraseFromParent();
|
||||
|
||||
// First splice over the PHI nodes.
|
||||
BasicBlock::iterator PI = PredBB->begin();
|
||||
while (isa<PHINode>(PI))
|
||||
++PI;
|
||||
|
||||
if (PI != PredBB->begin())
|
||||
DestBB->getInstList().splice(DestBB->begin(), PredBB->getInstList(),
|
||||
PredBB->begin(), PI);
|
||||
|
||||
// Now splice over the rest of the instructions.
|
||||
DestBB->getInstList().splice(DestBB->getFirstInsertionPt(),
|
||||
PredBB->getInstList(), PI, PredBB->end());
|
||||
DestBB->getInstList().splice(DestBB->begin(), PredBB->getInstList());
|
||||
|
||||
if (P) {
|
||||
DominatorTree *DT = P->getAnalysisIfAvailable<DominatorTree>();
|
||||
@ -525,7 +513,6 @@ void llvm::MergeBasicBlockIntoOnlyPred(BasicBlock *DestBB, Pass *P) {
|
||||
DT->eraseNode(PredBB);
|
||||
}
|
||||
}
|
||||
|
||||
// Nuke BB.
|
||||
PredBB->eraseFromParent();
|
||||
}
|
||||
|
Reference in New Issue
Block a user