struct CallLowering::ValueHandler

Declaration

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

Description

Argument handling is mostly uniform between the four places that make these decisions: function formal arguments, call instruction args, call instruction returns and function returns. However, once a decision has been made on where an argument should go, exactly what happens can vary slightly. This class abstracts the differences.

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

Member Variables

public llvm::MachineIRBuilder& MIRBuilder
public llvm::MachineRegisterInfo& MRI
public llvm::CCAssignFn* AssignFn

Method Overview

  • public ValueHandler(llvm::MachineIRBuilder & MIRBuilder, llvm::MachineRegisterInfo & MRI, llvm::CCAssignFn * AssignFn)
  • public virtual bool assignArg(unsigned int ValNo, llvm::MVT ValVT, llvm::MVT LocVT, CCValAssign::LocInfo LocInfo, const llvm::CallLowering::ArgInfo & Info, ISD::ArgFlagsTy Flags, llvm::CCState & State)
  • public virtual unsigned int assignCustomValue(const llvm::CallLowering::ArgInfo & Arg, ArrayRef<llvm::CCValAssign> VAs)
  • public virtual void assignValueToAddress(llvm::Register ValVReg, llvm::Register Addr, uint64_t Size, llvm::MachinePointerInfo & MPO, llvm::CCValAssign & VA)
  • public virtual void assignValueToReg(llvm::Register ValVReg, llvm::Register PhysReg, llvm::CCValAssign & VA)
  • public llvm::Register extendRegister(llvm::Register ValReg, llvm::CCValAssign & VA)
  • public virtual llvm::Register getStackAddress(uint64_t Size, int64_t Offset, llvm::MachinePointerInfo & MPO)
  • public virtual bool isIncomingArgumentHandler() const
  • public virtual ~ValueHandler()

Methods

ValueHandler(llvm::MachineIRBuilder& MIRBuilder,
             llvm::MachineRegisterInfo& MRI,
             llvm::CCAssignFn* AssignFn)

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

Parameters

llvm::MachineIRBuilder& MIRBuilder
llvm::MachineRegisterInfo& MRI
llvm::CCAssignFn* AssignFn

virtual bool assignArg(
    unsigned int ValNo,
    llvm::MVT ValVT,
    llvm::MVT LocVT,
    CCValAssign::LocInfo LocInfo,
    const llvm::CallLowering::ArgInfo& Info,
    ISD::ArgFlagsTy Flags,
    llvm::CCState& State)

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

Parameters

unsigned int ValNo
llvm::MVT ValVT
llvm::MVT LocVT
CCValAssign::LocInfo LocInfo
const llvm::CallLowering::ArgInfo& Info
ISD::ArgFlagsTy Flags
llvm::CCState& State

virtual unsigned int assignCustomValue(
    const llvm::CallLowering::ArgInfo& Arg,
    ArrayRef<llvm::CCValAssign> VAs)

Description

Handle custom values, which may be passed into one or more of \p VAs.

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

Parameters

const llvm::CallLowering::ArgInfo& Arg
ArrayRef<llvm::CCValAssign> VAs

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,
    uint64_t Size,
    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:140

Parameters

llvm::Register ValVReg
llvm::Register Addr
uint64_t Size
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:134

Parameters

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

llvm::Register extendRegister(
    llvm::Register ValReg,
    llvm::CCValAssign& VA)

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

Parameters

llvm::Register ValReg
llvm::CCValAssign& VA

virtual llvm::Register getStackAddress(
    uint64_t Size,
    int64_t Offset,
    llvm::MachinePointerInfo& MPO)

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:128

Parameters

uint64_t Size
int64_t Offset
llvm::MachinePointerInfo& MPO

virtual 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:121

virtual ~ValueHandler()

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