mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 23:31:37 +00:00
simplify DeleteTriviallyDeadInstructions again, unlike my previous
buggy rewrite, this notifies ScalarEvolution of a pending instruction about to be removed and then erases it, instead of erasing it then notifying. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60329 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d8aafcb200
commit
bfcee36cd7
@ -244,28 +244,21 @@ DeleteTriviallyDeadInstructions(SetVector<Instruction*> &Insts) {
|
||||
Instruction *I = Insts.back();
|
||||
Insts.pop_back();
|
||||
|
||||
if (PHINode *PN = dyn_cast<PHINode>(I)) {
|
||||
// If all incoming values to the Phi are the same, we can replace the Phi
|
||||
// with that value.
|
||||
if (Value *PNV = PN->hasConstantValue()) {
|
||||
if (Instruction *U = dyn_cast<Instruction>(PNV))
|
||||
if (!isInstructionTriviallyDead(I))
|
||||
continue;
|
||||
|
||||
SE->deleteValueFromRecords(I);
|
||||
|
||||
for (User::op_iterator i = I->op_begin(), e = I->op_end(); i != e; ++i) {
|
||||
if (Instruction *U = dyn_cast<Instruction>(*i)) {
|
||||
*i = 0;
|
||||
if (U->use_empty())
|
||||
Insts.insert(U);
|
||||
SE->deleteValueFromRecords(PN);
|
||||
PN->replaceAllUsesWith(PNV);
|
||||
PN->eraseFromParent();
|
||||
Changed = true;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if (isInstructionTriviallyDead(I)) {
|
||||
for (User::op_iterator i = I->op_begin(), e = I->op_end(); i != e; ++i)
|
||||
if (Instruction *U = dyn_cast<Instruction>(*i))
|
||||
Insts.insert(U);
|
||||
SE->deleteValueFromRecords(I);
|
||||
I->eraseFromParent();
|
||||
Changed = true;
|
||||
}
|
||||
|
||||
I->eraseFromParent();
|
||||
Changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -2067,7 +2060,7 @@ bool LoopStrengthReduce::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
BasicBlock::iterator I = L->getHeader()->begin();
|
||||
while (PHINode *PN = dyn_cast<PHINode>(I++)) {
|
||||
// At this point, we know that we have killed one or more IV users.
|
||||
// It is worth checking to see if the cann indvar is also
|
||||
// It is worth checking to see if the cannonical indvar is also
|
||||
// dead, so that we can remove it as well.
|
||||
//
|
||||
// We can remove a PHI if it is on a cycle in the def-use graph
|
||||
|
Loading…
x
Reference in New Issue
Block a user