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 :(

llvm-svn: 22632
This commit is contained in:
Chris Lattner 2005-08-03 21:36:09 +00:00
parent 938ebaa2b0
commit 84e9baa925
1 changed files with 3 additions and 1 deletions

View File

@ -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();
}
}