mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-17 03:30:28 +00:00
Fix a nasty dangling pointer issue. The ScalarEvolution pass would keep a
map from instruction* to SCEVHandles. When we delete instructions, we have to tell it about it. We would run into nasty cases where new instructions were reallocated at old instruction addresses and get the old map values. Bad bad bad :( git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22632 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a23076a5f6
commit
52d83e66ee
@ -149,7 +149,8 @@ DeleteTriviallyDeadInstructions(std::set<Instruction*> &Insts) {
|
||||
for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
|
||||
if (Instruction *U = dyn_cast<Instruction>(I->getOperand(i)))
|
||||
Insts.insert(U);
|
||||
I->getParent()->getInstList().erase(I);
|
||||
SE->deleteInstructionFromRecords(I);
|
||||
I->eraseFromParent();
|
||||
Changed = true;
|
||||
}
|
||||
}
|
||||
@ -661,6 +662,7 @@ void LoopStrengthReduce::runOnLoop(Loop *L) {
|
||||
DeadInsts.insert(BO);
|
||||
// Break the cycle, then delete the PHI.
|
||||
PN->replaceAllUsesWith(UndefValue::get(PN->getType()));
|
||||
SE->deleteInstructionFromRecords(PN);
|
||||
PN->eraseFromParent();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user