diff options
Diffstat (limited to 'llvm/lib/Target/AVR/AVRRegisterInfo.cpp')
-rw-r--r-- | llvm/lib/Target/AVR/AVRRegisterInfo.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/llvm/lib/Target/AVR/AVRRegisterInfo.cpp b/llvm/lib/Target/AVR/AVRRegisterInfo.cpp index 8fce05c933bc..2a4905ce2461 100644 --- a/llvm/lib/Target/AVR/AVRRegisterInfo.cpp +++ b/llvm/lib/Target/AVR/AVRRegisterInfo.cpp @@ -22,6 +22,7 @@ #include "AVR.h" #include "AVRInstrInfo.h" +#include "AVRMachineFunctionInfo.h" #include "AVRTargetMachine.h" #include "MCTargetDesc/AVRMCTargetDesc.h" @@ -34,19 +35,21 @@ AVRRegisterInfo::AVRRegisterInfo() : AVRGenRegisterInfo(0) {} const uint16_t * AVRRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { - CallingConv::ID CC = MF->getFunction().getCallingConv(); + const AVRMachineFunctionInfo *AFI = MF->getInfo<AVRMachineFunctionInfo>(); - return ((CC == CallingConv::AVR_INTR || CC == CallingConv::AVR_SIGNAL) + return AFI->isInterruptOrSignalHandler() ? CSR_Interrupts_SaveList - : CSR_Normal_SaveList); + : CSR_Normal_SaveList; } const uint32_t * AVRRegisterInfo::getCallPreservedMask(const MachineFunction &MF, CallingConv::ID CC) const { - return ((CC == CallingConv::AVR_INTR || CC == CallingConv::AVR_SIGNAL) + const AVRMachineFunctionInfo *AFI = MF.getInfo<AVRMachineFunctionInfo>(); + + return AFI->isInterruptOrSignalHandler() ? CSR_Interrupts_RegMask - : CSR_Normal_RegMask); + : CSR_Normal_RegMask; } BitVector AVRRegisterInfo::getReservedRegs(const MachineFunction &MF) const { @@ -95,7 +98,8 @@ AVRRegisterInfo::getLargestLegalSuperClass(const TargetRegisterClass *RC, } /// Fold a frame offset shared between two add instructions into a single one. -static void foldFrameOffset(MachineBasicBlock::iterator &II, int &Offset, unsigned DstReg) { +static void foldFrameOffset(MachineBasicBlock::iterator &II, int &Offset, + Register DstReg) { MachineInstr &MI = *II; int Opcode = MI.getOpcode(); @@ -264,13 +268,12 @@ AVRRegisterInfo::getPointerRegClass(const MachineFunction &MF, return &AVR::PTRDISPREGSRegClass; } -void AVRRegisterInfo::splitReg(unsigned Reg, - unsigned &LoReg, - unsigned &HiReg) const { - assert(AVR::DREGSRegClass.contains(Reg) && "can only split 16-bit registers"); +void AVRRegisterInfo::splitReg(Register Reg, Register &LoReg, + Register &HiReg) const { + assert(AVR::DREGSRegClass.contains(Reg) && "can only split 16-bit registers"); - LoReg = getSubReg(Reg, AVR::sub_lo); - HiReg = getSubReg(Reg, AVR::sub_hi); + LoReg = getSubReg(Reg, AVR::sub_lo); + HiReg = getSubReg(Reg, AVR::sub_hi); } bool AVRRegisterInfo::shouldCoalesce(MachineInstr *MI, |