mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-23 22:23:00 +00:00
Let each target determines whether a machine instruction is dead. If true, that allows late codeine passes to delete it.
This is considered a workaround. The problem is some targets are not modeling side effects correctly. PPC is apparently one of those. This patch allows ppc llvm-gcc to bootstrap on Darwin. Once we find out which instruction definitions are wrong, we can remove the PPCInstrInfo workaround. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@76703 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -139,6 +139,27 @@ void TargetInstrInfoImpl::reMaterialize(MachineBasicBlock &MBB,
|
||||
MBB.insert(I, MI);
|
||||
}
|
||||
|
||||
bool TargetInstrInfoImpl::isDeadInstruction(const MachineInstr *MI) const {
|
||||
const TargetInstrDesc &TID = MI->getDesc();
|
||||
if (TID.mayLoad() || TID.mayStore() || TID.isCall() || TID.isTerminator() ||
|
||||
TID.isCall() || TID.isBarrier() || TID.isReturn() ||
|
||||
TID.hasUnmodeledSideEffects())
|
||||
return false;
|
||||
for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
|
||||
const MachineOperand &MO = MI->getOperand(i);
|
||||
if (!MO.isReg() || !MO.getReg())
|
||||
continue;
|
||||
if (MO.isDef() && !MO.isDead())
|
||||
return false;
|
||||
if (MO.isUse() && MO.isKill())
|
||||
// FIXME: We can't remove kill markers or else the scavenger will assert.
|
||||
// An alternative is to add a ADD pseudo instruction to replace kill
|
||||
// markers.
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
unsigned
|
||||
TargetInstrInfoImpl::GetFunctionSizeInBytes(const MachineFunction &MF) const {
|
||||
unsigned FnSize = 0;
|
||||
|
||||
Reference in New Issue
Block a user