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