class CallLowering
Declaration
class CallLowering { /* full declaration omitted */ };
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:44
Member Variables
- private const llvm::TargetLowering* TLI
Method Overview
- public CallLowering(const llvm::TargetLowering * TLI)
- protected void addArgFlagsFromAttributes(ISD::ArgFlagsTy & Flags, const llvm::AttributeList & Attrs, unsigned int OpIdx) const
- private virtual void anchor()
- public virtual bool canLowerReturn(llvm::MachineFunction & MF, CallingConv::ID CallConv, SmallVectorImpl<llvm::CallLowering::BaseArgInfo> & Outs, bool IsVarArg) const
- public bool checkReturn(llvm::CCState & CCInfo, SmallVectorImpl<llvm::CallLowering::BaseArgInfo> & Outs, llvm::CCAssignFn * Fn) const
- public bool checkReturnTypeForCallConv(llvm::MachineFunction & MF) const
- protected bool determineAndHandleAssignments(llvm::CallLowering::ValueHandler & Handler, llvm::CallLowering::ValueAssigner & Assigner, SmallVectorImpl<llvm::CallLowering::ArgInfo> & Args, llvm::MachineIRBuilder & MIRBuilder, CallingConv::ID CallConv, bool IsVarArg, ArrayRef<llvm::Register> ThisReturnRegs = None) const
- protected bool determineAssignments(llvm::CallLowering::ValueAssigner & Assigner, SmallVectorImpl<llvm::CallLowering::ArgInfo> & Args, llvm::CCState & CCInfo) const
- public virtual bool enableBigEndian() const
- public virtual bool fallBackToDAGISel(const llvm::MachineFunction & MF) const
- protected ISD::ArgFlagsTy getAttributesForArgIdx(const llvm::CallBase & Call, unsigned int ArgIdx) const
- public void getReturnInfo(CallingConv::ID CallConv, llvm::Type * RetTy, llvm::AttributeList Attrs, SmallVectorImpl<llvm::CallLowering::BaseArgInfo> & Outs, const llvm::DataLayout & DL) const
- protected const llvm::TargetLowering * getTLI() const
- protected template <class XXXTargetLowering>const XXXTargetLowering * getTLI() const
- protected bool handleAssignments(llvm::CallLowering::ValueHandler & Handler, SmallVectorImpl<llvm::CallLowering::ArgInfo> & Args, llvm::CCState & CCState, SmallVectorImpl<llvm::CCValAssign> & ArgLocs, llvm::MachineIRBuilder & MIRBuilder, ArrayRef<llvm::Register> ThisReturnRegs = None) const
- public void insertSRetIncomingArgument(const llvm::Function & F, SmallVectorImpl<llvm::CallLowering::ArgInfo> & SplitArgs, llvm::Register & DemoteReg, llvm::MachineRegisterInfo & MRI, const llvm::DataLayout & DL) const
- public void insertSRetLoads(llvm::MachineIRBuilder & MIRBuilder, llvm::Type * RetTy, ArrayRef<llvm::Register> VRegs, llvm::Register DemoteReg, int FI) const
- public void insertSRetOutgoingArgument(llvm::MachineIRBuilder & MIRBuilder, const llvm::CallBase & CB, llvm::CallLowering::CallLoweringInfo & Info) const
- public void insertSRetStores(llvm::MachineIRBuilder & MIRBuilder, llvm::Type * RetTy, ArrayRef<llvm::Register> VRegs, llvm::Register DemoteReg) const
- public virtual bool isTypeIsValidForThisReturn(llvm::EVT Ty) const
- public virtual bool lowerCall(llvm::MachineIRBuilder & MIRBuilder, llvm::CallLowering::CallLoweringInfo & Info) const
- public bool lowerCall(llvm::MachineIRBuilder & MIRBuilder, const llvm::CallBase & Call, ArrayRef<llvm::Register> ResRegs, ArrayRef<ArrayRef<llvm::Register>> ArgRegs, llvm::Register SwiftErrorVReg, std::function<unsigned int ()> GetCalleeReg) const
- public virtual bool lowerFormalArguments(llvm::MachineIRBuilder & MIRBuilder, const llvm::Function & F, ArrayRef<ArrayRef<llvm::Register>> VRegs, llvm::FunctionLoweringInfo & FLI) const
- public virtual bool lowerReturn(llvm::MachineIRBuilder & MIRBuilder, const llvm::Value * Val, ArrayRef<llvm::Register> VRegs, llvm::FunctionLoweringInfo & FLI, llvm::Register SwiftErrorVReg) const
- public virtual bool lowerReturn(llvm::MachineIRBuilder & MIRBuilder, const llvm::Value * Val, ArrayRef<llvm::Register> VRegs, llvm::FunctionLoweringInfo & FLI) const
- protected bool parametersInCSRMatch(const llvm::MachineRegisterInfo & MRI, const uint32_t * CallerPreservedMask, const SmallVectorImpl<llvm::CCValAssign> & ArgLocs, const SmallVectorImpl<llvm::CallLowering::ArgInfo> & OutVals) const
- protected bool resultsCompatible(llvm::CallLowering::CallLoweringInfo & Info, llvm::MachineFunction & MF, SmallVectorImpl<llvm::CallLowering::ArgInfo> & InArgs, llvm::CallLowering::ValueAssigner & CalleeAssigner, llvm::CallLowering::ValueAssigner & CallerAssigner) const
- protected template <typename FuncInfoTy>void setArgFlags(llvm::CallLowering::ArgInfo & Arg, unsigned int OpIdx, const llvm::DataLayout & DL, const FuncInfoTy & FuncInfo) const
- protected void splitToValueTypes(const llvm::CallLowering::ArgInfo & OrigArgInfo, SmallVectorImpl<llvm::CallLowering::ArgInfo> & SplitArgs, const llvm::DataLayout & DL, CallingConv::ID CallConv, SmallVectorImpl<uint64_t> * Offsets = nullptr) const
- public virtual bool supportSwiftError() const
- public virtual ~CallLowering()
Methods
¶CallLowering(const llvm::TargetLowering* TLI)
CallLowering(const llvm::TargetLowering* TLI)
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:432
Parameters
- const llvm::TargetLowering* TLI
¶void addArgFlagsFromAttributes(
ISD::ArgFlagsTy& Flags,
const llvm::AttributeList& Attrs,
unsigned int OpIdx) const
void addArgFlagsFromAttributes(
ISD::ArgFlagsTy& Flags,
const llvm::AttributeList& Attrs,
unsigned int OpIdx) const
Description
Adds flags to \p Flags based off of the attributes in \p Attrs. \p OpIdx is the index in \p Attrs to add flags from.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:354
Parameters
- ISD::ArgFlagsTy& Flags
- const llvm::AttributeList& Attrs
- unsigned int OpIdx
¶virtual void anchor()
virtual void anchor()
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:47
¶virtual bool canLowerReturn(
llvm::MachineFunction& MF,
CallingConv::ID CallConv,
SmallVectorImpl<
llvm::CallLowering::BaseArgInfo>& Outs,
bool IsVarArg) const
virtual bool canLowerReturn(
llvm::MachineFunction& MF,
CallingConv::ID CallConv,
SmallVectorImpl<
llvm::CallLowering::BaseArgInfo>& Outs,
bool IsVarArg) const
Description
This hook must be implemented to check whether the return values described by \p Outs can fit into the return registers. If false is returned, an sret-demotion is performed.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:487
Parameters
- llvm::MachineFunction& MF
- CallingConv::ID CallConv
- SmallVectorImpl<llvm::CallLowering::BaseArgInfo>& Outs
- bool IsVarArg
¶bool checkReturn(
llvm::CCState& CCInfo,
SmallVectorImpl<
llvm::CallLowering::BaseArgInfo>& Outs,
llvm::CCAssignFn* Fn) const
bool checkReturn(
llvm::CCState& CCInfo,
SmallVectorImpl<
llvm::CallLowering::BaseArgInfo>& Outs,
llvm::CCAssignFn* Fn) const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:470
Parameters
- llvm::CCState& CCInfo
- SmallVectorImpl<llvm::CallLowering::BaseArgInfo>& Outs
- llvm::CCAssignFn* Fn
Returns
True if the return type described by \p Outs can be returned without performing sret demotion.
¶bool checkReturnTypeForCallConv(
llvm::MachineFunction& MF) const
bool checkReturnTypeForCallConv(
llvm::MachineFunction& MF) const
Description
Toplevel function to check the return type based on the target calling convention.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:482
Parameters
Returns
True if the return value of \p MF can be returned without performing sret demotion.
¶bool determineAndHandleAssignments(
llvm::CallLowering::ValueHandler& Handler,
llvm::CallLowering::ValueAssigner& Assigner,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
Args,
llvm::MachineIRBuilder& MIRBuilder,
CallingConv::ID CallConv,
bool IsVarArg,
ArrayRef<llvm::Register> ThisReturnRegs =
None) const
bool determineAndHandleAssignments(
llvm::CallLowering::ValueHandler& Handler,
llvm::CallLowering::ValueAssigner& Assigner,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
Args,
llvm::MachineIRBuilder& MIRBuilder,
CallingConv::ID CallConv,
bool IsVarArg,
ArrayRef<llvm::Register> ThisReturnRegs =
None) const
Description
Invoke ValueAssigner::assignArg on each of the given \p Args and then use\p Handler to move them to the assigned locations.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:393
Parameters
- llvm::CallLowering::ValueHandler& Handler
- llvm::CallLowering::ValueAssigner& Assigner
- SmallVectorImpl<llvm::CallLowering::ArgInfo>& Args
- llvm::MachineIRBuilder& MIRBuilder
- CallingConv::ID CallConv
- bool IsVarArg
- ArrayRef<llvm::Register> ThisReturnRegs = None
Returns
True if everything has succeeded, false otherwise.
¶bool determineAssignments(
llvm::CallLowering::ValueAssigner& Assigner,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
Args,
llvm::CCState& CCInfo) const
bool determineAssignments(
llvm::CallLowering::ValueAssigner& Assigner,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
Args,
llvm::CCState& CCInfo) const
Description
Analyze the argument list in \p Args, using \p Assigner to populate \p CCInfo. This will determine the types and locations to use for passed or returned values. This may resize fields in \p Args if the value is split across multiple registers or stack slots. This is independent of the function state and can be used to determine how a call would pass arguments without needing to change the function. This can be used to check if arguments are suitable for tail call lowering.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:384
Parameters
- llvm::CallLowering::ValueAssigner& Assigner
- SmallVectorImpl<llvm::CallLowering::ArgInfo>& Args
- llvm::CCState& CCInfo
Returns
True if everything has succeeded, false otherwise.
¶virtual bool enableBigEndian() const
virtual bool enableBigEndian() const
Description
For targets which want to use big-endian can enable it with enableBigEndian() hook
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:583
¶virtual bool fallBackToDAGISel(
const llvm::MachineFunction& MF) const
virtual bool fallBackToDAGISel(
const llvm::MachineFunction& MF) const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:521
Parameters
- const llvm::MachineFunction& MF
¶ISD::ArgFlagsTy getAttributesForArgIdx(
const llvm::CallBase& Call,
unsigned int ArgIdx) const
ISD::ArgFlagsTy getAttributesForArgIdx(
const llvm::CallBase& Call,
unsigned int ArgIdx) const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:349
Parameters
- const llvm::CallBase& Call
- unsigned int ArgIdx
Returns
Flags corresponding to the attributes on the \p ArgIdx-th parameter of \p Call.
¶void getReturnInfo(
CallingConv::ID CallConv,
llvm::Type* RetTy,
llvm::AttributeList Attrs,
SmallVectorImpl<
llvm::CallLowering::BaseArgInfo>& Outs,
const llvm::DataLayout& DL) const
void getReturnInfo(
CallingConv::ID CallConv,
llvm::Type* RetTy,
llvm::AttributeList Attrs,
SmallVectorImpl<
llvm::CallLowering::BaseArgInfo>& Outs,
const llvm::DataLayout& DL) const
Description
Get the type and the ArgFlags for the split components of \p RetTy as returned by \c ComputeValueVTs.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:475
Parameters
- CallingConv::ID CallConv
- llvm::Type* RetTy
- llvm::AttributeList Attrs
- SmallVectorImpl<llvm::CallLowering::BaseArgInfo>& Outs
- const llvm::DataLayout& DL
¶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:337
¶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:343
Templates
- XXXTargetLowering
¶bool handleAssignments(
llvm::CallLowering::ValueHandler& Handler,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
Args,
llvm::CCState& CCState,
SmallVectorImpl<llvm::CCValAssign>& ArgLocs,
llvm::MachineIRBuilder& MIRBuilder,
ArrayRef<llvm::Register> ThisReturnRegs =
None) const
bool handleAssignments(
llvm::CallLowering::ValueHandler& Handler,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
Args,
llvm::CCState& CCState,
SmallVectorImpl<llvm::CCValAssign>& ArgLocs,
llvm::MachineIRBuilder& MIRBuilder,
ArrayRef<llvm::Register> ThisReturnRegs =
None) const
Description
Use \p Handler to insert code to handle the argument/return values represented by \p Args. It's expected determineAssignments previously processed these arguments to populate \p CCState and \p ArgLocs.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:402
Parameters
- llvm::CallLowering::ValueHandler& Handler
- SmallVectorImpl<llvm::CallLowering::ArgInfo>& Args
- llvm::CCState& CCState
- SmallVectorImpl<llvm::CCValAssign>& ArgLocs
- llvm::MachineIRBuilder& MIRBuilder
- ArrayRef<llvm::Register> ThisReturnRegs = None
¶void insertSRetIncomingArgument(
const llvm::Function& F,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
SplitArgs,
llvm::Register& DemoteReg,
llvm::MachineRegisterInfo& MRI,
const llvm::DataLayout& DL) const
void insertSRetIncomingArgument(
const llvm::Function& F,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
SplitArgs,
llvm::Register& DemoteReg,
llvm::MachineRegisterInfo& MRI,
const llvm::DataLayout& DL) const
Description
Insert the hidden sret ArgInfo to the beginning of \p SplitArgs. This function should be called from the target specific lowerFormalArguments when \p F requires the sret demotion.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:457
Parameters
- const llvm::Function& F
- SmallVectorImpl<llvm::CallLowering::ArgInfo>& SplitArgs
- llvm::Register& DemoteReg
- llvm::MachineRegisterInfo& MRI
- const llvm::DataLayout& DL
¶void insertSRetLoads(
llvm::MachineIRBuilder& MIRBuilder,
llvm::Type* RetTy,
ArrayRef<llvm::Register> VRegs,
llvm::Register DemoteReg,
int FI) const
void insertSRetLoads(
llvm::MachineIRBuilder& MIRBuilder,
llvm::Type* RetTy,
ArrayRef<llvm::Register> VRegs,
llvm::Register DemoteReg,
int FI) const
Description
Load the returned value from the stack into virtual registers in \p VRegs. It uses the frame index \p FI and the start offset from \p DemoteReg. The loaded data size will be determined from \p RetTy.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:445
Parameters
- llvm::MachineIRBuilder& MIRBuilder
- llvm::Type* RetTy
- ArrayRef<llvm::Register> VRegs
- llvm::Register DemoteReg
- int FI
¶void insertSRetOutgoingArgument(
llvm::MachineIRBuilder& MIRBuilder,
const llvm::CallBase& CB,
llvm::CallLowering::CallLoweringInfo& Info)
const
void insertSRetOutgoingArgument(
llvm::MachineIRBuilder& MIRBuilder,
const llvm::CallBase& CB,
llvm::CallLowering::CallLoweringInfo& Info)
const
Description
For the call-base described by \p CB, insert the hidden sret ArgInfo to the OrigArgs field of \p Info.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:464
Parameters
- llvm::MachineIRBuilder& MIRBuilder
- const llvm::CallBase& CB
- llvm::CallLowering::CallLoweringInfo& Info
¶void insertSRetStores(
llvm::MachineIRBuilder& MIRBuilder,
llvm::Type* RetTy,
ArrayRef<llvm::Register> VRegs,
llvm::Register DemoteReg) const
void insertSRetStores(
llvm::MachineIRBuilder& MIRBuilder,
llvm::Type* RetTy,
ArrayRef<llvm::Register> VRegs,
llvm::Register DemoteReg) const
Description
Store the return value given by \p VRegs into stack starting at the offset specified in \p DemoteReg.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:451
Parameters
- llvm::MachineIRBuilder& MIRBuilder
- llvm::Type* RetTy
- ArrayRef<llvm::Register> VRegs
- llvm::Register DemoteReg
¶virtual bool isTypeIsValidForThisReturn(
llvm::EVT Ty) const
virtual bool isTypeIsValidForThisReturn(
llvm::EVT Ty) const
Description
For targets which support the "returned" parameter attribute, returns true if the given type is a valid one to use with "returned".
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:587
Parameters
- llvm::EVT Ty
¶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:547
Parameters
- llvm::MachineIRBuilder& MIRBuilder
- llvm::CallLowering::CallLoweringInfo& Info
Returns
true if the lowering succeeded, false otherwise.
¶bool lowerCall(
llvm::MachineIRBuilder& MIRBuilder,
const llvm::CallBase& Call,
ArrayRef<llvm::Register> ResRegs,
ArrayRef<ArrayRef<llvm::Register>> ArgRegs,
llvm::Register SwiftErrorVReg,
std::function<unsigned int()> GetCalleeReg)
const
bool lowerCall(
llvm::MachineIRBuilder& MIRBuilder,
const llvm::CallBase& Call,
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:576
Parameters
- llvm::MachineIRBuilder& MIRBuilder
- const llvm::CallBase& Call
- 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 lowerFormalArguments(
llvm::MachineIRBuilder& MIRBuilder,
const llvm::Function& F,
ArrayRef<ArrayRef<llvm::Register>> VRegs,
llvm::FunctionLoweringInfo& FLI) const
virtual bool lowerFormalArguments(
llvm::MachineIRBuilder& MIRBuilder,
const llvm::Function& F,
ArrayRef<ArrayRef<llvm::Register>> VRegs,
llvm::FunctionLoweringInfo& FLI) 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. \p FLI is required for sret demotion.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:535
Parameters
- llvm::MachineIRBuilder& MIRBuilder
- const llvm::Function& F
- ArrayRef<ArrayRef<llvm::Register>> VRegs
- llvm::FunctionLoweringInfo& FLI
Returns
True if the lowering succeeded, false otherwise.
¶virtual bool lowerReturn(
llvm::MachineIRBuilder& MIRBuilder,
const llvm::Value* Val,
ArrayRef<llvm::Register> VRegs,
llvm::FunctionLoweringInfo& FLI,
llvm::Register SwiftErrorVReg) const
virtual bool lowerReturn(
llvm::MachineIRBuilder& MIRBuilder,
const llvm::Value* Val,
ArrayRef<llvm::Register> VRegs,
llvm::FunctionLoweringInfo& FLI,
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 FLI is required for sret demotion. \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:503
Parameters
- llvm::MachineIRBuilder& MIRBuilder
- const llvm::Value* Val
- ArrayRef<llvm::Register> VRegs
- llvm::FunctionLoweringInfo& FLI
- 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,
llvm::FunctionLoweringInfo& FLI) const
virtual bool lowerReturn(
llvm::MachineIRBuilder& MIRBuilder,
const llvm::Value* Val,
ArrayRef<llvm::Register> VRegs,
llvm::FunctionLoweringInfo& FLI) 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:515
Parameters
- llvm::MachineIRBuilder& MIRBuilder
- const llvm::Value* Val
- ArrayRef<llvm::Register> VRegs
- llvm::FunctionLoweringInfo& FLI
¶bool parametersInCSRMatch(
const llvm::MachineRegisterInfo& MRI,
const uint32_t* CallerPreservedMask,
const SmallVectorImpl<llvm::CCValAssign>&
ArgLocs,
const SmallVectorImpl<
llvm::CallLowering::ArgInfo>& OutVals)
const
bool parametersInCSRMatch(
const llvm::MachineRegisterInfo& MRI,
const uint32_t* CallerPreservedMask,
const SmallVectorImpl<llvm::CCValAssign>&
ArgLocs,
const SmallVectorImpl<
llvm::CallLowering::ArgInfo>& OutVals)
const
Description
Check whether parameters to a call that are passed in callee saved registers are the same as from the calling function. This needs to be checked for tail call eligibility.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:411
Parameters
- const llvm::MachineRegisterInfo& MRI
- const uint32_t* CallerPreservedMask
- const SmallVectorImpl<llvm::CCValAssign>& ArgLocs
- const SmallVectorImpl< llvm::CallLowering::ArgInfo>& OutVals
¶bool resultsCompatible(
llvm::CallLowering::CallLoweringInfo& Info,
llvm::MachineFunction& MF,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
InArgs,
llvm::CallLowering::ValueAssigner&
CalleeAssigner,
llvm::CallLowering::ValueAssigner&
CallerAssigner) const
bool resultsCompatible(
llvm::CallLowering::CallLoweringInfo& Info,
llvm::MachineFunction& MF,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
InArgs,
llvm::CallLowering::ValueAssigner&
CalleeAssigner,
llvm::CallLowering::ValueAssigner&
CallerAssigner) 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 CalleeAssigner specifies the target's handling of the argument types for the callee.\p CallerAssigner specifies the target's handling of the argument types for the caller.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:426
Parameters
- llvm::CallLowering::CallLoweringInfo& Info
- llvm::MachineFunction& MF
- SmallVectorImpl<llvm::CallLowering::ArgInfo>& InArgs
- llvm::CallLowering::ValueAssigner& CalleeAssigner
- llvm::CallLowering::ValueAssigner& CallerAssigner
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:359
Templates
- FuncInfoTy
Parameters
- llvm::CallLowering::ArgInfo& Arg
- unsigned int OpIdx
- const llvm::DataLayout& DL
- const FuncInfoTy& FuncInfo
¶void splitToValueTypes(
const llvm::CallLowering::ArgInfo&
OrigArgInfo,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
SplitArgs,
const llvm::DataLayout& DL,
CallingConv::ID CallConv,
SmallVectorImpl<uint64_t>* Offsets =
nullptr) const
void splitToValueTypes(
const llvm::CallLowering::ArgInfo&
OrigArgInfo,
SmallVectorImpl<llvm::CallLowering::ArgInfo>&
SplitArgs,
const llvm::DataLayout& DL,
CallingConv::ID CallConv,
SmallVectorImpl<uint64_t>* Offsets =
nullptr) const
Description
Break \p OrigArgInfo into one or more pieces the calling convention can process, returned in \p SplitArgs. For example, this should break structs down into individual fields. If \p Offsets is non-null, it points to a vector to be filled in with the in-memory offsets of each of the individual values.
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:368
Parameters
- const llvm::CallLowering::ArgInfo& OrigArgInfo
- SmallVectorImpl<llvm::CallLowering::ArgInfo>& SplitArgs
- const llvm::DataLayout& DL
- CallingConv::ID CallConv
- SmallVectorImpl<uint64_t>* Offsets = nullptr
¶virtual bool supportSwiftError() const
virtual bool supportSwiftError() const
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:438
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.
¶virtual ~CallLowering()
virtual ~CallLowering()
Declared at: llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h:433