1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 03:53:04 +02:00

enable sinking and licm of loads from the argument area. I'd like to enable this

for remat, but can't due to an RA bug.

llvm-svn: 45623
This commit is contained in:
Chris Lattner 2008-01-05 06:10:42 +00:00
parent aad6c09a14
commit f1493e7b58

View File

@ -141,6 +141,18 @@ bool X86InstrInfo::isReallyTriviallyReMaterializable(MachineInstr *MI) const {
MI->getOperand(2).getImm() == 1 &&
MI->getOperand(3).getReg() == 0)
return true;
// If this is a load from a fixed argument slot, we know the value is
// invariant across the whole function, because we don't redefine argument
// values.
#if 0
// FIXME: This is disabled due to a remat bug. rdar://5671644
MachineFunction *MF = MI->getParent()->getParent();
if (MI->getOperand(1).isFI() &&
MF->getFrameInfo()->isFixedObjectIndex(MI->getOperand(1).getIndex()))
return true;
#endif
return false;
}
// All other instructions marked M_REMATERIALIZABLE are always trivially
@ -188,6 +200,15 @@ bool X86InstrInfo::isReallySideEffectFree(MachineInstr *MI) const {
MI->getOperand(2).getImm() == 1 &&
MI->getOperand(3).getReg() == 0)
return true;
// If this is a load from a fixed argument slot, we know the value is
// invariant across the whole function, because we don't redefine argument
// values.
MachineFunction *MF = MI->getParent()->getParent();
if (MI->getOperand(1).isFI() &&
MF->getFrameInfo()->isFixedObjectIndex(MI->getOperand(1).getIndex()))
return true;
return false;
}