LLVM 20.0.0git
Public Member Functions | Public Attributes | List of all members
llvm::RegsForValue Struct Reference

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< Register, 4 > &regs, MVT regvt, EVT valuevt, std::optional< CallingConv::ID > CC=std::nullopt)
 
 RegsForValue (LLVMContext &Context, const TargetLowering &TLI, const DataLayout &DL, Register 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< Register, 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< Register, 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::IDCallConv
 Records if this value needs to be treated in an ABI dependant manner, different to normal type legalization.
 

Detailed Description

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 726 of file SelectionDAGBuilder.h.

Constructor & Destructor Documentation

◆ RegsForValue() [1/3]

llvm::RegsForValue::RegsForValue ( )
default

◆ RegsForValue() [2/3]

RegsForValue::RegsForValue ( const SmallVector< Register, 4 > &  regs,
MVT  regvt,
EVT  valuevt,
std::optional< CallingConv::ID CC = std::nullopt 
)

Definition at line 846 of file SelectionDAGBuilder.cpp.

References llvm::size().

◆ RegsForValue() [3/3]

RegsForValue::RegsForValue ( LLVMContext Context,
const TargetLowering TLI,
const DataLayout DL,
Register  Reg,
Type Ty,
std::optional< CallingConv::ID CC 
)

Member Function Documentation

◆ AddInlineAsmOperands()

void RegsForValue::AddInlineAsmOperands ( InlineAsm::Kind  Code,
bool  HasMatching,
unsigned  MatchingIdx,
const SDLoc dl,
SelectionDAG DAG,
std::vector< SDValue > &  Ops 
) const

◆ append()

void llvm::RegsForValue::append ( const RegsForValue RHS)
inline

Add the specified values to this one.

Definition at line 763 of file SelectionDAGBuilder.h.

References llvm::SmallVectorTemplateBase< T, bool >::push_back(), RegCount, Regs, RegVTs, RHS, and ValueVTs.

◆ getCopyFromRegs()

SDValue RegsForValue::getCopyFromRegs ( SelectionDAG DAG,
FunctionLoweringInfo FuncInfo,
const SDLoc dl,
SDValue Chain,
SDValue Glue,
const Value V = nullptr 
) const

◆ getCopyToRegs()

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 962 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::ISD::TokenFactor, ValueVTs, and llvm::ISD::ZERO_EXTEND.

Referenced by llvm::SelectionDAGBuilder::CopyValueToVirtualRegister(), llvm::SelectionDAGBuilder::LowerAsSTATEPOINT(), and llvm::SelectionDAGBuilder::LowerStatepoint().

◆ getRegsAndSizes()

SmallVector< std::pair< Register, TypeSize >, 4 > RegsForValue::getRegsAndSizes ( ) const

◆ isABIMangled()

bool llvm::RegsForValue::isABIMangled ( ) const
inline

Definition at line 760 of file SelectionDAGBuilder.h.

References CallConv.

Referenced by getCopyFromRegs(), getCopyToRegs(), and RegsForValue().

◆ occupiesMultipleRegs()

bool llvm::RegsForValue::occupiesMultipleRegs ( ) const
inline

Member Data Documentation

◆ CallConv

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 751 of file SelectionDAGBuilder.h.

Referenced by getCopyFromRegs(), getCopyToRegs(), isABIMangled(), and RegsForValue().

◆ RegCount

SmallVector<unsigned, 4> llvm::RegsForValue::RegCount

This list holds the number of registers for each value.

Definition at line 747 of file SelectionDAGBuilder.h.

Referenced by append(), getCopyFromRegs(), getCopyToRegs(), getRegsAndSizes(), occupiesMultipleRegs(), and RegsForValue().

◆ Regs

SmallVector<Register, 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 744 of file SelectionDAGBuilder.h.

Referenced by AddInlineAsmOperands(), append(), getCopyFromRegs(), getCopyToRegs(), getRegsAndSizes(), and RegsForValue().

◆ RegVTs

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 739 of file SelectionDAGBuilder.h.

Referenced by AddInlineAsmOperands(), append(), getCopyFromRegs(), getCopyToRegs(), getRegsAndSizes(), and RegsForValue().

◆ ValueVTs

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 729 of file SelectionDAGBuilder.h.

Referenced by AddInlineAsmOperands(), append(), getCopyFromRegs(), getCopyToRegs(), and RegsForValue().


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