Fix PR1487 and Transforms/IndVar/2007-06-06-DeleteDanglesPtr.ll

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37459 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nick Lewycky 2007-06-06 04:12:20 +00:00
parent fbbccf61f4
commit 9d0332f7b4

View File

@ -1196,9 +1196,28 @@ namespace {
/// client before it removes an instruction from the program, to make sure
/// that no dangling references are left around.
void ScalarEvolutionsImpl::deleteInstructionFromRecords(Instruction *I) {
Scalars.erase(I);
if (PHINode *PN = dyn_cast<PHINode>(I))
ConstantEvolutionLoopExitValue.erase(PN);
SmallVector<Instruction *, 16> Worklist;
if (Scalars.erase(I)) {
if (PHINode *PN = dyn_cast<PHINode>(I))
ConstantEvolutionLoopExitValue.erase(PN);
Worklist.push_back(I);
}
while (!Worklist.empty()) {
Instruction *II = Worklist.back();
Worklist.pop_back();
for (Instruction::use_iterator UI = II->use_begin(), UE = II->use_end();
UI != UE; ++UI) {
Instruction *Inst = dyn_cast<Instruction>(*UI);
if (Inst && hasSCEV(Inst) && Scalars.erase(Inst)) {
if (PHINode *PN = dyn_cast<PHINode>(II))
ConstantEvolutionLoopExitValue.erase(PN);
Worklist.push_back(Inst);
}
}
}
}