mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
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:
parent
fbbccf61f4
commit
9d0332f7b4
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user