LLVM 19.0.0git
|
This struct represents the registers (physical or virtual) that a particular set of values is assigned, and the type information about the value. More...
#include "CodeGen/SelectionDAG/SelectionDAGBuilder.h"
Public Member Functions | |
RegsForValue ()=default | |
RegsForValue (const SmallVector< unsigned, 4 > ®s, MVT regvt, EVT valuevt, std::optional< CallingConv::ID > CC=std::nullopt) | |
RegsForValue (LLVMContext &Context, const TargetLowering &TLI, const DataLayout &DL, unsigned Reg, Type *Ty, std::optional< CallingConv::ID > CC) | |
bool | isABIMangled () const |
void | append (const RegsForValue &RHS) |
Add the specified values to this one. | |
SDValue | getCopyFromRegs (SelectionDAG &DAG, FunctionLoweringInfo &FuncInfo, const SDLoc &dl, SDValue &Chain, SDValue *Glue, const Value *V=nullptr) const |
Emit a series of CopyFromReg nodes that copies from this value and returns the result as a ValueVTs value. | |
void | getCopyToRegs (SDValue Val, SelectionDAG &DAG, const SDLoc &dl, SDValue &Chain, SDValue *Glue, const Value *V=nullptr, ISD::NodeType PreferredExtendType=ISD::ANY_EXTEND) const |
Emit a series of CopyToReg nodes that copies the specified value into the registers specified by this object. | |
void | AddInlineAsmOperands (InlineAsm::Kind Code, bool HasMatching, unsigned MatchingIdx, const SDLoc &dl, SelectionDAG &DAG, std::vector< SDValue > &Ops) const |
Add this value to the specified inlineasm node operand list. | |
bool | occupiesMultipleRegs () const |
Check if the total RegCount is greater than one. | |
SmallVector< std::pair< unsigned, TypeSize >, 4 > | getRegsAndSizes () const |
Return a list of registers and their sizes. | |
Public Attributes | |
SmallVector< EVT, 4 > | ValueVTs |
The value types of the values, which may not be legal, and may need be promoted or synthesized from one or more registers. | |
SmallVector< MVT, 4 > | RegVTs |
The value types of the registers. | |
SmallVector< unsigned, 4 > | Regs |
This list holds the registers assigned to the values. | |
SmallVector< unsigned, 4 > | RegCount |
This list holds the number of registers for each value. | |
std::optional< CallingConv::ID > | CallConv |
Records if this value needs to be treated in an ABI dependant manner, different to normal type legalization. | |
This struct represents the registers (physical or virtual) that a particular set of values is assigned, and the type information about the value.
The most common situation is to represent one value at a time, but struct or array values are handled element-wise as multiple values. The splitting of aggregates is performed recursively, so that we never have aggregate-typed registers. The values at this point do not necessarily have legal types, so each value may require one or more registers of some legal type.
Definition at line 720 of file SelectionDAGBuilder.h.
|
default |
RegsForValue::RegsForValue | ( | const SmallVector< unsigned, 4 > & | regs, |
MVT | regvt, | ||
EVT | valuevt, | ||
std::optional< CallingConv::ID > | CC = std::nullopt |
||
) |
Definition at line 837 of file SelectionDAGBuilder.cpp.
References llvm::size().
RegsForValue::RegsForValue | ( | LLVMContext & | Context, |
const TargetLowering & | TLI, | ||
const DataLayout & | DL, | ||
unsigned | Reg, | ||
Type * | Ty, | ||
std::optional< CallingConv::ID > | CC | ||
) |
Definition at line 842 of file SelectionDAGBuilder.cpp.
References CallConv, CC, llvm::ComputeValueVTs(), Context, DL, llvm::TargetLoweringBase::getNumRegisters(), llvm::TargetLoweringBase::getNumRegistersForCallingConv(), llvm::TargetLoweringBase::getRegisterType(), llvm::TargetLoweringBase::getRegisterTypeForCallingConv(), isABIMangled(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), RegCount, Regs, RegVTs, and ValueVTs.
void RegsForValue::AddInlineAsmOperands | ( | InlineAsm::Kind | Code, |
bool | HasMatching, | ||
unsigned | MatchingIdx, | ||
const SDLoc & | dl, | ||
SelectionDAG & | DAG, | ||
std::vector< SDValue > & | Ops | ||
) | const |
Add this value to the specified inlineasm node operand list.
This adds the code marker, matching input operand index (if applicable), and includes the number of values added into it.
Definition at line 1009 of file SelectionDAGBuilder.cpp.
References assert(), llvm::InlineAsm::Clobber, llvm::SmallVectorBase< Size_T >::empty(), llvm::SmallVectorTemplateCommon< T, typename >::front(), llvm::SelectionDAG::getContext(), llvm::MachineFunction::getFrameInfo(), llvm::TargetRegisterClass::getID(), llvm::SelectionDAG::getMachineFunction(), llvm::TargetLoweringBase::getNumRegisters(), llvm::MachineFunction::getRegInfo(), llvm::SelectionDAG::getRegister(), llvm::TargetLoweringBase::getStackPointerRegisterToSaveRestore(), llvm::SelectionDAG::getTargetConstant(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::MachineFrameInfo::hasOpaqueSPAdjustment(), I, llvm::Register::isVirtualRegister(), MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), Regs, RegVTs, llvm::SmallVectorBase< Size_T >::size(), and ValueVTs.
|
inline |
Add the specified values to this one.
Definition at line 757 of file SelectionDAGBuilder.h.
References llvm::SmallVectorImpl< T >::append(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), RegCount, Regs, RegVTs, RHS, and ValueVTs.
SDValue RegsForValue::getCopyFromRegs | ( | SelectionDAG & | DAG, |
FunctionLoweringInfo & | FuncInfo, | ||
const SDLoc & | dl, | ||
SDValue & | Chain, | ||
SDValue * | Glue, | ||
const Value * | V = nullptr |
||
) | const |
Emit a series of CopyFromReg nodes that copies from this value and returns the result as a ValueVTs value.
This uses Chain/Flag as the input and updates them for the output Chain/Flag. If the Flag pointer is NULL, no flag is used.
Definition at line 866 of file SelectionDAGBuilder.cpp.
References assert(), llvm::ISD::AssertSext, llvm::ISD::AssertZext, llvm::SmallVectorTemplateCommon< T, typename >::begin(), CallConv, llvm::SmallVectorImpl< T >::clear(), llvm::KnownBits::countMinLeadingZeros(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getContext(), getCopyFromParts(), llvm::SelectionDAG::getCopyFromReg(), llvm::EVT::getIntegerVT(), llvm::FunctionLoweringInfo::GetLiveOutRegInfo(), llvm::SelectionDAG::getNode(), llvm::TargetLoweringBase::getRegisterTypeForCallingConv(), llvm::MVT::getScalarSizeInBits(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SelectionDAG::getValueType(), llvm::SelectionDAG::getVTList(), isABIMangled(), llvm::MVT::isInteger(), llvm::Register::isVirtualRegister(), llvm::FunctionLoweringInfo::LiveOutInfo::Known, llvm::ISD::MERGE_VALUES, llvm::FunctionLoweringInfo::LiveOutInfo::NumSignBits, P, RegCount, Regs, RegSize, RegVTs, llvm::SmallVectorImpl< T >::resize(), and ValueVTs.
Referenced by llvm::SelectionDAGBuilder::getCopyFromRegs(), and llvm::SelectionDAGBuilder::getValueImpl().
void RegsForValue::getCopyToRegs | ( | SDValue | Val, |
SelectionDAG & | DAG, | ||
const SDLoc & | dl, | ||
SDValue & | Chain, | ||
SDValue * | Glue, | ||
const Value * | V = nullptr , |
||
ISD::NodeType | PreferredExtendType = ISD::ANY_EXTEND |
||
) | const |
Emit a series of CopyToReg nodes that copies the specified value into the registers specified by this object.
This uses Chain/Flag as the input and updates them for the output Chain/Flag. If the Flag pointer is nullptr, no flag is used. If V is not nullptr, then it is used in printing better diagnostic messages on error.
Definition at line 953 of file SelectionDAGBuilder.cpp.
References llvm::ISD::ANY_EXTEND, CallConv, llvm::SelectionDAG::getContext(), getCopyToParts(), llvm::SelectionDAG::getCopyToReg(), llvm::SelectionDAG::getNode(), llvm::TargetLoweringBase::getRegisterTypeForCallingConv(), llvm::SDValue::getResNo(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDValue::getValue(), isABIMangled(), llvm::TargetLoweringBase::isZExtFree(), RegCount, Regs, RegVTs, llvm::SmallVectorBase< Size_T >::size(), llvm::ISD::TokenFactor, ValueVTs, and llvm::ISD::ZERO_EXTEND.
Referenced by llvm::SelectionDAGBuilder::CopyValueToVirtualRegister(), llvm::SelectionDAGBuilder::LowerAsSTATEPOINT(), and llvm::SelectionDAGBuilder::LowerStatepoint().
SmallVector< std::pair< unsigned, TypeSize >, 4 > RegsForValue::getRegsAndSizes | ( | ) | const |
Return a list of registers and their sizes.
Definition at line 1063 of file SelectionDAGBuilder.cpp.
References llvm::MVT::getSizeInBits(), I, llvm::SmallVectorTemplateBase< T, bool >::push_back(), RegCount, Regs, RegVTs, and llvm::zip_first().
Referenced by llvm::SelectionDAGBuilder::handleDebugValue().
|
inline |
Definition at line 754 of file SelectionDAGBuilder.h.
References CallConv.
Referenced by getCopyFromRegs(), getCopyToRegs(), and RegsForValue().
|
inline |
Check if the total RegCount is greater than one.
Definition at line 789 of file SelectionDAGBuilder.h.
References llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::SmallVectorTemplateCommon< T, typename >::end(), and RegCount.
Referenced by llvm::SelectionDAGBuilder::handleDebugValue().
std::optional<CallingConv::ID> llvm::RegsForValue::CallConv |
Records if this value needs to be treated in an ABI dependant manner, different to normal type legalization.
Definition at line 745 of file SelectionDAGBuilder.h.
Referenced by getCopyFromRegs(), getCopyToRegs(), isABIMangled(), and RegsForValue().
SmallVector<unsigned, 4> llvm::RegsForValue::RegCount |
This list holds the number of registers for each value.
Definition at line 741 of file SelectionDAGBuilder.h.
Referenced by append(), getCopyFromRegs(), getCopyToRegs(), getRegsAndSizes(), occupiesMultipleRegs(), and RegsForValue().
SmallVector<unsigned, 4> llvm::RegsForValue::Regs |
This list holds the registers assigned to the values.
Each legal or promoted value requires one register, and each expanded value requires multiple registers.
Definition at line 738 of file SelectionDAGBuilder.h.
Referenced by AddInlineAsmOperands(), append(), getCopyFromRegs(), getCopyToRegs(), getRegsAndSizes(), and RegsForValue().
SmallVector<MVT, 4> llvm::RegsForValue::RegVTs |
The value types of the registers.
This is the same size as ValueVTs and it records, for each value, what the type of the assigned register or registers are. (Individual values are never synthesized from more than one type of register.)
With virtual registers, the contents of RegVTs is redundant with TLI's getRegisterType member function, however when with physical registers it is necessary to have a separate record of the types.
Definition at line 733 of file SelectionDAGBuilder.h.
Referenced by AddInlineAsmOperands(), append(), getCopyFromRegs(), getCopyToRegs(), getRegsAndSizes(), and RegsForValue().
SmallVector<EVT, 4> llvm::RegsForValue::ValueVTs |
The value types of the values, which may not be legal, and may need be promoted or synthesized from one or more registers.
Definition at line 723 of file SelectionDAGBuilder.h.
Referenced by AddInlineAsmOperands(), append(), getCopyFromRegs(), getCopyToRegs(), and RegsForValue().