26#define GET_REGINFO_TARGET_DESC
27#include "SparcGenRegisterInfo.inc"
55 if (Subtarget.
getCLOpts().reserve_app_registers) {
61 if (!Subtarget.is64Bit())
74 if (Subtarget.
getCLOpts().reserve_app_registers)
76 if (Subtarget.
getCLOpts().reserve_app_registers || !Subtarget.is64Bit())
84 if (!Subtarget.isV9()) {
85 for (
unsigned n = 0; n != 16; ++n) {
92 for (
unsigned n = 0; n < 31; n++)
96 i != SP::IntRegsRegClass.end(); ++i) {
117 MI.getOperand(FIOperandNum).ChangeToRegister(
FramePtr,
false);
118 MI.getOperand(FIOperandNum + 1).ChangeToImmediate(
Offset);
139 MI.getOperand(FIOperandNum).ChangeToRegister(SP::G1,
false);
140 MI.getOperand(FIOperandNum + 1).ChangeToImmediate(
LO10(
Offset));
157 MI.getOperand(FIOperandNum).ChangeToRegister(SP::G1,
false);
158 MI.getOperand(FIOperandNum + 1).ChangeToImmediate(0);
164 int SPAdj,
unsigned FIOperandNum,
166 assert(SPAdj == 0 &&
"Unexpected");
170 int FrameIndex =
MI.getOperand(FIOperandNum).getIndex();
177 Offset = TFI->getFrameIndexReference(MF, FrameIndex, FrameReg).getFixed();
179 Offset +=
MI.getOperand(FIOperandNum + 1).getImm();
181 if (!Subtarget.isV9() || !Subtarget.hasHardQuad()) {
182 if (
MI.getOpcode() == SP::STQFri) {
185 Register SrcEvenReg = getSubReg(SrcReg, SP::sub_even64);
186 Register SrcOddReg = getSubReg(SrcReg, SP::sub_odd64);
191 MI.setDesc(
TII.get(SP::STDFri));
192 MI.getOperand(2).setReg(SrcOddReg);
194 }
else if (
MI.getOpcode() == SP::LDQFri) {
197 Register DestEvenReg = getSubReg(DestReg, SP::sub_even64);
198 Register DestOddReg = getSubReg(DestReg, SP::sub_odd64);
200 BuildMI(*
MI.getParent(),
II, dl,
TII.get(SP::LDDFri), DestEvenReg)
204 MI.setDesc(
TII.get(SP::LDDFri));
205 MI.getOperand(0).setReg(DestOddReg);
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file implements the BitVector class.
const HexagonInstrInfo * TII
uint64_t IntrinsicInst * II
static void replaceFI(MachineFunction &MF, MachineBasicBlock::iterator II, MachineInstr &MI, const DebugLoc &dl, unsigned FIOperandNum, int Offset, unsigned FramePtr)
static bool is64Bit(const char *name)
static const unsigned FramePtr
MCRegAliasIterator enumerates all registers aliasing Reg.
const MCPhysReg * iterator
Wrapper class representing physical registers. Should be passed by value.
MachineInstrBundleIterator< MachineInstr > iterator
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
const MachineInstrBuilder & addReg(Register RegNo, RegState Flags={}, unsigned SubReg=0) const
Add a new virtual register operand.
const MachineInstrBuilder & addImm(int64_t Val) const
Add a new immediate operand.
Representation of each machine instruction.
Wrapper class representing virtual and physical registers.
const SparcOptions & getCLOpts() const
bool isRegisterReserved(MCPhysReg PhysReg) const
const SparcInstrInfo * getInstrInfo() const override
TargetInstrInfo - Interface to description of machine instruction set.
virtual const TargetInstrInfo * getInstrInfo() const
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
This is an optimization pass for GlobalISel generic memory operations.
MachineInstrBuilder BuildMI(MachineFunction &MF, const MIMetadata &MIMD, const MCInstrDesc &MCID)
Builder interface. Specify how to create the initial instruction itself.
static unsigned HI22(int64_t imm)
static unsigned HIX22(int64_t imm)
static unsigned LOX10(int64_t imm)
uint16_t MCPhysReg
An unsigned integer type large enough to represent all physical registers, but not necessarily virtua...
static unsigned LO10(int64_t imm)
const MCPhysReg * getCalleeSavedRegs(const MachineFunction *MF) const override
Code Generation virtual methods...
bool eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj, unsigned FIOperandNum, RegScavenger *RS=nullptr) const override
SparcRegisterInfo(const SparcSubtarget &STI)
BitVector getReservedRegs(const MachineFunction &MF) const override
bool isReservedReg(const MachineFunction &MF, MCRegister Reg) const
const uint32_t * getCallPreservedMask(const MachineFunction &MF, CallingConv::ID CC) const override
Register getFrameRegister(const MachineFunction &MF) const override
const uint32_t * getRTCallPreservedMask(CallingConv::ID CC) const