mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 23:31:37 +00:00
Fix crash in LSR due to attempt to remove original induction variable. However,
for reasons explained in the comments, I also deactivated this code as it needs more thought. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20367 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5e1e5e13ff
commit
14dc638081
@ -78,9 +78,14 @@ DeleteTriviallyDeadInstructions(std::set<Instruction*> &Insts) {
|
||||
Instruction *I = *Insts.begin();
|
||||
Insts.erase(Insts.begin());
|
||||
if (isInstructionTriviallyDead(I)) {
|
||||
for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
|
||||
if (Instruction *U = dyn_cast<Instruction>(I->getOperand(i)))
|
||||
Insts.insert(U);
|
||||
for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) {
|
||||
// Note: the PHI nodes had dropAllReferences() called on it, so its
|
||||
// operands will all be NULL.
|
||||
Value *V = I->getOperand(i);
|
||||
if (V)
|
||||
if (Instruction *U = dyn_cast<Instruction>(V))
|
||||
Insts.insert(U);
|
||||
}
|
||||
I->getParent()->getInstList().erase(I);
|
||||
Changed = true;
|
||||
}
|
||||
@ -237,6 +242,11 @@ void LoopStrengthReduce::runOnLoop(Loop *L) {
|
||||
// 4. the add is used by the cann indvar
|
||||
// If all four cases above are true, then we can remove both the add and
|
||||
// the cann indvar.
|
||||
#if 0
|
||||
// FIXME: it's not clear this code is correct. An induction variable with
|
||||
// but one use, an increment, implies an infinite loop. Not illegal, but
|
||||
// of questionable utility. It also does not update the loop info with the
|
||||
// new induction variable.
|
||||
if (PN->hasOneUse()) {
|
||||
BinaryOperator *BO = dyn_cast<BinaryOperator>(*(PN->use_begin()));
|
||||
if (BO && BO->getOpcode() == Instruction::Add)
|
||||
@ -250,5 +260,6 @@ void LoopStrengthReduce::runOnLoop(Loop *L) {
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user