mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
For now, don't split live intervals around x87 stack register barriers. FpGET_ST0_80 must be right after a call instruction (and ADJCALLSTACKUP) so we need to find a way to prevent reload of x87 registers between them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58230 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -2411,6 +2411,14 @@ ReverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool X86InstrInfo::
|
||||
IgnoreRegisterClassBarriers(const TargetRegisterClass *RC) const {
|
||||
// FIXME: Ignore bariers of x87 stack registers for now. We can't
|
||||
// allow any loads of these registers before FpGet_ST0_80.
|
||||
return RC == &X86::CCRRegClass || RC == &X86::RFP32RegClass ||
|
||||
RC == &X86::RFP64RegClass || RC == &X86::RFP80RegClass;
|
||||
}
|
||||
|
||||
const TargetRegisterClass *X86InstrInfo::getPointerRegClass() const {
|
||||
const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>();
|
||||
if (Subtarget->is64Bit())
|
||||
|
@@ -405,6 +405,11 @@ public:
|
||||
virtual
|
||||
bool ReverseBranchCondition(SmallVectorImpl<MachineOperand> &Cond) const;
|
||||
|
||||
/// IgnoreRegisterClassBarriers - Returns true if pre-register allocation
|
||||
/// live interval splitting pass should ignore barriers of the specified
|
||||
/// register class.
|
||||
bool IgnoreRegisterClassBarriers(const TargetRegisterClass *RC) const;
|
||||
|
||||
const TargetRegisterClass *getPointerRegClass() const;
|
||||
|
||||
// getBaseOpcodeFor - This function returns the "base" X86 opcode for the
|
||||
|
@@ -94,6 +94,10 @@ public:
|
||||
|
||||
/// Code Generation virtual methods...
|
||||
///
|
||||
|
||||
/// getCrossCopyRegClass - Returns a legal register class to copy a register
|
||||
/// in the specified class to or from. Returns NULL if it is possible to copy
|
||||
/// between a two registers of the specified class.
|
||||
const TargetRegisterClass *
|
||||
getCrossCopyRegClass(const TargetRegisterClass *RC) const;
|
||||
|
||||
|
Reference in New Issue
Block a user