LLVM 20.0.0git
|
#include "Target/SPIRV/SPIRVCallLowering.h"
Public Member Functions | |
SPIRVCallLowering (const SPIRVTargetLowering &TLI, SPIRVGlobalRegistry *GR) | |
bool | lowerReturn (MachineIRBuilder &MIRBuiler, const Value *Val, ArrayRef< Register > VRegs, FunctionLoweringInfo &FLI, Register SwiftErrorVReg) const override |
This hook must be implemented to lower outgoing return values, described by Val , into the specified virtual registers VRegs . | |
bool | lowerFormalArguments (MachineIRBuilder &MIRBuilder, const Function &F, ArrayRef< ArrayRef< Register > > VRegs, FunctionLoweringInfo &FLI) const override |
This hook must be implemented to lower the incoming (formal) arguments, described by VRegs , for GlobalISel. | |
bool | lowerCall (MachineIRBuilder &MIRBuilder, CallLoweringInfo &Info) const override |
This hook must be implemented to lower the given call instruction, including argument and return value marshalling. | |
Public Member Functions inherited from llvm::CallLowering | |
CallLowering (const TargetLowering *TLI) | |
virtual | ~CallLowering ()=default |
virtual bool | supportSwiftError () const |
void | insertSRetLoads (MachineIRBuilder &MIRBuilder, Type *RetTy, ArrayRef< Register > VRegs, Register DemoteReg, int FI) const |
Load the returned value from the stack into virtual registers in VRegs . | |
void | insertSRetStores (MachineIRBuilder &MIRBuilder, Type *RetTy, ArrayRef< Register > VRegs, Register DemoteReg) const |
Store the return value given by VRegs into stack starting at the offset specified in DemoteReg . | |
void | insertSRetIncomingArgument (const Function &F, SmallVectorImpl< ArgInfo > &SplitArgs, Register &DemoteReg, MachineRegisterInfo &MRI, const DataLayout &DL) const |
Insert the hidden sret ArgInfo to the beginning of SplitArgs . | |
void | insertSRetOutgoingArgument (MachineIRBuilder &MIRBuilder, const CallBase &CB, CallLoweringInfo &Info) const |
For the call-base described by CB , insert the hidden sret ArgInfo to the OrigArgs field of Info . | |
bool | checkReturn (CCState &CCInfo, SmallVectorImpl< BaseArgInfo > &Outs, CCAssignFn *Fn) const |
void | getReturnInfo (CallingConv::ID CallConv, Type *RetTy, AttributeList Attrs, SmallVectorImpl< BaseArgInfo > &Outs, const DataLayout &DL) const |
Get the type and the ArgFlags for the split components of RetTy as returned by ComputeValueVTs . | |
bool | checkReturnTypeForCallConv (MachineFunction &MF) const |
Toplevel function to check the return type based on the target calling convention. | |
virtual bool | canLowerReturn (MachineFunction &MF, CallingConv::ID CallConv, SmallVectorImpl< BaseArgInfo > &Outs, bool IsVarArg) const |
This hook must be implemented to check whether the return values described by Outs can fit into the return registers. | |
virtual bool | lowerReturn (MachineIRBuilder &MIRBuilder, const Value *Val, ArrayRef< Register > VRegs, FunctionLoweringInfo &FLI, Register SwiftErrorVReg) const |
This hook must be implemented to lower outgoing return values, described by Val , into the specified virtual registers VRegs . | |
virtual bool | lowerReturn (MachineIRBuilder &MIRBuilder, const Value *Val, ArrayRef< Register > VRegs, FunctionLoweringInfo &FLI) const |
This hook behaves as the extended lowerReturn function, but for targets that do not support swifterror value promotion. | |
virtual bool | fallBackToDAGISel (const MachineFunction &MF) const |
virtual bool | lowerFormalArguments (MachineIRBuilder &MIRBuilder, const Function &F, ArrayRef< ArrayRef< Register > > VRegs, FunctionLoweringInfo &FLI) const |
This hook must be implemented to lower the incoming (formal) arguments, described by VRegs , for GlobalISel. | |
virtual bool | lowerCall (MachineIRBuilder &MIRBuilder, CallLoweringInfo &Info) const |
This hook must be implemented to lower the given call instruction, including argument and return value marshalling. | |
bool | lowerCall (MachineIRBuilder &MIRBuilder, const CallBase &Call, ArrayRef< Register > ResRegs, ArrayRef< ArrayRef< Register > > ArgRegs, Register SwiftErrorVReg, std::optional< PtrAuthInfo > PAI, Register ConvergenceCtrlToken, std::function< unsigned()> GetCalleeReg) const |
Lower the given call instruction, including argument and return value marshalling. | |
virtual bool | enableBigEndian () const |
For targets which want to use big-endian can enable it with enableBigEndian() hook. | |
virtual bool | isTypeIsValidForThisReturn (EVT Ty) const |
For targets which support the "returned" parameter attribute, returns true if the given type is a valid one to use with "returned". | |
Additional Inherited Members | |
Protected Member Functions inherited from llvm::CallLowering | |
const TargetLowering * | getTLI () const |
Getter for generic TargetLowering class. | |
template<class XXXTargetLowering > | |
const XXXTargetLowering * | getTLI () const |
Getter for target specific TargetLowering class. | |
ISD::ArgFlagsTy | getAttributesForArgIdx (const CallBase &Call, unsigned ArgIdx) const |
ISD::ArgFlagsTy | getAttributesForReturn (const CallBase &Call) const |
void | addArgFlagsFromAttributes (ISD::ArgFlagsTy &Flags, const AttributeList &Attrs, unsigned OpIdx) const |
Adds flags to Flags based off of the attributes in Attrs . | |
template<typename FuncInfoTy > | |
void | setArgFlags (ArgInfo &Arg, unsigned OpIdx, const DataLayout &DL, const FuncInfoTy &FuncInfo) const |
void | splitToValueTypes (const ArgInfo &OrigArgInfo, SmallVectorImpl< ArgInfo > &SplitArgs, const DataLayout &DL, CallingConv::ID CallConv, SmallVectorImpl< uint64_t > *Offsets=nullptr) const |
Break OrigArgInfo into one or more pieces the calling convention can process, returned in SplitArgs . | |
bool | determineAssignments (ValueAssigner &Assigner, SmallVectorImpl< ArgInfo > &Args, CCState &CCInfo) const |
Analyze the argument list in Args , using Assigner to populate CCInfo . | |
bool | determineAndHandleAssignments (ValueHandler &Handler, ValueAssigner &Assigner, SmallVectorImpl< ArgInfo > &Args, MachineIRBuilder &MIRBuilder, CallingConv::ID CallConv, bool IsVarArg, ArrayRef< Register > ThisReturnRegs={}) const |
Invoke ValueAssigner::assignArg on each of the given Args and then use Handler to move them to the assigned locations. | |
bool | handleAssignments (ValueHandler &Handler, SmallVectorImpl< ArgInfo > &Args, CCState &CCState, SmallVectorImpl< CCValAssign > &ArgLocs, MachineIRBuilder &MIRBuilder, ArrayRef< Register > ThisReturnRegs={}) const |
Use Handler to insert code to handle the argument/return values represented by Args . | |
bool | parametersInCSRMatch (const MachineRegisterInfo &MRI, const uint32_t *CallerPreservedMask, const SmallVectorImpl< CCValAssign > &ArgLocs, const SmallVectorImpl< ArgInfo > &OutVals) const |
Check whether parameters to a call that are passed in callee saved registers are the same as from the calling function. | |
bool | resultsCompatible (CallLoweringInfo &Info, MachineFunction &MF, SmallVectorImpl< ArgInfo > &InArgs, ValueAssigner &CalleeAssigner, ValueAssigner &CallerAssigner) const |
Definition at line 24 of file SPIRVCallLowering.h.
SPIRVCallLowering::SPIRVCallLowering | ( | const SPIRVTargetLowering & | TLI, |
SPIRVGlobalRegistry * | GR | ||
) |
Definition at line 31 of file SPIRVCallLowering.cpp.
|
overridevirtual |
This hook must be implemented to lower the given call instruction, including argument and return value marshalling.
Reimplemented from llvm::CallLowering.
Definition at line 508 of file SPIRVCallLowering.cpp.
References llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addDef(), llvm::MachineInstrBuilder::addUse(), llvm::Function::args(), assert(), llvm::SPIRVGlobalRegistry::assignSPIRVTypeToVReg(), llvm::SPIRVGlobalRegistry::assignTypeToVReg(), llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildTrap(), llvm::MachineInstrBuilder::constrainAllUses(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::createVirtualRegister(), llvm::SPIRVGlobalRegistry::find(), llvm::SPIRVGlobalRegistry::findDeducedElementType(), llvm::SPIRVGlobalRegistry::findReturnType(), llvm::TypedPointerType::get(), llvm::MachineFunction::getBlockNumbered(), llvm::MachineIRBuilder::getDataLayout(), llvm::Function::getFnAttribute(), llvm::MachineFunction::getFunction(), llvm::MachineIRBuilder::getMF(), llvm::MachineIRBuilder::getMRI(), llvm::getOclOrSpirvBuiltinDemangledName(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVType(), getOriginalFunctionType(), llvm::SPIRVGlobalRegistry::getPointerSize(), llvm::SPIRVGlobalRegistry::getRegClass(), llvm::SPIRVGlobalRegistry::getRegType(), llvm::SPIRVGlobalRegistry::getSPIRVTypeForVReg(), llvm::SPIRVGlobalRegistry::getSPIRVTypeID(), llvm::MachineFunction::getSubtarget(), llvm::MachineIRBuilder::getTII(), llvm::DataLayout::getTypeStoreSize(), llvm::IndirectCall, Info, llvm::GlobalValue::isDeclaration(), llvm::isUntypedPointerTy(), llvm::Register::isValid(), llvm::Attribute::isValid(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isZero(), llvm::SPIRV::lowerBuiltin(), lowerFormalArguments(), MRI, llvm::LLT::pointer(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::report_fatal_error(), RetTy, llvm::LLT::scalar(), llvm::SPIRVGlobalRegistry::setCurrentFunc(), llvm::MachineIRBuilder::setMBB(), llvm::MachineIRBuilder::setMF(), llvm::setRegClassType(), and SPIRV_BACKEND_SERVICE_FUN_NAME.
|
overridevirtual |
This hook must be implemented to lower the incoming (formal) arguments, described by VRegs
, for GlobalISel.
Each argument must end up in the related virtual registers described by VRegs
. In other words, the first argument should end up in VRegs
[0], the second in VRegs
[1], and so on. For each argument, there will be one register for each non-aggregate type, as returned by computeValueLLTs
. MIRBuilder
is set to the proper insertion for the argument lowering. FLI
is required for sret demotion.
Reimplemented from llvm::CallLowering.
Definition at line 289 of file SPIRVCallLowering.cpp.
References llvm::SPIRVGlobalRegistry::add(), llvm::MachineInstrBuilder::addDef(), llvm::MachineInstrBuilder::addImm(), llvm::SPIRVGlobalRegistry::addReturnType(), llvm::addStringImm(), llvm::MachineInstrBuilder::addUse(), assert(), llvm::SPIRVGlobalRegistry::assignSPIRVTypeToVReg(), llvm::MachineIRBuilder::buildInstr(), llvm::buildOpDecorate(), llvm::buildOpName(), F, llvm::SPIRVGlobalRegistry::findDeducedElementType(), fixFunctionTypeIfPtrArgs(), llvm::TypedPointerType::get(), getArgSPIRVType(), getConstInt(), getExecutionModel(), getFunctionControl(), llvm::MachineInstrBuilder::getInstr(), getKernelArgTypeQual(), llvm::MachineIRBuilder::getMF(), llvm::MachineIRBuilder::getMRI(), llvm::MDNode::getNumOperands(), llvm::MachineInstr::getOperand(), llvm::SPIRVGlobalRegistry::getOrCreateOpTypeFunctionWithArgs(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVType(), getOriginalFunctionType(), llvm::getPointerAddressSpace(), llvm::SPIRVGlobalRegistry::getRegClass(), llvm::SPIRVGlobalRegistry::getRegType(), llvm::FunctionType::getReturnType(), llvm::SPIRVGlobalRegistry::getSPIRVTypeID(), llvm::MachineFunction::getSubtarget(), llvm::GlobalValue::InternalLinkage, llvm::isEntryPoint(), llvm::isPointerTyOrWrapper(), llvm::isUntypedPointerTy(), llvm::GlobalValue::LinkOnceODRLinkage, MRI, llvm::MDNode::operands(), llvm::GlobalValue::PrivateLinkage, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SPIRVGlobalRegistry::recordFunctionDefinition(), RetTy, llvm::LLT::scalar(), llvm::SPIRVGlobalRegistry::setCurrentFunc(), llvm::size(), llvm::CallingConv::SPIR_KERNEL, SPIRV_BACKEND_SERVICE_FUN_NAME, and llvm::toTypedPointer().
Referenced by lowerCall().
|
overridevirtual |
This hook must be implemented to lower outgoing return values, described by Val
, into the specified virtual registers VRegs
.
This hook is used by GlobalISel.
FLI
is required for sret demotion.
SwiftErrorVReg
is non-zero if the function has a swifterror parameter that needs to be implicitly returned.
Reimplemented from llvm::CallLowering.
Definition at line 35 of file SPIRVCallLowering.cpp.
References llvm::MachineInstrBuilder::addUse(), llvm::MachineIRBuilder::buildInstr(), llvm::SmallVectorImpl< T >::clear(), llvm::MachineInstrBuilder::constrainAllUses(), llvm::Function::getFnAttribute(), llvm::MachineFunction::getFunction(), llvm::MachineIRBuilder::getMF(), llvm::MachineFunction::getSubtarget(), llvm::MachineIRBuilder::getTII(), llvm::Attribute::isValid(), llvm::ArrayRef< T >::size(), llvm::SmallVectorBase< Size_T >::size(), and SPIRV_BACKEND_SERVICE_FUN_NAME.