struct CallLowering::ValueHandler

Declaration

struct CallLowering::ValueHandler { /* full declaration omitted */ };

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:226

Member Variables

public llvm::MachineIRBuilder& MIRBuilder
public llvm::MachineRegisterInfo& MRI
public const bool IsIncomingArgumentHandler

Method Overview

  • public ValueHandler(bool IsIncoming, llvm::MachineIRBuilder & MIRBuilder, llvm::MachineRegisterInfo & MRI)
  • public virtual unsigned int assignCustomValue(llvm::CallLowering::ArgInfo & Arg, ArrayRef<llvm::CCValAssign> VAs, std::function<void ()> * Thunk = nullptr)
  • public virtual void assignValueToAddress(llvm::Register ValVReg, llvm::Register Addr, llvm::LLT MemTy, llvm::MachinePointerInfo & MPO, llvm::CCValAssign & VA)
  • public virtual void assignValueToAddress(const llvm::CallLowering::ArgInfo & Arg, unsigned int ValRegIndex, llvm::Register Addr, llvm::LLT MemTy, llvm::MachinePointerInfo & MPO, llvm::CCValAssign & VA)
  • public virtual void assignValueToReg(llvm::Register ValVReg, llvm::Register PhysReg, llvm::CCValAssign VA)
  • public void copyArgumentMemory(const llvm::CallLowering::ArgInfo & Arg, llvm::Register DstPtr, llvm::Register SrcPtr, const llvm::MachinePointerInfo & DstPtrInfo, llvm::Align DstAlign, const llvm::MachinePointerInfo & SrcPtrInfo, llvm::Align SrcAlign, uint64_t MemSize, llvm::CCValAssign & VA) const
  • public llvm::Register extendRegister(llvm::Register ValReg, llvm::CCValAssign & VA, unsigned int MaxSizeBits = 0)
  • public virtual llvm::Register getStackAddress(uint64_t MemSize, int64_t Offset, llvm::MachinePointerInfo & MPO, ISD::ArgFlagsTy Flags)
  • public virtual llvm::LLT getStackValueStoreType(const llvm::DataLayout & DL, const llvm::CCValAssign & VA, ISD::ArgFlagsTy Flags) const
  • public bool isIncomingArgumentHandler() const
  • public virtual ~ValueHandler()

Methods

ValueHandler(bool IsIncoming,
             llvm::MachineIRBuilder& MIRBuilder,
             llvm::MachineRegisterInfo& MRI)

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:231

Parameters

bool IsIncoming
llvm::MachineIRBuilder& MIRBuilder
llvm::MachineRegisterInfo& MRI

virtual unsigned int assignCustomValue(
    llvm::CallLowering::ArgInfo& Arg,
    ArrayRef<llvm::CCValAssign> VAs,
    std::function<void()>* Thunk = nullptr)

Description

Handle custom values, which may be passed into one or more of \p VAs. \p If the handler wants the assignments to be delayed until after mem loc assignments, then it sets \p Thunk to the thunk to do the assignment.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:292

Parameters

llvm::CallLowering::ArgInfo& Arg
ArrayRef<llvm::CCValAssign> VAs
std::function<void()>* Thunk = nullptr

Returns

The number of \p VAs that have been assigned after the first one, and which should therefore be skipped from further processing.

virtual void assignValueToAddress(
    llvm::Register ValVReg,
    llvm::Register Addr,
    llvm::LLT MemTy,
    llvm::MachinePointerInfo& MPO,
    llvm::CCValAssign& VA)

Description

The specified value has been assigned to a stack location. Load or store it there, with appropriate extension if necessary.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:271

Parameters

llvm::Register ValVReg
llvm::Register Addr
llvm::LLT MemTy
llvm::MachinePointerInfo& MPO
llvm::CCValAssign& VA

virtual void assignValueToAddress(
    const llvm::CallLowering::ArgInfo& Arg,
    unsigned int ValRegIndex,
    llvm::Register Addr,
    llvm::LLT MemTy,
    llvm::MachinePointerInfo& MPO,
    llvm::CCValAssign& VA)

Description

An overload which takes an ArgInfo if additional information about the arg is needed. \p ValRegIndex is the index in \p Arg.Regs for the value to store.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:278

Parameters

const llvm::CallLowering::ArgInfo& Arg
unsigned int ValRegIndex
llvm::Register Addr
llvm::LLT MemTy
llvm::MachinePointerInfo& MPO
llvm::CCValAssign& VA

virtual void assignValueToReg(
    llvm::Register ValVReg,
    llvm::Register PhysReg,
    llvm::CCValAssign VA)

Description

The specified value has been assigned to a physical register, handle the appropriate COPY (either to or from) and mark any relevant uses/defines as needed.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:265

Parameters

llvm::Register ValVReg
llvm::Register PhysReg
llvm::CCValAssign VA

void copyArgumentMemory(
    const llvm::CallLowering::ArgInfo& Arg,
    llvm::Register DstPtr,
    llvm::Register SrcPtr,
    const llvm::MachinePointerInfo& DstPtrInfo,
    llvm::Align DstAlign,
    const llvm::MachinePointerInfo& SrcPtrInfo,
    llvm::Align SrcAlign,
    uint64_t MemSize,
    llvm::CCValAssign& VA) const

Description

Do a memory copy of \p MemSize bytes from \p SrcPtr to \p DstPtr. This is necessary for outgoing stack-passed byval arguments.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:302

Parameters

const llvm::CallLowering::ArgInfo& Arg
llvm::Register DstPtr
llvm::Register SrcPtr
const llvm::MachinePointerInfo& DstPtrInfo
llvm::Align DstAlign
const llvm::MachinePointerInfo& SrcPtrInfo
llvm::Align SrcAlign
uint64_t MemSize
llvm::CCValAssign& VA

llvm::Register extendRegister(
    llvm::Register ValReg,
    llvm::CCValAssign& VA,
    unsigned int MaxSizeBits = 0)

Description

Extend a register to the location type given in VA, capped at extending to at most MaxSize bits. If MaxSizeBits is 0 then no maximum is set.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:309

Parameters

llvm::Register ValReg
llvm::CCValAssign& VA
unsigned int MaxSizeBits = 0

virtual llvm::Register getStackAddress(
    uint64_t MemSize,
    int64_t Offset,
    llvm::MachinePointerInfo& MPO,
    ISD::ArgFlagsTy Flags)

Description

Materialize a VReg containing the address of the specified stack-based object. This is either based on a FrameIndex or direct SP manipulation, depending on the context. \p MPO should be initialized to an appropriate description of the address created.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:249

Parameters

uint64_t MemSize
int64_t Offset
llvm::MachinePointerInfo& MPO
ISD::ArgFlagsTy Flags

virtual llvm::LLT getStackValueStoreType(
    const llvm::DataLayout& DL,
    const llvm::CCValAssign& VA,
    ISD::ArgFlagsTy Flags) const

Description

Return the in-memory size to write for the argument at \p VA. This may be smaller than the allocated stack slot size. This is overridable primarily for targets to maintain compatibility with hacks around the existing DAG call lowering infrastructure.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:258

Parameters

const llvm::DataLayout& DL
const llvm::CCValAssign& VA
ISD::ArgFlagsTy Flags

bool isIncomingArgumentHandler() const

Description

Returns true if the handler is dealing with incoming arguments, i.e. those that move values from some physical location to vregs.

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:240

virtual ~ValueHandler()

Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:236