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)
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)
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)
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)
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)
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)
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)
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
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()
virtual ~ValueHandler()
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:117