class CallLowering

Declaration

class CallLowering { /* full declaration omitted */ };

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

Method Overview

  • public CallLowering(const llvm::TargetLowering * TLI)
  • protected bool analyzeArgInfo(llvm::CCState & CCState, SmallVectorImpl<llvm::CallLowering::ArgInfo> & Args, llvm::CCAssignFn & AssignFnFixed, llvm::CCAssignFn & AssignFnVarArg) const
  • protected const llvm::TargetLowering * getTLI() const
  • protected template <class XXXTargetLowering>const XXXTargetLowering * getTLI() const
  • protected bool handleAssignments(llvm::MachineIRBuilder & MIRBuilder, SmallVectorImpl<llvm::CallLowering::ArgInfo> & Args, llvm::CallLowering::ValueHandler & Handler) const
  • protected bool handleAssignments(llvm::CCState & CCState, SmallVectorImpl<llvm::CCValAssign> & ArgLocs, llvm::MachineIRBuilder & MIRBuilder, SmallVectorImpl<llvm::CallLowering::ArgInfo> & Args, llvm::CallLowering::ValueHandler & Handler) const
  • public bool lowerCall(llvm::MachineIRBuilder & MIRBuilder, llvm::ImmutableCallSite CS, ArrayRef<llvm::Register> ResRegs, ArrayRef<ArrayRef<llvm::Register>> ArgRegs, llvm::Register SwiftErrorVReg, std::function<unsigned int ()> GetCalleeReg) const
  • public virtual bool lowerCall(llvm::MachineIRBuilder & MIRBuilder, llvm::CallLowering::CallLoweringInfo & Info) const
  • public virtual bool lowerFormalArguments(llvm::MachineIRBuilder & MIRBuilder, const llvm::Function & F, ArrayRef<ArrayRef<llvm::Register>> VRegs) const
  • public virtual bool lowerReturn(llvm::MachineIRBuilder & MIRBuilder, const llvm::Value * Val, ArrayRef<llvm::Register> VRegs, llvm::Register SwiftErrorVReg) const
  • public virtual bool lowerReturn(llvm::MachineIRBuilder & MIRBuilder, const llvm::Value * Val, ArrayRef<llvm::Register> VRegs) const
  • protected llvm::Register packRegs(ArrayRef<llvm::Register> SrcRegs, llvm::Type * PackedTy, llvm::MachineIRBuilder & MIRBuilder) const
  • protected bool resultsCompatible(llvm::CallLowering::CallLoweringInfo & Info, llvm::MachineFunction & MF, SmallVectorImpl<llvm::CallLowering::ArgInfo> & InArgs, llvm::CCAssignFn & CalleeAssignFnFixed, llvm::CCAssignFn & CalleeAssignFnVarArg, llvm::CCAssignFn & CallerAssignFnFixed, llvm::CCAssignFn & CallerAssignFnVarArg) const
  • protected template <typename FuncInfoTy>void setArgFlags(llvm::CallLowering::ArgInfo & Arg, unsigned int OpIdx, const llvm::DataLayout & DL, const FuncInfoTy & FuncInfo) const
  • public virtual bool supportSwiftError() const
  • protected void unpackRegs(ArrayRef<llvm::Register> DstRegs, llvm::Register SrcReg, llvm::Type * PackedTy, llvm::MachineIRBuilder & MIRBuilder) const
  • public virtual ~CallLowering()

Methods

CallLowering(const llvm::TargetLowering* TLI)

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

Parameters

const llvm::TargetLowering* TLI

bool analyzeArgInfo(
    llvm::CCState& CCState,
    SmallVectorImpl<llvm::CallLowering::ArgInfo>&
        Args,
    llvm::CCAssignFn& AssignFnFixed,
    llvm::CCAssignFn& AssignFnVarArg) const

Description

Analyze passed or returned values from a call, supplied in \p ArgInfo, incorporating info about the passed values into \p CCState. Used to check if arguments are suitable for tail call lowering.

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

Parameters

llvm::CCState& CCState
SmallVectorImpl<llvm::CallLowering::ArgInfo>& Args
llvm::CCAssignFn& AssignFnFixed
llvm::CCAssignFn& AssignFnVarArg

const llvm::TargetLowering* getTLI() const

Description

Getter for generic TargetLowering class.

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

template <class XXXTargetLowering>
const XXXTargetLowering* getTLI() const

Description

Getter for target specific TargetLowering class.

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

Templates

XXXTargetLowering

bool handleAssignments(
    llvm::MachineIRBuilder& MIRBuilder,
    SmallVectorImpl<llvm::CallLowering::ArgInfo>&
        Args,
    llvm::CallLowering::ValueHandler& Handler)
    const

Description

Invoke Handler::assignArg on each of the given \p Args and then use\p Callback to move them to the assigned locations.

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

Parameters

llvm::MachineIRBuilder& MIRBuilder
SmallVectorImpl<llvm::CallLowering::ArgInfo>& Args
llvm::CallLowering::ValueHandler& Handler

Returns

True if everything has succeeded, false otherwise.

bool handleAssignments(
    llvm::CCState& CCState,
    SmallVectorImpl<llvm::CCValAssign>& ArgLocs,
    llvm::MachineIRBuilder& MIRBuilder,
    SmallVectorImpl<llvm::CallLowering::ArgInfo>&
        Args,
    llvm::CallLowering::ValueHandler& Handler)
    const

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

Parameters

llvm::CCState& CCState
SmallVectorImpl<llvm::CCValAssign>& ArgLocs
llvm::MachineIRBuilder& MIRBuilder
SmallVectorImpl<llvm::CallLowering::ArgInfo>& Args
llvm::CallLowering::ValueHandler& Handler

bool lowerCall(
    llvm::MachineIRBuilder& MIRBuilder,
    llvm::ImmutableCallSite CS,
    ArrayRef<llvm::Register> ResRegs,
    ArrayRef<ArrayRef<llvm::Register>> ArgRegs,
    llvm::Register SwiftErrorVReg,
    std::function<unsigned int()> GetCalleeReg)
    const

Description

Lower the given call instruction, including argument and return value marshalling. \p CI is the call/invoke instruction. \p ResRegs are the registers where the call's return value should be stored (or 0 if there is no return value). There will be one register for each non-aggregate type, as returned by \c computeValueLLTs. \p ArgRegs is a list of lists of virtual registers containing each argument that needs to be passed (argument \c i should be placed in \c ArgRegs[i]). For each argument, there will be one register for each non-aggregate type, as returned by \c computeValueLLTs. \p SwiftErrorVReg is non-zero if the call has a swifterror inout parameter, and contains the vreg that the swifterror should be copied into after the call. \p GetCalleeReg is a callback to materialize a register for the callee if the target determines it cannot jump to the destination based purely on \p CI. This might be because \p CI is indirect, or because of the limited range of an immediate jump.

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

Parameters

llvm::MachineIRBuilder& MIRBuilder
llvm::ImmutableCallSite CS
ArrayRef<llvm::Register> ResRegs
ArrayRef<ArrayRef<llvm::Register>> ArgRegs
llvm::Register SwiftErrorVReg
std::function<unsigned int()> GetCalleeReg

Returns

true if the lowering succeeded, false otherwise.

virtual bool lowerCall(
    llvm::MachineIRBuilder& MIRBuilder,
    llvm::CallLowering::CallLoweringInfo& Info)
    const

Description

This hook must be implemented to lower the given call instruction, including argument and return value marshalling.

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

Parameters

llvm::MachineIRBuilder& MIRBuilder
llvm::CallLowering::CallLoweringInfo& Info

Returns

true if the lowering succeeded, false otherwise.

virtual bool lowerFormalArguments(
    llvm::MachineIRBuilder& MIRBuilder,
    const llvm::Function& F,
    ArrayRef<ArrayRef<llvm::Register>> VRegs)
    const

Description

This hook must be implemented to lower the incoming (formal) arguments, described by \p VRegs, for GlobalISel. Each argument must end up in the related virtual registers described by \p VRegs. In other words, the first argument should end up in \c VRegs[0], the second in \c VRegs[1], and so on. For each argument, there will be one register for each non-aggregate type, as returned by \c computeValueLLTs. \p MIRBuilder is set to the proper insertion for the argument lowering.

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

Parameters

llvm::MachineIRBuilder& MIRBuilder
const llvm::Function& F
ArrayRef<ArrayRef<llvm::Register>> VRegs

Returns

True if the lowering succeeded, false otherwise.

virtual bool lowerReturn(
    llvm::MachineIRBuilder& MIRBuilder,
    const llvm::Value* Val,
    ArrayRef<llvm::Register> VRegs,
    llvm::Register SwiftErrorVReg) const

Description

This hook must be implemented to lower outgoing return values, described by \p Val, into the specified virtual registers \p VRegs. This hook is used by GlobalISel. \p SwiftErrorVReg is non-zero if the function has a swifterror parameter that needs to be implicitly returned.

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

Parameters

llvm::MachineIRBuilder& MIRBuilder
const llvm::Value* Val
ArrayRef<llvm::Register> VRegs
llvm::Register SwiftErrorVReg

Returns

True if the lowering succeeds, false otherwise.

virtual bool lowerReturn(
    llvm::MachineIRBuilder& MIRBuilder,
    const llvm::Value* Val,
    ArrayRef<llvm::Register> VRegs) const

Description

This hook behaves as the extended lowerReturn function, but for targets that do not support swifterror value promotion.

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

Parameters

llvm::MachineIRBuilder& MIRBuilder
const llvm::Value* Val
ArrayRef<llvm::Register> VRegs

llvm::Register packRegs(
    ArrayRef<llvm::Register> SrcRegs,
    llvm::Type* PackedTy,
    llvm::MachineIRBuilder& MIRBuilder) const

Description

Generate instructions for packing \p SrcRegs into one big register corresponding to the aggregate type \p PackedTy.

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

Parameters

ArrayRef<llvm::Register> SrcRegs
should contain one virtual register for each base type in\p PackedTy, as returned by computeValueLLTs.
llvm::Type* PackedTy
llvm::MachineIRBuilder& MIRBuilder

Returns

The packed register.

bool resultsCompatible(
    llvm::CallLowering::CallLoweringInfo& Info,
    llvm::MachineFunction& MF,
    SmallVectorImpl<llvm::CallLowering::ArgInfo>&
        InArgs,
    llvm::CCAssignFn& CalleeAssignFnFixed,
    llvm::CCAssignFn& CalleeAssignFnVarArg,
    llvm::CCAssignFn& CallerAssignFnFixed,
    llvm::CCAssignFn& CallerAssignFnVarArg) const

Description

\p Info is the CallLoweringInfo for the call.\p MF is the MachineFunction for the caller.\p InArgs contains the results of the call.\p CalleeAssignFnFixed is the CCAssignFn to be used for the callee for fixed arguments.\p CalleeAssignFnVarArg is similar, but for varargs.\p CallerAssignFnFixed is the CCAssignFn to be used for the caller for fixed arguments.\p CallerAssignFnVarArg is similar, but for varargs.

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

Parameters

llvm::CallLowering::CallLoweringInfo& Info
llvm::MachineFunction& MF
SmallVectorImpl<llvm::CallLowering::ArgInfo>& InArgs
llvm::CCAssignFn& CalleeAssignFnFixed
llvm::CCAssignFn& CalleeAssignFnVarArg
llvm::CCAssignFn& CallerAssignFnFixed
llvm::CCAssignFn& CallerAssignFnVarArg

Returns

True if the calling convention for a callee and its caller pass results in the same way. Typically used for tail call eligibility checks.

template <typename FuncInfoTy>
void setArgFlags(llvm::CallLowering::ArgInfo& Arg,
                 unsigned int OpIdx,
                 const llvm::DataLayout& DL,
                 const FuncInfoTy& FuncInfo) const

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

Templates

FuncInfoTy

Parameters

llvm::CallLowering::ArgInfo& Arg
unsigned int OpIdx
const llvm::DataLayout& DL
const FuncInfoTy& FuncInfo

virtual bool supportSwiftError() const

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

Returns

true if the target is capable of handling swifterror values that have been promoted to a specified register. The extended versions of lowerReturn and lowerCall should be implemented.

void unpackRegs(
    ArrayRef<llvm::Register> DstRegs,
    llvm::Register SrcReg,
    llvm::Type* PackedTy,
    llvm::MachineIRBuilder& MIRBuilder) const

Description

Generate instructions for unpacking \p SrcReg into the \p DstRegs corresponding to the aggregate type \p PackedTy.

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

Parameters

ArrayRef<llvm::Register> DstRegs
should contain one virtual register for each base type in\p PackedTy, as returned by computeValueLLTs.
llvm::Register SrcReg
llvm::Type* PackedTy
llvm::MachineIRBuilder& MIRBuilder

virtual ~CallLowering()

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