Signed-off-by: Jia Liu <proljc@xxxxxxxxx> --- lib/Target/UniCore/UniCoreRegisterInfo.cpp | 23 ++++++++++++++++++++--- lib/Target/UniCore/UniCoreRegisterInfo.h | 1 + 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/Target/UniCore/UniCoreRegisterInfo.cpp b/lib/Target/UniCore/UniCoreRegisterInfo.cpp index d50c6a9..9cd0577 100644 --- a/lib/Target/UniCore/UniCoreRegisterInfo.cpp +++ b/lib/Target/UniCore/UniCoreRegisterInfo.cpp @@ -16,6 +16,7 @@ #include "UniCoreRegisterInfo.h" #include "UniCore.h" +#include "UniCoreMachineFunctionInfo.h" #include "UniCoreTargetMachine.h" #include "llvm/Function.h" #include "llvm/CodeGen/MachineFrameInfo.h" @@ -38,25 +39,41 @@ UniCoreRegisterInfo::UniCoreRegisterInfo(UniCoreTargetMachine &tm, const uint16_t * UniCoreRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { - return CSR_SaveList; + const TargetFrameLowering *TFI = MF->getTarget().getFrameLowering(); + + return (TFI->hasFP(*MF) ? CSR_FP_SaveList : CSR_SaveList); } BitVector UniCoreRegisterInfo::getReservedRegs(const MachineFunction &MF) const { BitVector Reserved(getNumRegs()); + const TargetFrameLowering *TFI = MF.getTarget().getFrameLowering(); Reserved.set(UniCore::R16); Reserved.set(UniCore::SP); Reserved.set(UniCore::PC); + // Mark frame pointer as reserved if needed. + if (TFI->hasFP(MF)) + Reserved.set(UniCore::FP); + return Reserved; } +const TargetRegisterClass* +UniCoreRegisterInfo::getPointerRegClass(unsigned Kind) const { + assert(0 && "Unimplemented"); +} + void UniCoreRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II, - int SPAdj, RegScavenger *RS) const {} + int SPAdj, RegScavenger *RS) const { + assert(0 && "Unimplemented"); +} unsigned UniCoreRegisterInfo::getFrameRegister(const MachineFunction &MF) const { - return UniCore::SP; + const TargetFrameLowering *TFI = MF.getTarget().getFrameLowering(); + + return TFI->hasFP(MF) ? UniCore::FP : UniCore::SP; } diff --git a/lib/Target/UniCore/UniCoreRegisterInfo.h b/lib/Target/UniCore/UniCoreRegisterInfo.h index 2a54507..f6744ac 100644 --- a/lib/Target/UniCore/UniCoreRegisterInfo.h +++ b/lib/Target/UniCore/UniCoreRegisterInfo.h @@ -34,6 +34,7 @@ public: const uint16_t *getCalleeSavedRegs(const MachineFunction *MF = 0) const; BitVector getReservedRegs(const MachineFunction &MF) const; + const TargetRegisterClass* getPointerRegClass(unsigned Kind = 0) const; void eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj, RegScavenger *RS = NULL) const; -- 1.7.10.2 (Apple Git-33)