14 #define DEBUG_TYPE "mips-reg-info"
40 #define GET_REGINFO_TARGET_DESC
41 #include "MipsGenRegisterInfo.inc"
52 unsigned Kind)
const {
59 switch (RC->
getID()) {
62 case Mips::GPR32RegClassID:
63 case Mips::GPR64RegClassID:
64 case Mips::DSPRRegClassID: {
66 return 28 - TFI->
hasFP(MF);
68 case Mips::FGR32RegClassID:
70 case Mips::AFGR64RegClassID:
72 case Mips::FGR64RegClassID:
85 return CSR_SingleFloatOnly_SaveList;
88 return CSR_N64_SaveList;
91 return CSR_N32_SaveList;
94 return CSR_O32_FP64_SaveList;
96 return CSR_O32_SaveList;
102 return CSR_SingleFloatOnly_RegMask;
105 return CSR_N64_RegMask;
108 return CSR_N32_RegMask;
111 return CSR_O32_FP64_RegMask;
113 return CSR_O32_RegMask;
117 return CSR_Mips16RetHelper_RegMask;
122 static const uint16_t ReservedGPR32[] = {
123 Mips::ZERO, Mips::K0, Mips::K1, Mips::SP
126 static const uint16_t ReservedGPR64[] = {
127 Mips::ZERO_64, Mips::K0_64, Mips::K1_64, Mips::SP_64
134 Reserved.
set(ReservedGPR32[
I]);
137 Reserved.
set(ReservedGPR64[I]);
141 for (RegIter
Reg = Mips::AFGR64RegClass.
begin(),
142 EReg = Mips::AFGR64RegClass.
end();
Reg != EReg; ++
Reg)
146 for (RegIter
Reg = Mips::FGR64RegClass.
begin(),
147 EReg = Mips::FGR64RegClass.
end();
Reg != EReg; ++
Reg)
153 Reserved.
set(Mips::S0);
155 Reserved.
set(Mips::FP);
156 Reserved.
set(Mips::FP_64);
161 Reserved.
set(Mips::HWR29);
164 Reserved.
set(Mips::DSPPos);
165 Reserved.
set(Mips::DSPSCount);
166 Reserved.
set(Mips::DSPCarry);
167 Reserved.
set(Mips::DSPEFI);
168 Reserved.
set(Mips::DSPOutFlag);
171 Reserved.
set(Mips::MSAIR);
172 Reserved.
set(Mips::MSACSR);
173 Reserved.
set(Mips::MSAAccess);
174 Reserved.
set(Mips::MSASave);
175 Reserved.
set(Mips::MSAModify);
176 Reserved.
set(Mips::MSARequest);
177 Reserved.
set(Mips::MSAMap);
178 Reserved.
set(Mips::MSAUnmap);
182 Reserved.
set(Mips::RA);
183 Reserved.
set(Mips::RA_64);
184 Reserved.
set(Mips::T0);
190 Reserved.
set(Mips::GP);
191 Reserved.
set(Mips::GP_64);
217 errs() <<
"<--------->\n" <<
MI);
223 DEBUG(
errs() <<
"FrameIndex : " << FrameIndex <<
"\n"
224 <<
"spOffset : " << spOffset <<
"\n"
225 <<
"stackSize : " << stackSize <<
"\n");
227 eliminateFI(MI, FIOperandNum, FrameIndex, stackSize, spOffset);
236 return TFI->
hasFP(MF) ? Mips::S0 : Mips::SP;
238 return TFI->
hasFP(MF) ? (IsN64 ? Mips::FP_64 : Mips::FP) :
239 (IsN64 ? Mips::SP_64 : Mips::SP);
const MCPhysReg * const_iterator
const MachineFunction * getParent() const
const_iterator end(StringRef path)
Get end iterator over path.
const uint32_t * getCallPreservedMask(CallingConv::ID) const
const_iterator begin(StringRef path)
Get begin iterator over path.
void eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj, unsigned FIOperandNum, RegScavenger *RS=NULL) const
Stack Frame Processing Methods.
uint64_t getStackSize() const
virtual bool hasFP(const MachineFunction &MF) const =0
ID
LLVM Calling Convention Representation.
size_t array_lengthof(T(&)[N])
Find the length of an array.
const MachineBasicBlock * getParent() const
bundle_iterator< MachineInstr, instr_iterator > iterator
friend const_iterator end(StringRef path)
Get end iterator over path.
unsigned getRegPressureLimit(const TargetRegisterClass *RC, MachineFunction &MF) const
unsigned getFrameRegister(const MachineFunction &MF) const
Debug information queries.
const MachineOperand & getOperand(unsigned i) const
MipsRegisterInfo(const MipsSubtarget &Subtarget)
bool inMips16Mode() const
virtual const TargetFrameLowering * getFrameLowering() const
int64_t getObjectOffset(int ObjectIdx) const
static unsigned getPICCallReg()
Get PIC indirect call register.
MachineFrameInfo * getFrameInfo()
const MipsSubtarget & Subtarget
virtual bool requiresRegisterScavenging(const MachineFunction &MF) const
virtual bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const
BitVector getReservedRegs(const MachineFunction &MF) const
static const uint32_t * getMips16RetHelperMask()
bool isSingleFloat() const
const TargetMachine & getTarget() const
bool useSmallSection() const
StringRef getName() const
const uint16_t * getCalleeSavedRegs(const MachineFunction *MF=0) const
Mips Callee Saved Registers.
const TargetRegisterClass * getPointerRegClass(const MachineFunction &MF, unsigned Kind) const
Code Generation virtual methods...