LLVM 23.0.0git
llvm::MCRegisterClass Class Reference

MCRegisterClass - Base class of TargetRegisterClass. More...

#include "llvm/MC/MCRegisterInfo.h"

Public Types

using iterator = const MCPhysReg*
using const_iterator = const MCPhysReg*

Public Member Functions

unsigned getID () const
 getID() - Return the register class ID number.
iterator begin () const
 begin/end - Return all of the registers in this class.
iterator end () const
unsigned getNumRegs () const
 getNumRegs - Return the number of registers in this class.
MCRegister getRegister (unsigned i) const
 getRegister - Return the specified register in the class.
ArrayRef< MCPhysReggetRegisters () const
bool contains (MCRegister Reg) const
 contains - Return true if the specified register is included in this register class.
bool contains (MCRegister Reg1, MCRegister Reg2) const
 contains - Return true if both registers are in this class.
unsigned getSizeInBits () const
 Return the size of the physical register in bits if we are able to determine it.
uint8_t getCopyCost () const
 getCopyCost - Return the cost of copying a value between two registers in this class.
bool expensiveOrImpossibleToCopy () const
bool isAllocatable () const
 isAllocatable - Return true if this register class may be used to create virtual registers.
bool isBaseClass () const
 Return true if this register class has a defined BaseClassOrder.
bool hasSubClass (const MCRegisterClass *RC) const
 Return true if the specified TargetRegisterClass is a proper sub-class of this TargetRegisterClass.
bool hasSubClassEq (const MCRegisterClass *RC) const
 Returns true if RC is a sub-class of or equal to this class.
bool hasSuperClass (const MCRegisterClass *RC) const
 Return true if the specified MCRegisterClass is a proper super-class of this MCRegisterClass.
bool hasSuperClassEq (const MCRegisterClass *RC) const
 Returns true if RC is a super-class of or equal to this class.
const uint32_tgetSubClassMask () const
 Returns a bit vector of subclasses, including this one.
const uint16_tgetSuperRegIndices () const
 Returns a 0-terminated list of sub-register indices that project some super-register class into this register class.
ArrayRef< unsignedsuperclasses () const
 Returns a list of super-classes.
LaneBitmask getLaneMask () const
 Returns the combination of all lane masks of register in this class.

Public Attributes

const uint32_t RegsOff
 Relative offset to MCPhysReg array.
const uint32_t RegSetOff
 Relative offset to uint8_t array.
const uint32_t NameIdx
const uint32_t RegSizeInBits
const uint16_t RegsSize
const uint16_t RegSetSize
const uint16_t ID
const uint8_t CopyCost
const bool Allocatable
const bool BaseClass
const uint32_t SubClassMaskOff
 Relative offset to uint32_t array.
const uint32_t SuperRegIndicesOff
 Relative offset to MCPhysReg array.
const LaneBitmask LaneMask
const uint8_t AllocationPriority
 Classes with a higher priority value are assigned first by register allocators using a greedy heuristic.
const bool GlobalPriority
const uint8_t TSFlags
 Configurable target specific flags.
const uint8_t SpillStackID
const bool HasDisjunctSubRegs
 Whether the class supports two (or more) disjunct subregister indices.
const bool CoveredBySubRegs
 Whether a combination of subregisters can cover every register in the class.
const uint32_t SuperClassesOff
 Relative offset to unsigned array.
const uint16_t SuperClassesSize

Detailed Description

MCRegisterClass - Base class of TargetRegisterClass.

Definition at line 37 of file MCRegisterInfo.h.

Member Typedef Documentation

◆ const_iterator

◆ iterator

Definition at line 39 of file MCRegisterInfo.h.

Member Function Documentation

◆ begin()

iterator llvm::MCRegisterClass::begin ( ) const
inline

begin/end - Return all of the registers in this class.

Definition at line 81 of file MCRegisterInfo.h.

References RegsOff.

Referenced by allocateSGPR32InputImpl(), end(), llvm::HexagonBlockRanges::expandToSubRegs(), getRegister(), getRegisters(), getRegistersForValue(), and getRegistersForValue().

◆ contains() [1/2]

bool llvm::MCRegisterClass::contains ( MCRegister Reg) const
inline

contains - Return true if the specified register is included in this register class.

This does not include virtual registers.

Definition at line 104 of file MCRegisterInfo.h.

References Reg, RegSetOff, and RegSetSize.

Referenced by addHints(), llvm::MachineFunction::addLiveIn(), llvm::SIRegisterInfo::buildSpillLoadStore(), canFoldCopy(), CheckVGPROverflow(), llvm::X86_MC::X86MCInstrAnalysis::clearsSuperRegisters(), llvm::PPCInstrInfo::ClobbersPredicate(), contains(), llvm::AMDGPUDisassembler::convertTrue16OpSel(), llvm::VirtRegAuxInfo::copyHint(), cvtVOP3DstOpSelOnly(), llvm::ARMBaseRegisterInfo::eliminateFrameIndex(), estimateRSStackSizeLimit(), llvm::SIInstrInfo::expandPostRAPseudo(), llvm::SIInstrInfo::foldImmediate(), llvm::R600InstrInfo::getIndirectIndexBegin(), getLargestFPRegisterOrZero(), llvm::M68kRegisterInfo::getMatchingMegaReg(), llvm::MCRegisterInfo::getMatchingSuperReg(), llvm::AArch64RegisterInfo::getRegAllocationHints(), llvm::ARMBaseRegisterInfo::getRegAllocationHints(), llvm::PPCRegisterInfo::getRegAllocationHints(), llvm::X86RegisterInfo::getRegAllocationHints(), llvm::X86TargetLowering::getRegForInlineAsmConstraint(), llvm::AMDGPU::getVGPRPhysRegClass(), llvm::PPCInstrInfo::insertSelect(), IsAGPROperand(), llvm::SIInstrInfo::isLegalRegOperand(), isMemOperand(), llvm::HexagonMCInstrInfo::isPredReg(), llvm::AMDGPU::isSGPR(), matchAliasCondition(), llvm::ARMInstPrinter::printInst(), llvm::SIFrameLowering::restoreCalleeSavedRegisters(), llvm::rewriteT2FrameIndex(), llvm::CoalescerPair::setRegisters(), llvm::SystemZRegisterInfo::shouldCoalesce(), UpdateOperandRegClass(), and llvm::SIInstrInfo::verifyInstruction().

◆ contains() [2/2]

bool llvm::MCRegisterClass::contains ( MCRegister Reg1,
MCRegister Reg2 ) const
inline

contains - Return true if both registers are in this class.

Definition at line 115 of file MCRegisterInfo.h.

References contains().

◆ end()

iterator llvm::MCRegisterClass::end ( ) const
inline

Definition at line 85 of file MCRegisterInfo.h.

References begin(), and RegsSize.

Referenced by getRegistersForValue(), and getRegistersForValue().

◆ expensiveOrImpossibleToCopy()

bool llvm::MCRegisterClass::expensiveOrImpossibleToCopy ( ) const
inline
Returns
true if register class is very expensive to copy e.g. status flag register classes.

Definition at line 132 of file MCRegisterInfo.h.

References CopyCost.

Referenced by CheckForPhysRegDependency().

◆ getCopyCost()

uint8_t llvm::MCRegisterClass::getCopyCost ( ) const
inline

getCopyCost - Return the cost of copying a value between two registers in this class.

A negative number means the register class is very expensive to copy e.g. status flag register classes.

Definition at line 128 of file MCRegisterInfo.h.

References CopyCost.

Referenced by CheckForPhysRegDependency().

◆ getID()

unsigned llvm::MCRegisterClass::getID ( ) const
inline

getID() - Return the register class ID number.

Definition at line 77 of file MCRegisterInfo.h.

References ID.

Referenced by llvm::RegsForValue::AddInlineAsmOperands(), llvm::HexagonEvaluator::composeWithSubRegIndex(), llvm::X86RegisterInfo::constrainRegClassToNonRex2(), llvm::RegisterBank::covers(), llvm::HexagonFrameLowering::determineCalleeSaves(), llvm::SITargetLowering::finalizeLowering(), llvm::HexagonRegisterInfo::getCallerSavedRegs(), llvm::WebAssembly::getCopyOpcodeForRegClass(), GetCostForDef(), llvm::SIRegisterInfo::getEquivalentVGPRClass(), llvm::HexagonRegisterInfo::getHexagonSubRegIndex(), llvm::ARMBaseRegisterInfo::getLargestLegalSuperClass(), llvm::SIRegisterInfo::getNumUsedPhysRegs(), llvm::AArch64RegisterInfo::getRegAllocationHints(), llvm::X86RegisterInfo::getRegAllocationHints(), llvm::AArch64RegisterBankInfo::getRegBankFromRegClass(), llvm::PPCRegisterBankInfo::getRegBankFromRegClass(), llvm::RISCVRegisterBankInfo::getRegBankFromRegClass(), llvm::SPIRVRegisterBankInfo::getRegBankFromRegClass(), llvm::AMDGPU::getRegBitWidth(), llvm::TargetRegisterInfo::getRegClassInfo(), getRegForPrinting(), llvm::AArch64RegisterInfo::getRegPressureLimit(), llvm::ARMBaseRegisterInfo::getRegPressureLimit(), llvm::MipsRegisterInfo::getRegPressureLimit(), llvm::PPCRegisterInfo::getRegPressureLimit(), llvm::SIRegisterInfo::getRegPressureLimit(), llvm::X86RegisterInfo::getRegPressureLimit(), llvm::AMDGPU::getVGPRWithMSBs(), hasSubClassEq(), INITIALIZE_PASS(), llvm::X86RegisterInfo::isNonRex2RegClass(), isTileRegister(), llvm::X86RegisterInfo::isTileRegisterClass(), IsWritingToVCCR(), llvm::WebAssemblyMCInstLower::lower(), llvm::HexagonTargetLowering::LowerFormalArguments(), llvm::InlineAsmLowering::lowerInlineAsm(), llvm::HexagonEvaluator::mask(), llvm::ResourcePriorityQueue::scheduledNode(), llvm::AMDGPUDAGToDAGISel::Select(), llvm::AArch64RegisterInfo::shouldCoalesce(), and llvm::HexagonRegisterInfo::shouldCoalesce().

◆ getLaneMask()

LaneBitmask llvm::MCRegisterClass::getLaneMask ( ) const
inline

Returns the combination of all lane masks of register in this class.

The lane masks of the registers are the combination of all lane masks of their subregisters. Returns 1 if there are no subregisters.

Definition at line 211 of file MCRegisterInfo.h.

References LaneMask.

Referenced by llvm::ScheduleDAGInstrs::getLaneMaskForMO(), and llvm::MachineRegisterInfo::getMaxLaneMaskForVReg().

◆ getNumRegs()

◆ getRegister()

◆ getRegisters()

◆ getSizeInBits()

unsigned llvm::MCRegisterClass::getSizeInBits ( ) const
inline

Return the size of the physical register in bits if we are able to determine it.

This always returns zero for registers of targets that use HW modes, as we need more information to determine the size of registers in such cases. Use TargetRegisterInfo to cover them.

Definition at line 123 of file MCRegisterInfo.h.

References RegSizeInBits.

Referenced by CheckVGPROverflow().

◆ getSubClassMask()

const uint32_t * llvm::MCRegisterClass::getSubClassMask ( ) const
inline

Returns a bit vector of subclasses, including this one.

The vector is indexed by class IDs.

To use it, consider the returned array as a chunk of memory that contains an array of bits of size NumRegClasses. Each 32-bit chunk contains a bitset of the ID of the subclasses in big-endian style. I.e., the representation of the memory from left to right at the bit level looks like: [31 30 ... 1 0] [ 63 62 ... 33 32] ... [ XXX NumRegClasses NumRegClasses - 1 ... ] Where the number represents the class ID and XXX bits that should be ignored.

See the implementation of hasSubClassEq for an example of how it can be used.

Definition at line 182 of file MCRegisterInfo.h.

References SubClassMaskOff.

Referenced by llvm::TargetRegisterInfo::getAllocatableClass(), and hasSubClassEq().

◆ getSuperRegIndices()

const uint16_t * llvm::MCRegisterClass::getSuperRegIndices ( ) const
inline

Returns a 0-terminated list of sub-register indices that project some super-register class into this register class.

The list has an entry for each Idx such that:

There exists SuperRC where: For all Reg in SuperRC: this->contains(Reg:Idx)

Definition at line 194 of file MCRegisterInfo.h.

References SuperRegIndicesOff.

◆ hasSubClass()

bool llvm::MCRegisterClass::hasSubClass ( const MCRegisterClass * RC) const
inline

Return true if the specified TargetRegisterClass is a proper sub-class of this TargetRegisterClass.

Definition at line 145 of file MCRegisterInfo.h.

References hasSubClassEq().

Referenced by foldSimpleCrossClassCopies(), getCommonMinimalPhysRegClass(), llvm::M68kRegisterInfo::getMaximalPhysRegClass(), and hasSuperClass().

◆ hasSubClassEq()

bool llvm::MCRegisterClass::hasSubClassEq ( const MCRegisterClass * RC) const
inline

◆ hasSuperClass()

bool llvm::MCRegisterClass::hasSuperClass ( const MCRegisterClass * RC) const
inline

Return true if the specified MCRegisterClass is a proper super-class of this MCRegisterClass.

Definition at line 157 of file MCRegisterInfo.h.

References hasSubClass().

◆ hasSuperClassEq()

◆ isAllocatable()

bool llvm::MCRegisterClass::isAllocatable ( ) const
inline

isAllocatable - Return true if this register class may be used to create virtual registers.

Definition at line 138 of file MCRegisterInfo.h.

References Allocatable.

Referenced by llvm::MachineRegisterInfo::createVirtualRegister(), llvm::TargetRegisterInfo::getAllocatableClass(), getAllocatableSetForRC(), and llvm::MachineRegisterInfo::setRegClass().

◆ isBaseClass()

bool llvm::MCRegisterClass::isBaseClass ( ) const
inline

Return true if this register class has a defined BaseClassOrder.

Definition at line 141 of file MCRegisterInfo.h.

References BaseClass.

◆ superclasses()

ArrayRef< unsigned > llvm::MCRegisterClass::superclasses ( ) const
inline

Returns a list of super-classes.

The classes are ordered by ID which is also a topological ordering from large to small classes. The list does NOT include the current class.

Definition at line 202 of file MCRegisterInfo.h.

References llvm::ArrayRef(), SuperClassesOff, and SuperClassesSize.

Referenced by llvm::HexagonRegisterInfo::getHexagonSubRegIndex(), llvm::ARMBaseRegisterInfo::getLargestLegalSuperClass(), llvm::PPCRegisterInfo::getLargestLegalSuperClass(), and llvm::X86RegisterInfo::getLargestLegalSuperClass().

Member Data Documentation

◆ Allocatable

const bool llvm::MCRegisterClass::Allocatable

Definition at line 51 of file MCRegisterInfo.h.

Referenced by isAllocatable().

◆ AllocationPriority

const uint8_t llvm::MCRegisterClass::AllocationPriority

Classes with a higher priority value are assigned first by register allocators using a greedy heuristic.

The value is in the range [0,31].

Definition at line 59 of file MCRegisterInfo.h.

◆ BaseClass

const bool llvm::MCRegisterClass::BaseClass

Definition at line 52 of file MCRegisterInfo.h.

Referenced by isBaseClass().

◆ CopyCost

const uint8_t llvm::MCRegisterClass::CopyCost

Definition at line 50 of file MCRegisterInfo.h.

Referenced by expensiveOrImpossibleToCopy(), and getCopyCost().

◆ CoveredBySubRegs

const bool llvm::MCRegisterClass::CoveredBySubRegs

Whether a combination of subregisters can cover every register in the class.

See also the CoveredBySubRegs description in Target.td.

Definition at line 71 of file MCRegisterInfo.h.

Referenced by llvm::DeadLaneDetector::transferUsedLanes().

◆ GlobalPriority

const bool llvm::MCRegisterClass::GlobalPriority

Definition at line 62 of file MCRegisterInfo.h.

◆ HasDisjunctSubRegs

const bool llvm::MCRegisterClass::HasDisjunctSubRegs

Whether the class supports two (or more) disjunct subregister indices.

Definition at line 68 of file MCRegisterInfo.h.

Referenced by llvm::ScheduleDAGInstrs::getLaneMaskForMO(), and llvm::MachineRegisterInfo::shouldTrackSubRegLiveness().

◆ ID

const uint16_t llvm::MCRegisterClass::ID

Definition at line 49 of file MCRegisterInfo.h.

Referenced by getID(), and hasSubClassEq().

◆ LaneMask

◆ NameIdx

const uint32_t llvm::MCRegisterClass::NameIdx

Definition at line 45 of file MCRegisterInfo.h.

◆ RegSetOff

const uint32_t llvm::MCRegisterClass::RegSetOff

Relative offset to uint8_t array.

Definition at line 44 of file MCRegisterInfo.h.

Referenced by contains().

◆ RegSetSize

const uint16_t llvm::MCRegisterClass::RegSetSize

Definition at line 48 of file MCRegisterInfo.h.

Referenced by contains().

◆ RegSizeInBits

const uint32_t llvm::MCRegisterClass::RegSizeInBits

Definition at line 46 of file MCRegisterInfo.h.

Referenced by getSizeInBits().

◆ RegsOff

const uint32_t llvm::MCRegisterClass::RegsOff

Relative offset to MCPhysReg array.

Definition at line 43 of file MCRegisterInfo.h.

Referenced by begin().

◆ RegsSize

const uint16_t llvm::MCRegisterClass::RegsSize

Definition at line 47 of file MCRegisterInfo.h.

Referenced by end(), getNumRegs(), and getRegisters().

◆ SpillStackID

const uint8_t llvm::MCRegisterClass::SpillStackID

Definition at line 66 of file MCRegisterInfo.h.

Referenced by llvm::TargetRegisterInfo::getSpillStackID().

◆ SubClassMaskOff

const uint32_t llvm::MCRegisterClass::SubClassMaskOff

Relative offset to uint32_t array.

Definition at line 54 of file MCRegisterInfo.h.

Referenced by getSubClassMask().

◆ SuperClassesOff

const uint32_t llvm::MCRegisterClass::SuperClassesOff

Relative offset to unsigned array.

Definition at line 72 of file MCRegisterInfo.h.

Referenced by superclasses().

◆ SuperClassesSize

const uint16_t llvm::MCRegisterClass::SuperClassesSize

Definition at line 73 of file MCRegisterInfo.h.

Referenced by superclasses().

◆ SuperRegIndicesOff

const uint32_t llvm::MCRegisterClass::SuperRegIndicesOff

Relative offset to MCPhysReg array.

Definition at line 55 of file MCRegisterInfo.h.

Referenced by getSuperRegIndices().

◆ TSFlags


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