9#ifndef LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZREGISTERINFO_H
10#define LLVM_LIB_TARGET_SYSTEMZ_SYSTEMZREGISTERINFO_H
16#define GET_REGINFO_HEADER
17#include "SystemZGenRegisterInfo.inc"
27 return Is32bit ? subreg_l32 : subreg_h64;
29inline unsigned odd128(
bool Is32bit) {
30 return Is32bit ? subreg_ll32 : subreg_l64;
139 return &SystemZ::ADDR64BitRegClass;
166 int SPAdj,
unsigned FIOperandNum,
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
SI optimize exec mask operations pre RA
static bool contains(SmallPtrSetImpl< ConstantExpr * > &Cache, ConstantExpr *Expr, Constant *C)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
MachineInstrBundleIterator< MachineInstr > iterator
Representation of each machine instruction.
Wrapper class representing virtual and physical registers.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
A SystemZ-specific class detailing special use registers particular for calling conventions.
virtual ~SystemZCallingConventionRegisters()=default
Destroys the object.
virtual const MCPhysReg * getCalleeSavedRegs(const MachineFunction *MF) const =0
virtual int getStackPointerBias()=0
virtual const uint32_t * getCallPreservedMask(const MachineFunction &MF, CallingConv::ID CC) const =0
virtual int getFramePointerRegister()=0
virtual int getReturnFunctionAddressRegister()=0
virtual int getCallFrameSize()=0
virtual int getStackPointerRegister()=0
ELF calling convention specific use registers Particular when on zLinux in 64 bit mode.
~SystemZELFRegisters()=default
Destroys the object. Bogus destructor overriding base class destructor.
int getStackPointerRegister() final
int getStackPointerBias() final
int getReturnFunctionAddressRegister() final
const MCPhysReg * getCalleeSavedRegs(const MachineFunction *MF) const final
int getFramePointerRegister() final
int getCallFrameSize() final
const uint32_t * getCallPreservedMask(const MachineFunction &MF, CallingConv::ID CC) const final
XPLINK64 calling convention specific use registers Particular to z/OS when in 64 bit mode.
int getCallFrameSize() final
const MCPhysReg * getCalleeSavedRegs(const MachineFunction *MF) const final
int getAddressOfCalleeRegister()
int getStackPointerBias() final
int getReturnFunctionAddressRegister() final
int getStackPointerRegister() final
~SystemZXPLINK64Registers()=default
Destroys the object. Bogus destructor overriding base class destructor.
int getFramePointerRegister() final
const uint32_t * getCallPreservedMask(const MachineFunction &MF, CallingConv::ID CC) const final
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
const int64_t ELFCallFrameSize
unsigned odd128(bool Is32bit)
unsigned even128(bool Is32bit)
bool isHighReg(unsigned int Reg)
This is an optimization pass for GlobalISel generic memory operations.
uint16_t MCPhysReg
An unsigned integer type large enough to represent all physical registers, but not necessarily virtua...
const uint32_t * getNoPreservedMask() const override
const uint32_t * getCallPreservedMask(const MachineFunction &MF, CallingConv::ID CC) const override
bool eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj, unsigned FIOperandNum, RegScavenger *RS) const override
BitVector getReservedRegs(const MachineFunction &MF) const override
bool requiresRegisterScavenging(const MachineFunction &MF) const override
bool getRegAllocationHints(Register VirtReg, ArrayRef< MCPhysReg > Order, SmallVectorImpl< MCPhysReg > &Hints, const MachineFunction &MF, const VirtRegMap *VRM, const LiveRegMatrix *Matrix) const override
SystemZRegisterInfo(unsigned int RA, unsigned int HwMode)
const MCPhysReg * getCalleeSavedRegs(const MachineFunction *MF) const override
bool requiresFrameIndexScavenging(const MachineFunction &MF) const override
const TargetRegisterClass * getPointerRegClass(unsigned Kind=0) const override
getPointerRegClass - Return the register class to use to hold pointers.
Register getFrameRegister(const MachineFunction &MF) const override
bool shouldCoalesce(MachineInstr *MI, const TargetRegisterClass *SrcRC, unsigned SubReg, const TargetRegisterClass *DstRC, unsigned DstSubReg, const TargetRegisterClass *NewRC, LiveIntervals &LIS) const override
SrcRC and DstRC will be morphed into NewRC if this returns true.
const TargetRegisterClass * getCrossCopyRegClass(const TargetRegisterClass *RC) const override
getCrossCopyRegClass - Returns a legal register class to copy a register in the specified class to or...