diff options
| author | Anton Korobeynikov <asl@math.spbu.ru> | 2010-11-27 23:05:25 +0000 |
|---|---|---|
| committer | Anton Korobeynikov <asl@math.spbu.ru> | 2010-11-27 23:05:25 +0000 |
| commit | 7283b8d18cf4657be0c9277322ba0a259501a1d3 (patch) | |
| tree | 8a5b6a60f41819bdd1e3d50e5539d051a7b6a69f /llvm/lib/Target/CellSPU/SPUFrameInfo.cpp | |
| parent | d08fbd19f5b05b8dfff5ae13726301618c62a4d0 (diff) | |
| download | bcm5719-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.cpp | 18 |
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)); +} |

