LLVM 20.0.0git
Classes | Public Types | Public Member Functions | Friends | List of all members
llvm::MCRegisterInfo Class Reference

MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc objects that represent all of the machine registers that the target has. More...

#include "llvm/MC/MCRegisterInfo.h"

Inheritance diagram for llvm::MCRegisterInfo:
Inheritance graph
[legend]

Classes

struct  DwarfLLVMRegPair
 DwarfLLVMRegPair - Emitted by tablegen so Dwarf<->LLVM reg mappings can be performed with a binary search. More...
 

Public Types

using regclass_iterator = const MCRegisterClass *
 

Public Member Functions

iterator_range< MCSubRegIteratorsubregs (MCRegister Reg) const
 Return an iterator range over all sub-registers of Reg, excluding Reg.
 
iterator_range< MCSubRegIteratorsubregs_inclusive (MCRegister Reg) const
 Return an iterator range over all sub-registers of Reg, including Reg.
 
iterator_range< MCSuperRegIteratorsuperregs (MCRegister Reg) const
 Return an iterator range over all super-registers of Reg, excluding Reg.
 
iterator_range< MCSuperRegIteratorsuperregs_inclusive (MCRegister Reg) const
 Return an iterator range over all super-registers of Reg, including Reg.
 
detail::concat_range< const MCPhysReg, iterator_range< MCSubRegIterator >, iterator_range< MCSuperRegIterator > > sub_and_superregs_inclusive (MCRegister Reg) const
 Return an iterator range over all sub- and super-registers of Reg, including Reg.
 
iterator_range< MCRegUnitIteratorregunits (MCRegister Reg) const
 Returns an iterator range over all regunits for Reg.
 
virtual ~MCRegisterInfo ()
 
void InitMCRegisterInfo (const MCRegisterDesc *D, unsigned NR, unsigned RA, unsigned PC, const MCRegisterClass *C, unsigned NC, const MCPhysReg(*RURoots)[2], unsigned NRU, const int16_t *DL, const LaneBitmask *RUMS, const char *Strings, const char *ClassStrings, const uint16_t *SubIndices, unsigned NumIndices, const uint16_t *RET)
 Initialize MCRegisterInfo, called by TableGen auto-generated routines.
 
void mapLLVMRegsToDwarfRegs (const DwarfLLVMRegPair *Map, unsigned Size, bool isEH)
 Used to initialize LLVM register to Dwarf register number mapping.
 
void mapDwarfRegsToLLVMRegs (const DwarfLLVMRegPair *Map, unsigned Size, bool isEH)
 Used to initialize Dwarf register to LLVM register number mapping.
 
void mapLLVMRegToSEHReg (MCRegister LLVMReg, int SEHReg)
 mapLLVMRegToSEHReg - Used to initialize LLVM register to SEH register number mapping.
 
void mapLLVMRegToCVReg (MCRegister LLVMReg, int CVReg)
 
MCRegister getRARegister () const
 This method should return the register where the return address can be found.
 
MCRegister getProgramCounter () const
 Return the register which is the program counter.
 
const MCRegisterDescoperator[] (MCRegister Reg) const
 
const MCRegisterDescget (MCRegister Reg) const
 Provide a get method, equivalent to [], but more useful with a pointer to this object.
 
MCRegister getSubReg (MCRegister Reg, unsigned Idx) const
 Returns the physical register number of sub-register "Index" for physical register RegNo.
 
MCRegister getMatchingSuperReg (MCRegister Reg, unsigned SubIdx, const MCRegisterClass *RC) const
 Return a super-register of the specified register Reg so its sub-register of index SubIdx is Reg.
 
unsigned getSubRegIndex (MCRegister RegNo, MCRegister SubRegNo) const
 For a given register pair, return the sub-register index if the second register is a sub-register of the first.
 
const chargetName (MCRegister RegNo) const
 Return the human-readable symbolic target-specific name for the specified physical register.
 
bool isConstant (MCRegister RegNo) const
 Returns true if the given register is constant.
 
bool isArtificial (MCRegister RegNo) const
 Returns true if the given register is artificial, which means it represents a regunit that is not separately addressable but still needs to be modelled, such as the top 16-bits of a 32-bit GPR.
 
bool isArtificialRegUnit (MCRegUnit Unit) const
 Returns true when the given register unit is considered artificial.
 
unsigned getNumRegs () const
 Return the number of registers this target has (useful for sizing arrays holding per register information)
 
unsigned getNumSubRegIndices () const
 Return the number of sub-register indices understood by the target.
 
unsigned getNumRegUnits () const
 Return the number of (native) register units in the target.
 
virtual int64_t getDwarfRegNum (MCRegister RegNum, bool isEH) const
 Map a target register to an equivalent dwarf register number.
 
std::optional< MCRegistergetLLVMRegNum (uint64_t RegNum, bool isEH) const
 Map a dwarf register back to a target register.
 
int64_t getDwarfRegNumFromDwarfEHRegNum (uint64_t RegNum) const
 Map a target EH register number to an equivalent DWARF register number.
 
int getSEHRegNum (MCRegister RegNum) const
 Map a target register to an equivalent SEH register number.
 
int getCodeViewRegNum (MCRegister RegNum) const
 Map a target register to an equivalent CodeView register number.
 
regclass_iterator regclass_begin () const
 
regclass_iterator regclass_end () const
 
iterator_range< regclass_iteratorregclasses () const
 
unsigned getNumRegClasses () const
 
const MCRegisterClassgetRegClass (unsigned i) const
 Returns the register class associated with the enumeration value.
 
const chargetRegClassName (const MCRegisterClass *Class) const
 
uint16_t getEncodingValue (MCRegister Reg) const
 Returns the encoding for Reg.
 
bool isSubRegister (MCRegister RegA, MCRegister RegB) const
 Returns true if RegB is a sub-register of RegA.
 
bool isSuperRegister (MCRegister RegA, MCRegister RegB) const
 Returns true if RegB is a super-register of RegA.
 
bool isSubRegisterEq (MCRegister RegA, MCRegister RegB) const
 Returns true if RegB is a sub-register of RegA or if RegB == RegA.
 
bool isSuperRegisterEq (MCRegister RegA, MCRegister RegB) const
 Returns true if RegB is a super-register of RegA or if RegB == RegA.
 
bool isSuperOrSubRegisterEq (MCRegister RegA, MCRegister RegB) const
 Returns true if RegB is a super-register or sub-register of RegA or if RegB == RegA.
 
bool regsOverlap (MCRegister RegA, MCRegister RegB) const
 Returns true if the two registers are equal or alias each other.
 

Friends

class MCSubRegIterator
 
class MCSubRegIndexIterator
 
class MCSuperRegIterator
 
class MCRegUnitIterator
 
class MCRegUnitMaskIterator
 
class MCRegUnitRootIterator
 
class MCRegAliasIterator
 

Detailed Description

MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc objects that represent all of the machine registers that the target has.

As such, we simply have to track a pointer to this array so that we can turn register number into a register descriptor.

Note this class is designed to be a base class of TargetRegisterInfo, which is the interface used by codegen. However, specific targets should never specialize this class. MCRegisterInfo should only contain getters to access TableGen generated physical register data. It must not be extended with virtual methods.

Definition at line 149 of file MCRegisterInfo.h.

Member Typedef Documentation

◆ regclass_iterator

Definition at line 151 of file MCRegisterInfo.h.

Constructor & Destructor Documentation

◆ ~MCRegisterInfo()

virtual llvm::MCRegisterInfo::~MCRegisterInfo ( )
inlinevirtual

Definition at line 274 of file MCRegisterInfo.h.

Member Function Documentation

◆ get()

const MCRegisterDesc & llvm::MCRegisterInfo::get ( MCRegister  Reg) const
inline

◆ getCodeViewRegNum()

int MCRegisterInfo::getCodeViewRegNum ( MCRegister  RegNum) const

Map a target register to an equivalent CodeView register number.

Definition at line 200 of file MCRegisterInfo.cpp.

References getName(), getNumRegs(), I, and llvm::report_fatal_error().

◆ getDwarfRegNum()

int64_t MCRegisterInfo::getDwarfRegNum ( MCRegister  RegNum,
bool  isEH 
) const
virtual

Map a target register to an equivalent dwarf register number.

Returns -1 if there is no equivalent value. The second parameter allows targets to use different numberings for EH info and debugging info.

Definition at line 144 of file MCRegisterInfo.cpp.

References I, and Size.

Referenced by llvm::DwarfCompileUnit::addLocationAttribute(), and getDwarfRegNumFromDwarfEHRegNum().

◆ getDwarfRegNumFromDwarfEHRegNum()

int64_t MCRegisterInfo::getDwarfRegNumFromDwarfEHRegNum ( uint64_t  RegNum) const

Map a target EH register number to an equivalent DWARF register number.

Definition at line 175 of file MCRegisterInfo.cpp.

References getDwarfRegNum(), and getLLVMRegNum().

◆ getEncodingValue()

uint16_t llvm::MCRegisterInfo::getEncodingValue ( MCRegister  Reg) const
inline

◆ getLLVMRegNum()

std::optional< MCRegister > MCRegisterInfo::getLLVMRegNum ( uint64_t  RegNum,
bool  isEH 
) const

Map a dwarf register back to a target register.

Returns std::nullopt if there is no mapping.

Definition at line 161 of file MCRegisterInfo.cpp.

References llvm::MCRegister::from(), I, and Size.

Referenced by llvm::ARMAsmBackendDarwin::generateCompactUnwindEncoding(), and getDwarfRegNumFromDwarfEHRegNum().

◆ getMatchingSuperReg()

MCRegister MCRegisterInfo::getMatchingSuperReg ( MCRegister  Reg,
unsigned  SubIdx,
const MCRegisterClass RC 
) const

◆ getName()

const char * llvm::MCRegisterInfo::getName ( MCRegister  RegNo) const
inline

◆ getNumRegClasses()

unsigned llvm::MCRegisterInfo::getNumRegClasses ( ) const
inline

Definition at line 460 of file MCRegisterInfo.h.

References regclass_begin(), and regclass_end().

Referenced by getRegClass().

◆ getNumRegs()

unsigned llvm::MCRegisterInfo::getNumRegs ( ) const
inline

◆ getNumRegUnits()

unsigned llvm::MCRegisterInfo::getNumRegUnits ( ) const
inline

Return the number of (native) register units in the target.

Register units are numbered from 0 to getNumRegUnits() - 1. They can be accessed through MCRegUnitIterator defined below.

Definition at line 428 of file MCRegisterInfo.h.

Referenced by llvm::LiveRegUnits::addRegsInMask(), llvm::ReachingDefAnalysis::init(), llvm::LiveRegMatrix::init(), llvm::rdf::PhysicalRegisterInfo::PhysicalRegisterInfo(), llvm::LiveRegUnits::removeRegsNotPreserved(), and llvm::RegisterClassInfo::runOnMachineFunction().

◆ getNumSubRegIndices()

unsigned llvm::MCRegisterInfo::getNumSubRegIndices ( ) const
inline

◆ getProgramCounter()

MCRegister llvm::MCRegisterInfo::getProgramCounter ( ) const
inline

Return the register which is the program counter.

Definition at line 362 of file MCRegisterInfo.h.

Referenced by llvm::MCInstrAnalysis::mayAffectControlFlow(), and llvm::MCInstrDesc::mayAffectControlFlow().

◆ getRARegister()

MCRegister llvm::MCRegisterInfo::getRARegister ( ) const
inline

This method should return the register where the return address can be found.

Definition at line 357 of file MCRegisterInfo.h.

References RAReg.

Referenced by llvm::MipsAsmPrinter::emitFrameDirective().

◆ getRegClass()

const MCRegisterClass & llvm::MCRegisterInfo::getRegClass ( unsigned  i) const
inline

◆ getRegClassName()

const char * llvm::MCRegisterInfo::getRegClassName ( const MCRegisterClass Class) const
inline

Definition at line 471 of file MCRegisterInfo.h.

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

◆ getSEHRegNum()

int MCRegisterInfo::getSEHRegNum ( MCRegister  RegNum) const

Map a target register to an equivalent SEH register number.

Returns LLVM register number if there is no equivalent value.

Definition at line 194 of file MCRegisterInfo.cpp.

References I.

Referenced by encodeSEHRegNum().

◆ getSubReg()

MCRegister MCRegisterInfo::getSubReg ( MCRegister  Reg,
unsigned  Idx 
) const

◆ getSubRegIndex()

unsigned MCRegisterInfo::getSubRegIndex ( MCRegister  RegNo,
MCRegister  SubRegNo 
) const

For a given register pair, return the sub-register index if the second register is a sub-register of the first.

Return zero otherwise.

Definition at line 130 of file MCRegisterInfo.cpp.

References assert(), get(), getNumRegs(), SubReg, llvm::MCRegisterDesc::SubRegIndices, and subregs().

Referenced by llvm::rdf::PhysicalRegisterInfo::mapTo().

◆ InitMCRegisterInfo()

void llvm::MCRegisterInfo::InitMCRegisterInfo ( const MCRegisterDesc D,
unsigned  NR,
unsigned  RA,
unsigned  PC,
const MCRegisterClass C,
unsigned  NC,
const MCPhysReg(*)  RURoots[2],
unsigned  NRU,
const int16_t *  DL,
const LaneBitmask RUMS,
const char Strings,
const char ClassStrings,
const uint16_t SubIndices,
unsigned  NumIndices,
const uint16_t RET 
)
inline

Initialize MCRegisterInfo, called by TableGen auto-generated routines.

DO NOT USE.

Definition at line 278 of file MCRegisterInfo.h.

References llvm::CallingConv::C, D, DL, NC, RA, and RAReg.

◆ isArtificial()

bool llvm::MCRegisterInfo::isArtificial ( MCRegister  RegNo) const
inline

Returns true if the given register is artificial, which means it represents a regunit that is not separately addressable but still needs to be modelled, such as the top 16-bits of a 32-bit GPR.

Definition at line 405 of file MCRegisterInfo.h.

References get(), and llvm::MCRegisterDesc::IsArtificial.

Referenced by isArtificialRegUnit().

◆ isArtificialRegUnit()

bool MCRegisterInfo::isArtificialRegUnit ( MCRegUnit  Unit) const

Returns true when the given register unit is considered artificial.

Register units are considered artificial when at least one of the root registers is artificial.

Definition at line 224 of file MCRegisterInfo.cpp.

References isArtificial(), and llvm::MCRegUnitRootIterator::isValid().

Referenced by llvm::LiveIntervals::addKillFlags().

◆ isConstant()

bool llvm::MCRegisterInfo::isConstant ( MCRegister  RegNo) const
inline

Returns true if the given register is constant.

Definition at line 400 of file MCRegisterInfo.h.

References get(), and llvm::MCRegisterDesc::IsConstant.

Referenced by llvm::mca::InstrBuilder::createInstruction().

◆ isSubRegister()

bool llvm::MCRegisterInfo::isSubRegister ( MCRegister  RegA,
MCRegister  RegB 
) const
inline

Returns true if RegB is a sub-register of RegA.

Definition at line 483 of file MCRegisterInfo.h.

References isSuperRegister().

Referenced by llvm::MachineInstr::addRegisterDead(), and llvm::MachineInstr::addRegisterKilled().

◆ isSubRegisterEq()

bool llvm::MCRegisterInfo::isSubRegisterEq ( MCRegister  RegA,
MCRegister  RegB 
) const
inline

Returns true if RegB is a sub-register of RegA or if RegB == RegA.

Definition at line 491 of file MCRegisterInfo.h.

References isSuperRegisterEq().

Referenced by llvm::MCInstrDesc::hasDefOfPhysReg(), and isSuperOrSubRegisterEq().

◆ isSuperOrSubRegisterEq()

bool llvm::MCRegisterInfo::isSuperOrSubRegisterEq ( MCRegister  RegA,
MCRegister  RegB 
) const
inline

Returns true if RegB is a super-register or sub-register of RegA or if RegB == RegA.

Definition at line 503 of file MCRegisterInfo.h.

References isSubRegisterEq(), and isSuperRegister().

◆ isSuperRegister()

bool llvm::MCRegisterInfo::isSuperRegister ( MCRegister  RegA,
MCRegister  RegB 
) const
inline

Returns true if RegB is a super-register of RegA.

Definition at line 625 of file MCRegisterInfo.h.

References llvm::is_contained(), and superregs().

Referenced by llvm::MachineInstr::addRegisterDead(), llvm::MachineInstr::addRegisterKilled(), isSubRegister(), isSuperOrSubRegisterEq(), and isSuperRegisterEq().

◆ isSuperRegisterEq()

bool llvm::MCRegisterInfo::isSuperRegisterEq ( MCRegister  RegA,
MCRegister  RegB 
) const
inline

Returns true if RegB is a super-register of RegA or if RegB == RegA.

Definition at line 497 of file MCRegisterInfo.h.

References isSuperRegister().

Referenced by isSubRegisterEq().

◆ mapDwarfRegsToLLVMRegs()

void llvm::MCRegisterInfo::mapDwarfRegsToLLVMRegs ( const DwarfLLVMRegPair Map,
unsigned  Size,
bool  isEH 
)
inline

Used to initialize Dwarf register to LLVM register number mapping.

Called by TableGen auto-generated routines. DO NOT USE.

Definition at line 331 of file MCRegisterInfo.h.

References Size.

◆ mapLLVMRegsToDwarfRegs()

void llvm::MCRegisterInfo::mapLLVMRegsToDwarfRegs ( const DwarfLLVMRegPair Map,
unsigned  Size,
bool  isEH 
)
inline

Used to initialize LLVM register to Dwarf register number mapping.

Called by TableGen auto-generated routines. DO NOT USE.

Definition at line 317 of file MCRegisterInfo.h.

References Size.

◆ mapLLVMRegToCVReg()

void llvm::MCRegisterInfo::mapLLVMRegToCVReg ( MCRegister  LLVMReg,
int  CVReg 
)
inline

Definition at line 351 of file MCRegisterInfo.h.

◆ mapLLVMRegToSEHReg()

void llvm::MCRegisterInfo::mapLLVMRegToSEHReg ( MCRegister  LLVMReg,
int  SEHReg 
)
inline

mapLLVMRegToSEHReg - Used to initialize LLVM register to SEH register number mapping.

By default the SEH register number is just the same as the LLVM register number. FIXME: TableGen these numbers. Currently this requires target specific initialization code.

Definition at line 347 of file MCRegisterInfo.h.

◆ operator[]()

const MCRegisterDesc & llvm::MCRegisterInfo::operator[] ( MCRegister  Reg) const
inline

Definition at line 366 of file MCRegisterInfo.h.

References assert(), and Reg.

Referenced by get().

◆ regclass_begin()

regclass_iterator llvm::MCRegisterInfo::regclass_begin ( ) const
inline

Definition at line 454 of file MCRegisterInfo.h.

Referenced by getNumRegClasses(), and regclasses().

◆ regclass_end()

regclass_iterator llvm::MCRegisterInfo::regclass_end ( ) const
inline

Definition at line 455 of file MCRegisterInfo.h.

Referenced by getNumRegClasses(), and regclasses().

◆ regclasses()

iterator_range< regclass_iterator > llvm::MCRegisterInfo::regclasses ( ) const
inline

Definition at line 456 of file MCRegisterInfo.h.

References llvm::make_range(), regclass_begin(), and regclass_end().

◆ regsOverlap()

bool MCRegisterInfo::regsOverlap ( MCRegister  RegA,
MCRegister  RegB 
) const

Returns true if the two registers are equal or alias each other.

Definition at line 211 of file MCRegisterInfo.cpp.

References regunits().

Referenced by llvm::AArch64RegisterInfo::explainReservedReg(), llvm::AArch64RegisterInfo::isAsmClobberable(), and llvm::TargetRegisterInfo::regsOverlap().

◆ regunits()

iterator_range< MCRegUnitIterator > llvm::MCRegisterInfo::regunits ( MCRegister  Reg) const
inline

◆ sub_and_superregs_inclusive()

detail::concat_range< const MCPhysReg, iterator_range< MCSubRegIterator >, iterator_range< MCSuperRegIterator > > llvm::MCRegisterInfo::sub_and_superregs_inclusive ( MCRegister  Reg) const
inline

Return an iterator range over all sub- and super-registers of Reg, including Reg.

Definition at line 797 of file MCRegisterInfo.h.

References Reg, subregs_inclusive(), and superregs().

◆ subregs()

iterator_range< MCSubRegIterator > llvm::MCRegisterInfo::subregs ( MCRegister  Reg) const
inline

◆ subregs_inclusive()

iterator_range< MCSubRegIterator > llvm::MCRegisterInfo::subregs_inclusive ( MCRegister  Reg) const
inline

Return an iterator range over all sub-registers of Reg, including Reg.

Definition at line 781 of file MCRegisterInfo.h.

References llvm::make_range(), MCSubRegIterator, and Reg.

Referenced by llvm::rdf::Liveness::resetKills(), llvm::MipsRegInfoRecord::SetPhysRegUsed(), and sub_and_superregs_inclusive().

◆ superregs()

iterator_range< MCSuperRegIterator > llvm::MCRegisterInfo::superregs ( MCRegister  Reg) const
inline

◆ superregs_inclusive()

iterator_range< MCSuperRegIterator > llvm::MCRegisterInfo::superregs_inclusive ( MCRegister  Reg) const
inline

Return an iterator range over all super-registers of Reg, including Reg.

Definition at line 791 of file MCRegisterInfo.h.

References llvm::make_range(), MCSuperRegIterator, and Reg.

Referenced by llvm::TargetRegisterInfo::markSuperRegs(), and llvm::rdf::PhysicalRegisterInfo::PhysicalRegisterInfo().

Friends And Related Function Documentation

◆ MCRegAliasIterator

friend class MCRegAliasIterator
friend

Definition at line 272 of file MCRegisterInfo.h.

◆ MCRegUnitIterator

friend class MCRegUnitIterator
friend

Definition at line 269 of file MCRegisterInfo.h.

Referenced by regunits().

◆ MCRegUnitMaskIterator

friend class MCRegUnitMaskIterator
friend

Definition at line 270 of file MCRegisterInfo.h.

◆ MCRegUnitRootIterator

friend class MCRegUnitRootIterator
friend

Definition at line 271 of file MCRegisterInfo.h.

◆ MCSubRegIndexIterator

friend class MCSubRegIndexIterator
friend

Definition at line 267 of file MCRegisterInfo.h.

◆ MCSubRegIterator

friend class MCSubRegIterator
friend

Definition at line 266 of file MCRegisterInfo.h.

Referenced by subregs(), and subregs_inclusive().

◆ MCSuperRegIterator

friend class MCSuperRegIterator
friend

Definition at line 268 of file MCRegisterInfo.h.

Referenced by superregs(), and superregs_inclusive().


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