mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 19:12:56 +02:00
[SystemZ] Use SystemZCallingConv.td to define callee-saved registers
Just a clean-up. No behavioral change intended. llvm-svn: 212711
This commit is contained in:
parent
7b68d9e309
commit
2bd4df26d9
@ -13,7 +13,7 @@ class CCIfExtend<CCAction A>
|
|||||||
: CCIf<"ArgFlags.isSExt() || ArgFlags.isZExt()", A>;
|
: CCIf<"ArgFlags.isSExt() || ArgFlags.isZExt()", A>;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// SVR4 return value calling convention
|
// z/Linux return value calling convention
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
def RetCC_SystemZ : CallingConv<[
|
def RetCC_SystemZ : CallingConv<[
|
||||||
// Promote i32 to i64 if it has an explicit extension type.
|
// Promote i32 to i64 if it has an explicit extension type.
|
||||||
@ -39,7 +39,7 @@ def RetCC_SystemZ : CallingConv<[
|
|||||||
]>;
|
]>;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// SVR4 argument calling conventions
|
// z/Linux argument calling conventions
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
def CC_SystemZ : CallingConv<[
|
def CC_SystemZ : CallingConv<[
|
||||||
// Promote i32 to i64 if it has an explicit extension type.
|
// Promote i32 to i64 if it has an explicit extension type.
|
||||||
@ -63,3 +63,9 @@ def CC_SystemZ : CallingConv<[
|
|||||||
// Other arguments are passed in 8-byte-aligned 8-byte stack slots.
|
// Other arguments are passed in 8-byte-aligned 8-byte stack slots.
|
||||||
CCIfType<[i32, i64, f32, f64], CCAssignToStack<8, 8>>
|
CCIfType<[i32, i64, f32, f64], CCAssignToStack<8, 8>>
|
||||||
]>;
|
]>;
|
||||||
|
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
// z/Linux callee-saved registers
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
def CSR_SystemZ : CalleeSavedRegs<(add (sequence "R%dD", 6, 15),
|
||||||
|
(sequence "F%dD", 8, 15))>;
|
||||||
|
@ -914,6 +914,12 @@ SystemZTargetLowering::LowerCall(CallLoweringInfo &CLI,
|
|||||||
Ops.push_back(DAG.getRegister(RegsToPass[I].first,
|
Ops.push_back(DAG.getRegister(RegsToPass[I].first,
|
||||||
RegsToPass[I].second.getValueType()));
|
RegsToPass[I].second.getValueType()));
|
||||||
|
|
||||||
|
// Add a register mask operand representing the call-preserved registers.
|
||||||
|
const TargetRegisterInfo *TRI = getTargetMachine().getRegisterInfo();
|
||||||
|
const uint32_t *Mask = TRI->getCallPreservedMask(CallConv);
|
||||||
|
assert(Mask && "Missing call preserved mask for calling convention");
|
||||||
|
Ops.push_back(DAG.getRegisterMask(Mask));
|
||||||
|
|
||||||
// Glue the call to the argument copies, if any.
|
// Glue the call to the argument copies, if any.
|
||||||
if (Glue.getNode())
|
if (Glue.getNode())
|
||||||
Ops.push_back(Glue);
|
Ops.push_back(Glue);
|
||||||
|
@ -233,9 +233,7 @@ defm CondStore64 : CondStores<GR64, nonvolatile_store,
|
|||||||
// Call instructions
|
// Call instructions
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
// The definitions here are for the call-clobbered registers.
|
let isCall = 1, Defs = [R14D, CC] in {
|
||||||
let isCall = 1, Defs = [R0D, R1D, R2D, R3D, R4D, R5D, R14D,
|
|
||||||
F0D, F1D, F2D, F3D, F4D, F5D, F6D, F7D, CC] in {
|
|
||||||
def CallBRASL : Alias<6, (outs), (ins pcrel32:$I2, variable_ops),
|
def CallBRASL : Alias<6, (outs), (ins pcrel32:$I2, variable_ops),
|
||||||
[(z_call pcrel32:$I2)]>;
|
[(z_call pcrel32:$I2)]>;
|
||||||
def CallBASR : Alias<2, (outs), (ins ADDR64:$R2, variable_ops),
|
def CallBASR : Alias<2, (outs), (ins ADDR64:$R2, variable_ops),
|
||||||
|
@ -22,18 +22,14 @@ using namespace llvm;
|
|||||||
SystemZRegisterInfo::SystemZRegisterInfo()
|
SystemZRegisterInfo::SystemZRegisterInfo()
|
||||||
: SystemZGenRegisterInfo(SystemZ::R14D) {}
|
: SystemZGenRegisterInfo(SystemZ::R14D) {}
|
||||||
|
|
||||||
const MCPhysReg*
|
const MCPhysReg *
|
||||||
SystemZRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
|
SystemZRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
|
||||||
static const MCPhysReg CalleeSavedRegs[] = {
|
return CSR_SystemZ_SaveList;
|
||||||
SystemZ::R6D, SystemZ::R7D, SystemZ::R8D, SystemZ::R9D,
|
}
|
||||||
SystemZ::R10D, SystemZ::R11D, SystemZ::R12D, SystemZ::R13D,
|
|
||||||
SystemZ::R14D, SystemZ::R15D,
|
|
||||||
SystemZ::F8D, SystemZ::F9D, SystemZ::F10D, SystemZ::F11D,
|
|
||||||
SystemZ::F12D, SystemZ::F13D, SystemZ::F14D, SystemZ::F15D,
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
return CalleeSavedRegs;
|
const uint32_t *
|
||||||
|
SystemZRegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
|
||||||
|
return CSR_SystemZ_RegMask;
|
||||||
}
|
}
|
||||||
|
|
||||||
BitVector
|
BitVector
|
||||||
|
@ -45,6 +45,7 @@ public:
|
|||||||
}
|
}
|
||||||
const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF = nullptr) const
|
const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF = nullptr) const
|
||||||
override;
|
override;
|
||||||
|
const uint32_t *getCallPreservedMask(CallingConv::ID CC) const override;
|
||||||
BitVector getReservedRegs(const MachineFunction &MF) const override;
|
BitVector getReservedRegs(const MachineFunction &MF) const override;
|
||||||
void eliminateFrameIndex(MachineBasicBlock::iterator MI,
|
void eliminateFrameIndex(MachineBasicBlock::iterator MI,
|
||||||
int SPAdj, unsigned FIOperandNum,
|
int SPAdj, unsigned FIOperandNum,
|
||||||
|
Loading…
Reference in New Issue
Block a user