summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/CellSPU/SPUFrameInfo.cpp
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2010-11-27 23:05:25 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2010-11-27 23:05:25 +0000
commit7283b8d18cf4657be0c9277322ba0a259501a1d3 (patch)
tree8a5b6a60f41819bdd1e3d50e5539d051a7b6a69f /llvm/lib/Target/CellSPU/SPUFrameInfo.cpp
parentd08fbd19f5b05b8dfff5ae13726301618c62a4d0 (diff)
downloadbcm5719-llvm-7283b8d18cf4657be0c9277322ba0a259501a1d3.tar.gz
bcm5719-llvm-7283b8d18cf4657be0c9277322ba0a259501a1d3.zip
Move more PEI-related hooks to TFI
llvm-svn: 120229
Diffstat (limited to 'llvm/lib/Target/CellSPU/SPUFrameInfo.cpp')
-rw-r--r--llvm/lib/Target/CellSPU/SPUFrameInfo.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/lib/Target/CellSPU/SPUFrameInfo.cpp b/llvm/lib/Target/CellSPU/SPUFrameInfo.cpp
index 114d85848bc..1b7d88be67f 100644
--- a/llvm/lib/Target/CellSPU/SPUFrameInfo.cpp
+++ b/llvm/lib/Target/CellSPU/SPUFrameInfo.cpp
@@ -22,6 +22,7 @@
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
+#include "llvm/CodeGen/RegisterScavenging.h"
#include "llvm/Target/TargetData.h"
#include "llvm/Target/TargetOptions.h"
#include "llvm/Support/CommandLine.h"
@@ -255,3 +256,20 @@ void SPUFrameInfo::getInitialFrameState(std::vector<MachineMove> &Moves) const {
MachineLocation Src(SPU::R1, 0);
Moves.push_back(MachineMove(0, Dst, Src));
}
+
+void SPUFrameInfo::processFunctionBeforeCalleeSavedScan(MachineFunction &MF,
+ RegScavenger *RS) const{
+ // Mark LR and SP unused, since the prolog spills them to stack and
+ // we don't want anyone else to spill them for us.
+ //
+ // Also, unless R2 is really used someday, don't spill it automatically.
+ MF.getRegInfo().setPhysRegUnused(SPU::R0);
+ MF.getRegInfo().setPhysRegUnused(SPU::R1);
+ MF.getRegInfo().setPhysRegUnused(SPU::R2);
+
+ MachineFrameInfo *MFI = MF.getFrameInfo();
+ const TargetRegisterClass *RC = &SPU::R32CRegClass;
+ RS->setScavengingFrameIndex(MFI->CreateStackObject(RC->getSize(),
+ RC->getAlignment(),
+ false));
+}
OpenPOWER on IntegriCloud