19 #define GET_REGINFO_TARGET_DESC
20 #include "SystemZGenRegisterInfo.inc"
27 return CSR_SystemZ_SaveList;
33 return CSR_SystemZ_RegMask;
43 Reserved.
set(SystemZ::R11D);
44 Reserved.
set(SystemZ::R11L);
45 Reserved.
set(SystemZ::R11H);
46 Reserved.
set(SystemZ::R10Q);
50 Reserved.
set(SystemZ::R15D);
51 Reserved.
set(SystemZ::R15L);
52 Reserved.
set(SystemZ::R15H);
53 Reserved.
set(SystemZ::R14Q);
59 int SPAdj,
unsigned FIOperandNum,
61 assert(SPAdj == 0 &&
"Outgoing arguments should be part of the frame");
71 int FrameIndex = MI->getOperand(FIOperandNum).getIndex();
74 MI->getOperand(FIOperandNum + 1).getImm());
77 if (MI->isDebugValue()) {
78 MI->getOperand(FIOperandNum).ChangeToRegister(BasePtr,
false);
79 MI->getOperand(FIOperandNum + 1).ChangeToImmediate(Offset);
85 unsigned Opcode = MI->getOpcode();
86 unsigned OpcodeForOffset =
TII->getOpcodeForOffset(Opcode, Offset);
88 MI->getOperand(FIOperandNum).ChangeToRegister(BasePtr,
false);
92 int64_t OldOffset = Offset;
93 int64_t Mask = 0xffff;
95 Offset = OldOffset & Mask;
96 OpcodeForOffset =
TII->getOpcodeForOffset(Opcode, Offset);
98 assert(Mask &&
"One offset must be OK");
99 }
while (!OpcodeForOffset);
101 unsigned ScratchReg =
103 int64_t HighOffset = OldOffset - Offset;
106 && MI->getOperand(FIOperandNum + 2).getReg() == 0) {
109 TII->loadImmediate(MBB, MI, ScratchReg, HighOffset);
110 MI->getOperand(FIOperandNum).ChangeToRegister(BasePtr,
false);
111 MI->getOperand(FIOperandNum + 2).ChangeToRegister(ScratchReg,
115 unsigned LAOpcode =
TII->getOpcodeForOffset(SystemZ::LA, HighOffset);
117 BuildMI(MBB, MI, DL,
TII->get(LAOpcode),ScratchReg)
122 TII->loadImmediate(MBB, MI, ScratchReg, HighOffset);
123 BuildMI(MBB, MI, DL,
TII->get(SystemZ::AGR),ScratchReg)
132 MI->setDesc(
TII->get(OpcodeForOffset));
133 MI->getOperand(FIOperandNum + 1).ChangeToImmediate(Offset);
139 return TFI->
hasFP(MF) ? SystemZ::R11D : SystemZ::R15D;
const MachineFunction * getParent() const
getParent - Return the MachineFunction containing this basic block.
bool hasFP(const MachineFunction &MF) const override
hasFP - Return true if the specified function should have a dedicated frame pointer register...
BitVector getReservedRegs(const MachineFunction &MF) const override
void ChangeToRegister(unsigned Reg, bool isDef, bool isImp=false, bool isKill=false, bool isDead=false, bool isUndef=false, bool isDebug=false)
ChangeToRegister - Replace this operand with a new register operand of the specified value...
unsigned createVirtualRegister(const TargetRegisterClass *RegClass)
createVirtualRegister - Create and return a new virtual register in the function with the specified r...
int getFrameIndexOffset(const MachineFunction &MF, int FI) const override
getFrameIndexOffset - Returns the displacement from the frame register to the stack frame of the spec...
uint16_t MCPhysReg
An unsigned integer type large enough to represent all physical registers, but not necessarily virtua...
void eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj, unsigned FIOperandNum, RegScavenger *RS) const override
const TargetSubtargetInfo & getSubtarget() const
getSubtarget - Return the subtarget for which this machine code is being compiled.
const HexagonInstrInfo * TII
unsigned getFrameRegister(const MachineFunction &MF) const override
const MachineInstrBuilder & addImm(int64_t Val) const
addImm - Add a new immediate operand.
const uint32_t * getCallPreservedMask(const MachineFunction &MF, CallingConv::ID CC) const override
bundle_iterator< MachineInstr, instr_iterator > iterator
const MachineOperand & getOperand(unsigned i) const
const MCPhysReg * getCalleeSavedRegs(const MachineFunction *MF) const override
MachineInstrBuilder BuildMI(MachineFunction &MF, DebugLoc DL, const MCInstrDesc &MCID)
BuildMI - Builder interface.
MachineRegisterInfo & getRegInfo()
getRegInfo - Return information about the registers currently in use.
virtual const TargetInstrInfo * getInstrInfo() const
const MachineInstrBuilder & addReg(unsigned RegNo, unsigned flags=0, unsigned SubReg=0) const
addReg - Add a new virtual register operand...