[llvm-uc] [PATCH 14/16] uc32: add has_FP

  • From: Jia Liu <proljc@xxxxxxxxx>
  • To: llvm-uc@xxxxxxxxxxxxx
  • Date: Sat, 5 Jan 2013 10:52:03 +0800

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)


Other related posts:

  • » [llvm-uc] [PATCH 14/16] uc32: add has_FP - Jia Liu