49 static const uint16_t CalleeSavedRegsV2[] = {
50 Hexagon::R24, Hexagon::R25, Hexagon::R26, Hexagon::R27, 0
52 static const uint16_t CalleeSavedRegsV3[] = {
53 Hexagon::R16, Hexagon::R17, Hexagon::R18, Hexagon::R19,
54 Hexagon::R20, Hexagon::R21, Hexagon::R22, Hexagon::R23,
55 Hexagon::R24, Hexagon::R25, Hexagon::R26, Hexagon::R27, 0
62 return CalleeSavedRegsV2;
66 return CalleeSavedRegsV3;
68 llvm_unreachable(
"Callee saved registers requested for unknown architecture "
77 Reserved.
set(Hexagon::R29);
78 Reserved.
set(Hexagon::R30);
79 Reserved.
set(Hexagon::R31);
80 Reserved.
set(Hexagon::D14);
81 Reserved.
set(Hexagon::D15);
82 Reserved.
set(Hexagon::LC0);
83 Reserved.
set(Hexagon::LC1);
84 Reserved.
set(Hexagon::SA0);
85 Reserved.
set(Hexagon::SA1);
93 &Hexagon::IntRegsRegClass, &Hexagon::IntRegsRegClass,
94 &Hexagon::IntRegsRegClass, &Hexagon::IntRegsRegClass,
97 &Hexagon::IntRegsRegClass, &Hexagon::IntRegsRegClass,
98 &Hexagon::IntRegsRegClass, &Hexagon::IntRegsRegClass,
99 &Hexagon::IntRegsRegClass, &Hexagon::IntRegsRegClass,
100 &Hexagon::IntRegsRegClass, &Hexagon::IntRegsRegClass,
101 &Hexagon::IntRegsRegClass, &Hexagon::IntRegsRegClass,
102 &Hexagon::IntRegsRegClass, &Hexagon::IntRegsRegClass,
109 return CalleeSavedRegClassesV2;
113 return CalleeSavedRegClassesV3;
116 "architecture version");
120 int SPAdj,
unsigned FIOperandNum,
124 assert(SPAdj == 0 &&
"Unexpected");
138 if (!TFI->
hasFP(MF)) {
163 if ( (MI.
getOpcode() == Hexagon::LDriw) ||
171 unsigned dstReg = (MI.
getOpcode() == Hexagon::LDrid) ?
180 TII.get(Hexagon::ADD_rr),
181 dstReg).addReg(FrameReg).
addReg(dstReg);
184 TII.get(Hexagon::ADD_ri),
185 dstReg).addReg(FrameReg).
addImm(Offset);
190 }
else if ((MI.
getOpcode() == Hexagon::STriw_indexed) ||
209 TII.get(Hexagon::ADD_rr),
210 resReg).addReg(FrameReg).
addReg(resReg);
213 TII.get(Hexagon::ADD_ri),
214 resReg).addReg(FrameReg).
addImm(Offset);
235 false,
false,
false);
241 TII.get(Hexagon::ADD_rr), ResReg).addReg(FrameReg).
248 TII.get(Hexagon::ADD_ri), ResReg).addReg(FrameReg).
260 TII.get(Hexagon::ADD_rr),
261 dstReg).addReg(FrameReg).
addReg(dstReg);
283 if (TFI->
hasFP(MF)) {
298 #define GET_REGINFO_TARGET_DESC
299 #include "HexagonGenRegisterInfo.inc"
bool isSpillPredRegOp(const MachineInstr *MI) const
const MachineFunction * getParent() const
#define HEXAGON_RESERVED_REG_1
const HexagonArchEnum & getHexagonArchVersion() const
const TargetRegisterClass *const * getCalleeSavedRegClasses(const MachineFunction *MF=0) const
void ChangeToRegister(unsigned Reg, bool isDef, bool isImp=false, bool isKill=false, bool isDead=false, bool isUndef=false, bool isDebug=false)
bool isConstExtended(MachineInstr *MI) const
#define HEXAGON_RESERVED_REG_2
unsigned getStackRegister() const
uint64_t getStackSize() const
BitVector getReservedRegs(const MachineFunction &MF) const
bool isMemOp(const MachineInstr *MI) const
const HexagonInstrInfo * TII
virtual bool hasFP(const MachineFunction &MF) const =0
#define llvm_unreachable(msg)
Abstract Stack Frame Information.
const MachineInstrBuilder & addImm(int64_t Val) const
unsigned getFrameRegister() const
bool isValidOffset(const int Opcode, const int Offset) const
void ChangeToImmediate(int64_t ImmVal)
const MachineBasicBlock * getParent() const
bundle_iterator< MachineInstr, instr_iterator > iterator
const MachineOperand & getOperand(unsigned i) const
unsigned getRARegister() const
MachineInstrBuilder BuildMI(MachineFunction &MF, DebugLoc DL, const MCInstrDesc &MCID)
virtual const TargetFrameLowering * getFrameLowering() const
int64_t getObjectOffset(int ObjectIdx) const
virtual const TargetInstrInfo * getInstrInfo() const
HexagonRegisterInfo(HexagonSubtarget &st)
MachineFrameInfo * getFrameInfo()
void eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj, unsigned FIOperandNum, RegScavenger *RS=NULL) const
const TargetMachine & getTarget() const
bool hasVarSizedObjects() const
HexagonSubtarget & Subtarget
unsigned getReg() const
getReg - Returns the register number.
const uint16_t * getCalleeSavedRegs(const MachineFunction *MF=0) const
Code Generation virtual methods...
void immediateExtend(MachineInstr *MI) const
const MachineInstrBuilder & addReg(unsigned RegNo, unsigned flags=0, unsigned SubReg=0) const
DebugLoc getDebugLoc() const