mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 03:23:01 +02:00
Mark FPW as allocable when frame address is taken.
llvm-svn: 91841
This commit is contained in:
parent
2d7ea292a6
commit
89d281c7c3
@ -44,15 +44,31 @@ MSP430RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
|
|||||||
MSP430::R8W, MSP430::R9W, MSP430::R10W, MSP430::R11W,
|
MSP430::R8W, MSP430::R9W, MSP430::R10W, MSP430::R11W,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
static const unsigned CalleeSavedRegsFP[] = {
|
||||||
|
MSP430::R5W, MSP430::R6W, MSP430::R7W,
|
||||||
|
MSP430::R8W, MSP430::R9W, MSP430::R10W, MSP430::R11W,
|
||||||
|
0
|
||||||
|
};
|
||||||
static const unsigned CalleeSavedRegsIntr[] = {
|
static const unsigned CalleeSavedRegsIntr[] = {
|
||||||
MSP430::FPW, MSP430::R5W, MSP430::R6W, MSP430::R7W,
|
MSP430::FPW, MSP430::R5W, MSP430::R6W, MSP430::R7W,
|
||||||
MSP430::R8W, MSP430::R9W, MSP430::R10W, MSP430::R11W,
|
MSP430::R8W, MSP430::R9W, MSP430::R10W, MSP430::R11W,
|
||||||
MSP430::R12W, MSP430::R13W, MSP430::R14W, MSP430::R15W,
|
MSP430::R12W, MSP430::R13W, MSP430::R14W, MSP430::R15W,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
static const unsigned CalleeSavedRegsIntrFP[] = {
|
||||||
|
MSP430::R5W, MSP430::R6W, MSP430::R7W,
|
||||||
|
MSP430::R8W, MSP430::R9W, MSP430::R10W, MSP430::R11W,
|
||||||
|
MSP430::R12W, MSP430::R13W, MSP430::R14W, MSP430::R15W,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
if (hasFP(*MF))
|
||||||
|
return (F->getCallingConv() == CallingConv::MSP430_INTR ?
|
||||||
|
CalleeSavedRegsIntrFP : CalleeSavedRegsFP);
|
||||||
|
else
|
||||||
|
return (F->getCallingConv() == CallingConv::MSP430_INTR ?
|
||||||
|
CalleeSavedRegsIntr : CalleeSavedRegs);
|
||||||
|
|
||||||
return (F->getCallingConv() == CallingConv::MSP430_INTR ?
|
|
||||||
CalleeSavedRegsIntr : CalleeSavedRegs);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const TargetRegisterClass *const *
|
const TargetRegisterClass *const *
|
||||||
@ -65,6 +81,12 @@ MSP430RegisterInfo::getCalleeSavedRegClasses(const MachineFunction *MF) const {
|
|||||||
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
static const TargetRegisterClass * const CalleeSavedRegClassesFP[] = {
|
||||||
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
|
&MSP430::GR16RegClass, 0
|
||||||
|
};
|
||||||
static const TargetRegisterClass * const CalleeSavedRegClassesIntr[] = {
|
static const TargetRegisterClass * const CalleeSavedRegClassesIntr[] = {
|
||||||
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
@ -74,9 +96,21 @@ MSP430RegisterInfo::getCalleeSavedRegClasses(const MachineFunction *MF) const {
|
|||||||
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
static const TargetRegisterClass * const CalleeSavedRegClassesIntrFP[] = {
|
||||||
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
|
&MSP430::GR16RegClass, &MSP430::GR16RegClass,
|
||||||
|
&MSP430::GR16RegClass, 0
|
||||||
|
};
|
||||||
|
|
||||||
return (F->getCallingConv() == CallingConv::MSP430_INTR ?
|
if (hasFP(*MF))
|
||||||
CalleeSavedRegClassesIntr : CalleeSavedRegClasses);
|
return (F->getCallingConv() == CallingConv::MSP430_INTR ?
|
||||||
|
CalleeSavedRegClassesIntrFP : CalleeSavedRegClassesFP);
|
||||||
|
else
|
||||||
|
return (F->getCallingConv() == CallingConv::MSP430_INTR ?
|
||||||
|
CalleeSavedRegClassesIntr : CalleeSavedRegClasses);
|
||||||
}
|
}
|
||||||
|
|
||||||
BitVector MSP430RegisterInfo::getReservedRegs(const MachineFunction &MF) const {
|
BitVector MSP430RegisterInfo::getReservedRegs(const MachineFunction &MF) const {
|
||||||
@ -102,7 +136,11 @@ MSP430RegisterInfo::getPointerRegClass(unsigned Kind) const {
|
|||||||
|
|
||||||
|
|
||||||
bool MSP430RegisterInfo::hasFP(const MachineFunction &MF) const {
|
bool MSP430RegisterInfo::hasFP(const MachineFunction &MF) const {
|
||||||
return NoFramePointerElim || MF.getFrameInfo()->hasVarSizedObjects();
|
const MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||||
|
|
||||||
|
return (NoFramePointerElim ||
|
||||||
|
MF.getFrameInfo()->hasVarSizedObjects() ||
|
||||||
|
MFI->isFrameAddressTaken());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MSP430RegisterInfo::hasReservedCallFrame(MachineFunction &MF) const {
|
bool MSP430RegisterInfo::hasReservedCallFrame(MachineFunction &MF) const {
|
||||||
|
Loading…
Reference in New Issue
Block a user