Bug fix: some redundant copies were not being deleted after detection :-|.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3959 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Vikram S. Adve 2002-09-27 14:27:37 +00:00
parent 1c10f17552
commit 7e5167a3e2

View File

@ -30,23 +30,25 @@ DeleteInstruction(MachineCodeForBasicBlock& mvec,
const TargetMachine& target)
{
// Check if this instruction is in a delay slot of its predecessor.
// If so, replace this instruction with a nop, else just delete it.
// By replacing in place, we save having to update the I-I maps.
if (BBI != mvec.begin())
{
const MachineInstrInfo& mii = target.getInstrInfo();
MachineInstr* predMI = *(BBI-1);
if (unsigned ndelay = mii.getNumDelaySlots(predMI->getOpCode()))
{
// This instruction is in a delay slot of its predecessor, so
// replace it with a nop. By replacing in place, we save having
// to update the I-I maps.
//
assert(ndelay == 1 && "Not yet handling multiple-delay-slot targets");
(*BBI)->replace(mii.getNOPOpCode(), 0);
return;
}
}
else
{
mvec.erase(BBI);
BBI = mvec.end();
}
// The instruction is not in a delay slot, so we can simply erase it.
mvec.erase(BBI);
BBI = mvec.end();
}
//******************* Individual Peephole Optimizations ********************/