mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-27 13:40:30 +00:00
Have getCallPreservedMask and getThisCallPreservedMask take a
MachineFunction argument so that we can grab subtarget specific features off of it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231979 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4bf95b38b2
commit
85aa6fd741
@ -428,7 +428,7 @@ public:
|
||||
getCalleeSavedRegs(const MachineFunction *MF) const = 0;
|
||||
|
||||
/// getCallPreservedMask - Return a mask of call-preserved registers for the
|
||||
/// given calling convention on the current sub-target. The mask should
|
||||
/// given calling convention on the current function. The mask should
|
||||
/// include all call-preserved aliases. This is used by the register
|
||||
/// allocator to determine which registers can be live across a call.
|
||||
///
|
||||
@ -445,7 +445,8 @@ public:
|
||||
/// instructions should use implicit-def operands to indicate call clobbered
|
||||
/// registers.
|
||||
///
|
||||
virtual const uint32_t *getCallPreservedMask(CallingConv::ID) const {
|
||||
virtual const uint32_t *getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID) const {
|
||||
// The default mask clobbers everything. All targets should override.
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -801,7 +801,8 @@ bool FastISel::selectPatchpoint(const CallInst *I) {
|
||||
return false;
|
||||
|
||||
// Push the register mask info.
|
||||
Ops.push_back(MachineOperand::CreateRegMask(TRI.getCallPreservedMask(CC)));
|
||||
Ops.push_back(MachineOperand::CreateRegMask(
|
||||
TRI.getCallPreservedMask(*FuncInfo.MF, CC)));
|
||||
|
||||
// Add scratch registers as implicit def and early clobber.
|
||||
const MCPhysReg *ScratchRegs = TLI.getScratchRegisters(CC);
|
||||
|
@ -3158,7 +3158,7 @@ bool AArch64FastISel::fastLowerCall(CallLoweringInfo &CLI) {
|
||||
|
||||
// Add a register mask with the call-preserved registers.
|
||||
// Proper defs for return values will be added by setPhysRegsDeadExcept().
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(CC));
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
|
||||
|
||||
CLI.Call = MIB;
|
||||
|
||||
|
@ -2794,13 +2794,13 @@ AArch64TargetLowering::LowerCall(CallLoweringInfo &CLI,
|
||||
const AArch64RegisterInfo *TRI = Subtarget->getRegisterInfo();
|
||||
if (IsThisReturn) {
|
||||
// For 'this' returns, use the X0-preserving mask if applicable
|
||||
Mask = TRI->getThisReturnPreservedMask(CallConv);
|
||||
Mask = TRI->getThisReturnPreservedMask(MF, CallConv);
|
||||
if (!Mask) {
|
||||
IsThisReturn = false;
|
||||
Mask = TRI->getCallPreservedMask(CallConv);
|
||||
Mask = TRI->getCallPreservedMask(MF, CallConv);
|
||||
}
|
||||
} else
|
||||
Mask = TRI->getCallPreservedMask(CallConv);
|
||||
Mask = TRI->getCallPreservedMask(MF, CallConv);
|
||||
|
||||
assert(Mask && "Missing call preserved mask for calling convention");
|
||||
Ops.push_back(DAG.getRegisterMask(Mask));
|
||||
|
@ -55,7 +55,8 @@ AArch64RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
|
||||
}
|
||||
|
||||
const uint32_t *
|
||||
AArch64RegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
|
||||
AArch64RegisterInfo::getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID CC) const {
|
||||
if (CC == CallingConv::GHC)
|
||||
// This is academic becase all GHC calls are (supposed to be) tail calls
|
||||
return CSR_AArch64_NoRegs_RegMask;
|
||||
@ -74,7 +75,8 @@ const uint32_t *AArch64RegisterInfo::getTLSCallPreservedMask() const {
|
||||
}
|
||||
|
||||
const uint32_t *
|
||||
AArch64RegisterInfo::getThisReturnPreservedMask(CallingConv::ID CC) const {
|
||||
AArch64RegisterInfo::getThisReturnPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID CC) const {
|
||||
// This should return a register mask that is the same as that returned by
|
||||
// getCallPreservedMask but that additionally preserves the register used for
|
||||
// the first i64 argument (which must also be the register used to return a
|
||||
|
@ -37,7 +37,8 @@ public:
|
||||
|
||||
/// Code Generation virtual methods...
|
||||
const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
|
||||
const uint32_t *getCallPreservedMask(CallingConv::ID) const override;
|
||||
const uint32_t *getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID) const override;
|
||||
|
||||
unsigned getCSRFirstUseCost() const override {
|
||||
// The cost will be compared against BlockFrequency where entry has the
|
||||
@ -58,7 +59,8 @@ public:
|
||||
///
|
||||
/// Should return NULL in the case that the calling convention does not have
|
||||
/// this property
|
||||
const uint32_t *getThisReturnPreservedMask(CallingConv::ID) const;
|
||||
const uint32_t *getThisReturnPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID) const;
|
||||
|
||||
BitVector getReservedRegs(const MachineFunction &MF) const override;
|
||||
const TargetRegisterClass *
|
||||
|
@ -87,8 +87,9 @@ ARMBaseRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
|
||||
return RegList;
|
||||
}
|
||||
|
||||
const uint32_t*
|
||||
ARMBaseRegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
|
||||
const uint32_t *
|
||||
ARMBaseRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID CC) const {
|
||||
if (CC == CallingConv::GHC)
|
||||
// This is academic becase all GHC calls are (supposed to be) tail calls
|
||||
return CSR_NoRegs_RegMask;
|
||||
@ -100,8 +101,9 @@ ARMBaseRegisterInfo::getNoPreservedMask() const {
|
||||
return CSR_NoRegs_RegMask;
|
||||
}
|
||||
|
||||
const uint32_t*
|
||||
ARMBaseRegisterInfo::getThisReturnPreservedMask(CallingConv::ID CC) const {
|
||||
const uint32_t *
|
||||
ARMBaseRegisterInfo::getThisReturnPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID CC) const {
|
||||
// This should return a register mask that is the same as that returned by
|
||||
// getCallPreservedMask but that additionally preserves the register used for
|
||||
// the first i32 argument (which must also be the register used to return a
|
||||
|
@ -101,7 +101,8 @@ protected:
|
||||
public:
|
||||
/// Code Generation virtual methods...
|
||||
const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
|
||||
const uint32_t *getCallPreservedMask(CallingConv::ID) const override;
|
||||
const uint32_t *getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID) const override;
|
||||
const uint32_t *getNoPreservedMask() const;
|
||||
|
||||
/// getThisReturnPreservedMask - Returns a call preserved mask specific to the
|
||||
@ -112,7 +113,8 @@ public:
|
||||
///
|
||||
/// Should return NULL in the case that the calling convention does not have
|
||||
/// this property
|
||||
const uint32_t *getThisReturnPreservedMask(CallingConv::ID) const;
|
||||
const uint32_t *getThisReturnPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID) const;
|
||||
|
||||
BitVector getReservedRegs(const MachineFunction &MF) const override;
|
||||
|
||||
|
@ -2265,7 +2265,7 @@ bool ARMFastISel::ARMEmitLibcall(const Instruction *I, RTLIB::Libcall Call) {
|
||||
|
||||
// Add a register mask with the call-preserved registers.
|
||||
// Proper defs for return values will be added by setPhysRegsDeadExcept().
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(CC));
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
|
||||
|
||||
// Finish off the call including any return values.
|
||||
SmallVector<unsigned, 4> UsedRegs;
|
||||
@ -2416,7 +2416,7 @@ bool ARMFastISel::SelectCall(const Instruction *I,
|
||||
|
||||
// Add a register mask with the call-preserved registers.
|
||||
// Proper defs for return values will be added by setPhysRegsDeadExcept().
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(CC));
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
|
||||
|
||||
// Finish off the call including any return values.
|
||||
SmallVector<unsigned, 4> UsedRegs;
|
||||
|
@ -1814,16 +1814,16 @@ ARMTargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
||||
const ARMBaseRegisterInfo *ARI = Subtarget->getRegisterInfo();
|
||||
if (isThisReturn) {
|
||||
// For 'this' returns, use the R0-preserving mask if applicable
|
||||
Mask = ARI->getThisReturnPreservedMask(CallConv);
|
||||
Mask = ARI->getThisReturnPreservedMask(MF, CallConv);
|
||||
if (!Mask) {
|
||||
// Set isThisReturn to false if the calling convention is not one that
|
||||
// allows 'returned' to be modeled in this way, so LowerCallResult does
|
||||
// not try to pass 'this' straight through
|
||||
isThisReturn = false;
|
||||
Mask = ARI->getCallPreservedMask(CallConv);
|
||||
Mask = ARI->getCallPreservedMask(MF, CallConv);
|
||||
}
|
||||
} else
|
||||
Mask = ARI->getCallPreservedMask(CallConv);
|
||||
Mask = ARI->getCallPreservedMask(MF, CallConv);
|
||||
|
||||
assert(Mask && "Missing call preserved mask for calling convention");
|
||||
Ops.push_back(DAG.getRegisterMask(Mask));
|
||||
|
@ -1167,7 +1167,7 @@ bool MipsFastISel::fastLowerCall(CallLoweringInfo &CLI) {
|
||||
|
||||
// Add a register mask with the call-preserved registers.
|
||||
// Proper defs for return values will be added by setPhysRegsDeadExcept().
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(CC));
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
|
||||
|
||||
CLI.Call = MIB;
|
||||
|
||||
|
@ -2481,7 +2481,8 @@ getOpndList(SmallVectorImpl<SDValue> &Ops,
|
||||
|
||||
// Add a register mask operand representing the call-preserved registers.
|
||||
const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
|
||||
const uint32_t *Mask = TRI->getCallPreservedMask(CLI.CallConv);
|
||||
const uint32_t *Mask =
|
||||
TRI->getCallPreservedMask(CLI.DAG.getMachineFunction(), CLI.CallConv);
|
||||
assert(Mask && "Missing call preserved mask for calling convention");
|
||||
if (Subtarget.inMips16HardFloat()) {
|
||||
if (GlobalAddressSDNode *G = dyn_cast<GlobalAddressSDNode>(CLI.Callee)) {
|
||||
|
@ -100,8 +100,9 @@ MipsRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
|
||||
return CSR_O32_SaveList;
|
||||
}
|
||||
|
||||
const uint32_t*
|
||||
MipsRegisterInfo::getCallPreservedMask(CallingConv::ID) const {
|
||||
const uint32_t *
|
||||
MipsRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID) const {
|
||||
if (Subtarget.isSingleFloat())
|
||||
return CSR_SingleFloatOnly_RegMask;
|
||||
|
||||
|
@ -48,7 +48,8 @@ public:
|
||||
unsigned getRegPressureLimit(const TargetRegisterClass *RC,
|
||||
MachineFunction &MF) const override;
|
||||
const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
|
||||
const uint32_t *getCallPreservedMask(CallingConv::ID) const override;
|
||||
const uint32_t *getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID) const override;
|
||||
static const uint32_t *getMips16RetHelperMask();
|
||||
|
||||
BitVector getReservedRegs(const MachineFunction &MF) const override;
|
||||
|
@ -1532,7 +1532,7 @@ bool PPCFastISel::fastLowerCall(CallLoweringInfo &CLI) {
|
||||
|
||||
// Add a register mask with the call-preserved registers. Proper
|
||||
// defs for return values will be added by setPhysRegsDeadExcept().
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(CC));
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
|
||||
|
||||
CLI.Call = MIB;
|
||||
|
||||
|
@ -4187,7 +4187,8 @@ PPCTargetLowering::FinishCall(CallingConv::ID CallConv, SDLoc dl,
|
||||
|
||||
// Add a register mask operand representing the call-preserved registers.
|
||||
const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
|
||||
const uint32_t *Mask = TRI->getCallPreservedMask(CallConv);
|
||||
const uint32_t *Mask =
|
||||
TRI->getCallPreservedMask(DAG.getMachineFunction(), CallConv);
|
||||
assert(Mask && "Missing call preserved mask for calling convention");
|
||||
Ops.push_back(DAG.getRegisterMask(Mask));
|
||||
|
||||
|
@ -128,8 +128,9 @@ PPCRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
|
||||
CSR_SVR432_SaveList);
|
||||
}
|
||||
|
||||
const uint32_t*
|
||||
PPCRegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
|
||||
const uint32_t *
|
||||
PPCRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID CC) const {
|
||||
if (CC == CallingConv::AnyReg) {
|
||||
if (Subtarget.hasVSX())
|
||||
return CSR_64_AllRegs_VSX_RegMask;
|
||||
|
@ -46,7 +46,8 @@ public:
|
||||
|
||||
/// Code Generation virtual methods...
|
||||
const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
|
||||
const uint32_t *getCallPreservedMask(CallingConv::ID CC) const override;
|
||||
const uint32_t *getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID CC) const override;
|
||||
const uint32_t *getNoPreservedMask() const;
|
||||
|
||||
void adjustStackMapLiveOutMask(uint32_t *Mask) const override;
|
||||
|
@ -915,9 +915,10 @@ SparcTargetLowering::LowerCall_32(TargetLowering::CallLoweringInfo &CLI,
|
||||
|
||||
// Add a register mask operand representing the call-preserved registers.
|
||||
const SparcRegisterInfo *TRI = Subtarget->getRegisterInfo();
|
||||
const uint32_t *Mask = ((hasReturnsTwice)
|
||||
? TRI->getRTCallPreservedMask(CallConv)
|
||||
: TRI->getCallPreservedMask(CallConv));
|
||||
const uint32_t *Mask =
|
||||
((hasReturnsTwice)
|
||||
? TRI->getRTCallPreservedMask(CallConv)
|
||||
: TRI->getCallPreservedMask(DAG.getMachineFunction(), CallConv));
|
||||
assert(Mask && "Missing call preserved mask for calling convention");
|
||||
Ops.push_back(DAG.getRegisterMask(Mask));
|
||||
|
||||
@ -1229,7 +1230,8 @@ SparcTargetLowering::LowerCall_64(TargetLowering::CallLoweringInfo &CLI,
|
||||
const SparcRegisterInfo *TRI = Subtarget->getRegisterInfo();
|
||||
const uint32_t *Mask =
|
||||
((hasReturnsTwice) ? TRI->getRTCallPreservedMask(CLI.CallConv)
|
||||
: TRI->getCallPreservedMask(CLI.CallConv));
|
||||
: TRI->getCallPreservedMask(DAG.getMachineFunction(),
|
||||
CLI.CallConv));
|
||||
assert(Mask && "Missing call preserved mask for calling convention");
|
||||
Ops.push_back(DAG.getRegisterMask(Mask));
|
||||
|
||||
@ -1904,8 +1906,8 @@ SDValue SparcTargetLowering::LowerGlobalTLSAddress(SDValue Op,
|
||||
Ops.push_back(Callee);
|
||||
Ops.push_back(Symbol);
|
||||
Ops.push_back(DAG.getRegister(SP::O0, PtrVT));
|
||||
const uint32_t *Mask =
|
||||
Subtarget->getRegisterInfo()->getCallPreservedMask(CallingConv::C);
|
||||
const uint32_t *Mask = Subtarget->getRegisterInfo()->getCallPreservedMask(
|
||||
DAG.getMachineFunction(), CallingConv::C);
|
||||
assert(Mask && "Missing call preserved mask for calling convention");
|
||||
Ops.push_back(DAG.getRegisterMask(Mask));
|
||||
Ops.push_back(InFlag);
|
||||
|
@ -43,8 +43,9 @@ SparcRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
|
||||
return CSR_SaveList;
|
||||
}
|
||||
|
||||
const uint32_t*
|
||||
SparcRegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
|
||||
const uint32_t *
|
||||
SparcRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID CC) const {
|
||||
return CSR_RegMask;
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,8 @@ struct SparcRegisterInfo : public SparcGenRegisterInfo {
|
||||
|
||||
/// Code Generation virtual methods...
|
||||
const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
|
||||
const uint32_t* getCallPreservedMask(CallingConv::ID CC) const override;
|
||||
const uint32_t *getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID CC) const override;
|
||||
|
||||
const uint32_t* getRTCallPreservedMask(CallingConv::ID CC) const;
|
||||
|
||||
|
@ -920,7 +920,7 @@ SystemZTargetLowering::LowerCall(CallLoweringInfo &CLI,
|
||||
|
||||
// Add a register mask operand representing the call-preserved registers.
|
||||
const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
|
||||
const uint32_t *Mask = TRI->getCallPreservedMask(CallConv);
|
||||
const uint32_t *Mask = TRI->getCallPreservedMask(MF, CallConv);
|
||||
assert(Mask && "Missing call preserved mask for calling convention");
|
||||
Ops.push_back(DAG.getRegisterMask(Mask));
|
||||
|
||||
@ -1858,7 +1858,8 @@ SDValue SystemZTargetLowering::lowerTLSGetOffset(GlobalAddressSDNode *Node,
|
||||
|
||||
// Add a register mask operand representing the call-preserved registers.
|
||||
const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
|
||||
const uint32_t *Mask = TRI->getCallPreservedMask(CallingConv::C);
|
||||
const uint32_t *Mask =
|
||||
TRI->getCallPreservedMask(DAG.getMachineFunction(), CallingConv::C);
|
||||
assert(Mask && "Missing call preserved mask for calling convention");
|
||||
Ops.push_back(DAG.getRegisterMask(Mask));
|
||||
|
||||
|
@ -28,7 +28,8 @@ SystemZRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
|
||||
}
|
||||
|
||||
const uint32_t *
|
||||
SystemZRegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
|
||||
SystemZRegisterInfo::getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID CC) const {
|
||||
return CSR_SystemZ_RegMask;
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,8 @@ public:
|
||||
return true;
|
||||
}
|
||||
const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
|
||||
const uint32_t *getCallPreservedMask(CallingConv::ID CC) const override;
|
||||
const uint32_t *getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID CC) const override;
|
||||
BitVector getReservedRegs(const MachineFunction &MF) const override;
|
||||
void eliminateFrameIndex(MachineBasicBlock::iterator MI,
|
||||
int SPAdj, unsigned FIOperandNum,
|
||||
|
@ -3062,7 +3062,7 @@ bool X86FastISel::fastLowerCall(CallLoweringInfo &CLI) {
|
||||
|
||||
// Add a register mask operand representing the call-preserved registers.
|
||||
// Proper defs for return values will be added by setPhysRegsDeadExcept().
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(CC));
|
||||
MIB.addRegMask(TRI.getCallPreservedMask(*FuncInfo.MF, CC));
|
||||
|
||||
// Add an implicit use GOT pointer in EBX.
|
||||
if (Subtarget->isPICStyleGOT())
|
||||
|
@ -3161,7 +3161,7 @@ X86TargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
||||
|
||||
// Add a register mask operand representing the call-preserved registers.
|
||||
const TargetRegisterInfo *TRI = Subtarget->getRegisterInfo();
|
||||
const uint32_t *Mask = TRI->getCallPreservedMask(CallConv);
|
||||
const uint32_t *Mask = TRI->getCallPreservedMask(MF, CallConv);
|
||||
assert(Mask && "Missing call preserved mask for calling convention");
|
||||
Ops.push_back(DAG.getRegisterMask(Mask));
|
||||
|
||||
@ -18453,7 +18453,7 @@ X86TargetLowering::EmitLoweredSegAlloca(MachineInstr *MI,
|
||||
|
||||
// Calls into a routine in libgcc to allocate more space from the heap.
|
||||
const uint32_t *RegMask =
|
||||
Subtarget->getRegisterInfo()->getCallPreservedMask(CallingConv::C);
|
||||
Subtarget->getRegisterInfo()->getCallPreservedMask(*MF, CallingConv::C);
|
||||
if (IsLP64) {
|
||||
BuildMI(mallocMBB, DL, TII->get(X86::MOV64rr), X86::RDI)
|
||||
.addReg(sizeVReg);
|
||||
@ -18538,7 +18538,7 @@ X86TargetLowering::EmitLoweredTLSCall(MachineInstr *MI,
|
||||
// FIXME: The 32-bit calls have non-standard calling conventions. Use a
|
||||
// proper register mask.
|
||||
const uint32_t *RegMask =
|
||||
Subtarget->getRegisterInfo()->getCallPreservedMask(CallingConv::C);
|
||||
Subtarget->getRegisterInfo()->getCallPreservedMask(*F, CallingConv::C);
|
||||
if (Subtarget->is64Bit()) {
|
||||
MachineInstrBuilder MIB = BuildMI(*BB, MI, DL,
|
||||
TII->get(X86::MOV64rm), X86::RDI)
|
||||
|
@ -277,8 +277,9 @@ X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
|
||||
return CSR_32_SaveList;
|
||||
}
|
||||
|
||||
const uint32_t*
|
||||
X86RegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
|
||||
const uint32_t *
|
||||
X86RegisterInfo::getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID CC) const {
|
||||
bool HasAVX = Subtarget.hasAVX();
|
||||
bool HasAVX512 = Subtarget.hasAVX512();
|
||||
|
||||
@ -360,7 +361,7 @@ BitVector X86RegisterInfo::getReservedRegs(const MachineFunction &MF) const {
|
||||
// Set the base-pointer register and its aliases as reserved if needed.
|
||||
if (hasBasePointer(MF)) {
|
||||
CallingConv::ID CC = MF.getFunction()->getCallingConv();
|
||||
const uint32_t* RegMask = getCallPreservedMask(CC);
|
||||
const uint32_t *RegMask = getCallPreservedMask(MF, CC);
|
||||
if (MachineOperand::clobbersPhysReg(RegMask, getBaseRegister()))
|
||||
report_fatal_error(
|
||||
"Stack realignment in presence of dynamic allocas is not supported with"
|
||||
|
@ -99,7 +99,8 @@ public:
|
||||
/// callee-save registers on this target.
|
||||
const MCPhysReg *
|
||||
getCalleeSavedRegs(const MachineFunction* MF) const override;
|
||||
const uint32_t *getCallPreservedMask(CallingConv::ID) const override;
|
||||
const uint32_t *getCallPreservedMask(const MachineFunction &MF,
|
||||
CallingConv::ID) const override;
|
||||
const uint32_t *getNoPreservedMask() const;
|
||||
|
||||
/// getReservedRegs - Returns a bitset indexed by physical register number
|
||||
|
Loading…
Reference in New Issue
Block a user