LLVM: llvm::AArch64GenRegisterBankInfo Class Reference (original) (raw)

#include "[Target/AArch64/GISel/AArch64RegisterBankInfo.h](AArch64RegisterBankInfo%5F8h%5Fsource.html)"

Protected Types
enum PartialMappingIdx { PMI_None = -1 , PMI_FPR16 = 1 , PMI_FPR32, PMI_FPR64, PMI_FPR128, PMI_FPR256, PMI_FPR512, PMI_GPR32, PMI_GPR64, PMI_GPR128, PMI_FirstGPR = PMI_GPR32 , PMI_LastGPR = PMI_GPR128 , PMI_FirstFPR = PMI_FPR16 , PMI_LastFPR = PMI_FPR512 , PMI_Min = PMI_FirstFPR }
enum ValueMappingIdx { InvalidIdx = 0 , First3OpsIdx = 1 , Last3OpsIdx = 25 , DistanceBetweenRegBanks = 3 , FirstCrossRegCpyIdx = 28 , LastCrossRegCpyIdx = 42 , DistanceBetweenCrossRegCpy = 2 , FPExt16To32Idx = 44 , FPExt16To64Idx = 46 , FPExt32To64Idx = 48 , FPExt64To128Idx = 50 , Shift64Imm = 52 }
Static Protected Member Functions
static bool checkPartialMap (unsigned Idx, unsigned ValStartIdx, unsigned ValLength, const RegisterBank &RB)
static bool checkValueMapImpl (unsigned Idx, unsigned FirstInBank, unsigned Size, unsigned Offset)
static bool checkPartialMappingIdx (PartialMappingIdx FirstAlias, PartialMappingIdx LastAlias, ArrayRef< PartialMappingIdx > Order)
static unsigned getRegBankBaseIdxOffset (unsigned RBIdx, TypeSize Size)
static const RegisterBankInfo::ValueMapping * getValueMapping (PartialMappingIdx RBIdx, TypeSize Size)
Get the pointer to the ValueMapping representing the RegisterBank at RBIdx with a size of Size.
static const RegisterBankInfo::ValueMapping * getCopyMapping (unsigned DstBankID, unsigned SrcBankID, TypeSize Size)
Get the pointer to the ValueMapping of the operands of a copy instruction from the SrcBankID register bank to the DstBankID register bank with a size of Size.
static const RegisterBankInfo::ValueMapping * getFPExtMapping (unsigned DstSize, unsigned SrcSize)
Get the instruction mapping for G_FPEXT.
Additional Inherited Members
Public Types inherited from llvm::RegisterBankInfo
using InstructionMappings = SmallVector<const InstructionMapping *, 4>
Convenient type to represent the alternatives for mapping an instruction.
Public Member Functions inherited from llvm::RegisterBankInfo
const RegisterBank * getRegBankFromConstraints (const MachineInstr &MI, unsigned OpIdx, const TargetInstrInfo &TII, const MachineRegisterInfo &MRI) const
Get the register bank for the OpIdx-th operand of MI form the encoding constraints, if any.
virtual void applyMappingImpl (MachineIRBuilder &Builder, const OperandsMapper &OpdMapper) const
See applyMapping.
virtual ~RegisterBankInfo ()=default
const RegisterBank & getRegBank (unsigned ID) const
Get the register bank identified by ID.
unsigned getMaximumSize (unsigned RegBankID) const
Get the maximum size in bits that fits in the given register bank.
const RegisterBank * getRegBank (Register Reg, const MachineRegisterInfo &MRI, const TargetRegisterInfo &TRI) const
Get the register bank of Reg.
unsigned getNumRegBanks () const
Get the total number of register banks.
virtual bool isDivergentRegBank (const RegisterBank *RB) const
Returns true if the register bank is considered divergent.
virtual const RegisterBank & getRegBankFromRegClass (const TargetRegisterClass &RC, LLT Ty) const
Get a register bank that covers RC.
virtual unsigned copyCost (const RegisterBank &A, const RegisterBank &B, TypeSize Size) const
Get the cost of a copy from B to A, or put differently, get the cost of A = COPY B.
bool cannotCopy (const RegisterBank &Dst, const RegisterBank &Src, TypeSize Size) const
virtual unsigned getBreakDownCost (const ValueMapping &ValMapping, const RegisterBank *CurBank=nullptr) const
Get the cost of using ValMapping to decompose a register.
virtual const InstructionMapping & getInstrMapping (const MachineInstr &MI) const
Get the mapping of the different operands of MI on the register bank.
virtual InstructionMappings getInstrAlternativeMappings (const MachineInstr &MI) const
Get the alternative mappings for MI.
InstructionMappings getInstrPossibleMappings (const MachineInstr &MI) const
Get the possible mapping for MI.
void applyMapping (MachineIRBuilder &Builder, const OperandsMapper &OpdMapper) const
Apply OpdMapper.getInstrMapping() to OpdMapper.getMI().
TypeSize getSizeInBits (Register Reg, const MachineRegisterInfo &MRI, const TargetRegisterInfo &TRI) const
Get the size in bits of Reg.
bool verify (const TargetRegisterInfo &TRI) const
Check that information hold by this instance make sense for the given TRI.
const InstructionMapping & getInstructionMapping (unsigned ID, unsigned Cost, const ValueMapping *OperandsMapping, unsigned NumOperands) const
Method to get a uniquely generated InstructionMapping.
const InstructionMapping & getInvalidInstructionMapping () const
Method to get a uniquely generated invalid InstructionMapping.
Static Public Member Functions inherited from llvm::RegisterBankInfo
static void applyDefaultMapping (const OperandsMapper &OpdMapper)
Helper method to apply something that is like the default mapping.
static const TargetRegisterClass * constrainGenericRegister (Register Reg, const TargetRegisterClass &RC, MachineRegisterInfo &MRI)
Constrain the (possibly generic) virtual register Reg to RC.
Static Public Attributes inherited from llvm::RegisterBankInfo
static const unsigned DefaultMappingID = UINT_MAX
Identifier used when the related instruction mapping instance is generated by target independent code.
static const unsigned InvalidMappingID = UINT_MAX - 1
Identifier used when the related instruction mapping instance is generated by the default constructor.
Protected Member Functions inherited from llvm::RegisterBankInfo
RegisterBankInfo (const RegisterBank **RegBanks, unsigned NumRegBanks, const unsigned *Sizes, unsigned HwMode)
Create a RegisterBankInfo that can accommodate up to NumRegBanks RegisterBank instances.
RegisterBankInfo ()
This constructor is meaningless.
const RegisterBank & getRegBank (unsigned ID)
Get the register bank identified by ID.
const TargetRegisterClass * getMinimalPhysRegClass (MCRegister Reg, const TargetRegisterInfo &TRI) const
Get the MinimalPhysRegClass for Reg.
const InstructionMapping & getInstrMappingImpl (const MachineInstr &MI) const
Try to get the mapping of MI.
const PartialMapping & getPartialMapping (unsigned StartIdx, unsigned Length, const RegisterBank &RegBank) const
Get the uniquely generated PartialMapping for the given arguments.
const ValueMapping & getValueMapping (unsigned StartIdx, unsigned Length, const RegisterBank &RegBank) const
The most common ValueMapping consists of a single PartialMapping.
const ValueMapping & getValueMapping (const PartialMapping *BreakDown, unsigned NumBreakDowns) const
Get the ValueMapping for the given arguments.
template
const ValueMapping * getOperandsMapping (Iterator Begin, Iterator End) const
Get the uniquely generated array of ValueMapping for the elements of between Begin and End.
const ValueMapping * getOperandsMapping (const SmallVectorImpl< const ValueMapping * > &OpdsMapping) const
Get the uniquely generated array of ValueMapping for the elements of OpdsMapping.
const ValueMapping * getOperandsMapping (std::initializer_list< const ValueMapping * > OpdsMapping) const
Get the uniquely generated array of ValueMapping for the given arguments.
Protected Attributes inherited from llvm::RegisterBankInfo
const RegisterBank ** RegBanks
Hold the set of supported register banks.
unsigned NumRegBanks
Total number of register banks.
const unsigned * Sizes
Hold the sizes of the register banks for all HwModes.
unsigned HwMode
Current HwMode for the target.
DenseMap< hash_code, std::unique_ptr< const PartialMapping > > MapOfPartialMappings
Keep dynamically allocated PartialMapping in a separate map.
DenseMap< hash_code, std::unique_ptr< const ValueMapping > > MapOfValueMappings
Keep dynamically allocated ValueMapping in a separate map.
DenseMap< hash_code, std::unique_ptr< ValueMapping[]> > MapOfOperandsMappings
Keep dynamically allocated array of ValueMapping in a separate map.
DenseMap< hash_code, std::unique_ptr< const InstructionMapping > > MapOfInstructionMappings
Keep dynamically allocated InstructionMapping in a separate map.
DenseMap< MCRegister, const TargetRegisterClass * > PhysRegMinimalRCs
Getting the minimal register class of a physreg is expensive.

Definition at line 27 of file AArch64RegisterBankInfo.h.

PartialMappingIdx

Enumerator
PMI_None
PMI_FPR16
PMI_FPR32
PMI_FPR64
PMI_FPR128
PMI_FPR256
PMI_FPR512
PMI_GPR32
PMI_GPR64
PMI_GPR128
PMI_FirstGPR
PMI_LastGPR
PMI_FirstFPR
PMI_LastFPR
PMI_Min

Definition at line 29 of file AArch64RegisterBankInfo.h.

ValueMappingIdx

Enumerator
InvalidIdx
First3OpsIdx
Last3OpsIdx
DistanceBetweenRegBanks
FirstCrossRegCpyIdx
LastCrossRegCpyIdx
DistanceBetweenCrossRegCpy
FPExt16To32Idx
FPExt16To64Idx
FPExt32To64Idx
FPExt64To128Idx
Shift64Imm

Definition at line 51 of file AArch64RegisterBankInfo.h.

checkPartialMap()

checkPartialMappingIdx()

bool llvm::AArch64GenRegisterBankInfo::checkPartialMappingIdx ( PartialMappingIdx FirstAlias, PartialMappingIdx LastAlias, ArrayRef< PartialMappingIdx > Order ) staticprotected

checkValueMapImpl()

getCopyMapping()

getFPExtMapping()

getRegBankBaseIdxOffset()

getValueMapping()

BankIDToCopyMapIdx

const PartialMappingIdx llvm::AArch64GenRegisterBankInfo::BankIDToCopyMapIdx[] staticprotected

PartMappings

ValMappings


The documentation for this class was generated from the following file: