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

RegsForValue - 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 <SelectionDAGBuilder.h>

Collaboration diagram for llvm::RegsForValue:
[legend]

Public Member Functions

 RegsForValue ()
 
 RegsForValue (const SmallVector< unsigned, 4 > &regs, MVT regvt, EVT valuevt)
 
 RegsForValue (LLVMContext &Context, const TargetLowering &TLI, const DataLayout &DL, unsigned Reg, Type *Ty)
 
void append (const RegsForValue &RHS)
 append - Add the specified values to this one. More...
 
SDValue getCopyFromRegs (SelectionDAG &DAG, FunctionLoweringInfo &FuncInfo, SDLoc dl, SDValue &Chain, SDValue *Flag, const Value *V=nullptr) const
 getCopyFromRegs - Emit a series of CopyFromReg nodes that copies from this value and returns the result as a ValueVTs value. More...
 
void getCopyToRegs (SDValue Val, SelectionDAG &DAG, SDLoc dl, SDValue &Chain, SDValue *Flag, const Value *V=nullptr, ISD::NodeType PreferredExtendType=ISD::ANY_EXTEND) const
 getCopyToRegs - Emit a series of CopyToReg nodes that copies the specified value into the registers specified by this object. More...
 
void AddInlineAsmOperands (unsigned Kind, bool HasMatching, unsigned MatchingIdx, SDLoc dl, SelectionDAG &DAG, std::vector< SDValue > &Ops) const
 AddInlineAsmOperands - Add this value to the specified inlineasm node operand list. More...
 

Public Attributes

SmallVector< EVT, 4 > ValueVTs
 ValueVTs - The value types of the values, which may not be legal, and may need be promoted or synthesized from one or more registers. More...
 
SmallVector< MVT, 4 > RegVTs
 RegVTs - The value types of the registers. More...
 
SmallVector< unsigned, 4 > Regs
 Regs - This list holds the registers assigned to the values. More...
 

Detailed Description

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

Constructor & Destructor Documentation

RegsForValue::RegsForValue ( )

Definition at line 588 of file SelectionDAGBuilder.cpp.

RegsForValue::RegsForValue ( const SmallVector< unsigned, 4 > &  regs,
MVT  regvt,
EVT  valuevt 
)

Definition at line 590 of file SelectionDAGBuilder.cpp.

RegsForValue::RegsForValue ( LLVMContext Context,
const TargetLowering TLI,
const DataLayout DL,
unsigned  Reg,
Type Ty 
)

Member Function Documentation

void RegsForValue::AddInlineAsmOperands ( unsigned  Code,
bool  HasMatching,
unsigned  MatchingIdx,
SDLoc  dl,
SelectionDAG DAG,
std::vector< SDValue > &  Ops 
) const
void llvm::RegsForValue::append ( const RegsForValue RHS)
inline
SDValue RegsForValue::getCopyFromRegs ( SelectionDAG DAG,
FunctionLoweringInfo FuncInfo,
SDLoc  dl,
SDValue Chain,
SDValue Flag,
const Value V = nullptr 
) const
void RegsForValue::getCopyToRegs ( SDValue  Val,
SelectionDAG DAG,
SDLoc  dl,
SDValue Chain,
SDValue Flag,
const Value V = nullptr,
ISD::NodeType  PreferredExtendType = ISD::ANY_EXTEND 
) const

getCopyToRegs - 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.

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 711 of file SelectionDAGBuilder.cpp.

References llvm::ISD::ANY_EXTEND, llvm::SelectionDAG::getContext(), getCopyToParts(), llvm::SelectionDAG::getCopyToReg(), llvm::SelectionDAG::getNode(), llvm::TargetLoweringBase::getNumRegisters(), llvm::SDValue::getResNo(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDValue::getValue(), llvm::TargetLoweringBase::isZExtFree(), llvm::MVT::Other, Regs, RegVTs, llvm::SmallVectorTemplateCommon< T, typename >::size(), llvm::ISD::TokenFactor, ValueVTs, and llvm::ISD::ZERO_EXTEND.

Member Data Documentation

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

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

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

SmallVector<MVT, 4> llvm::RegsForValue::RegVTs

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

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

SmallVector<EVT, 4> llvm::RegsForValue::ValueVTs

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

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


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