|
LLVM 22.0.0git
|
#include "Target/RISCV/GISel/RISCVCallLowering.h"
Public Member Functions | |
| RISCVCallLowering (const RISCVTargetLowering &TLI) | |
| bool | lowerReturn (MachineIRBuilder &MIRBuiler, const Value *Val, ArrayRef< Register > VRegs, FunctionLoweringInfo &FLI) const override |
| This hook behaves as the extended lowerReturn function, but for targets that do not support swifterror value promotion. | |
| bool | canLowerReturn (MachineFunction &MF, CallingConv::ID CallConv, SmallVectorImpl< BaseArgInfo > &Outs, bool IsVarArg) const override |
This hook must be implemented to check whether the return values described by Outs can fit into the return registers. | |
| 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 | 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 | fallBackToDAGISel (const MachineFunction &MF) const |
| bool | lowerCall (MachineIRBuilder &MIRBuilder, const CallBase &Call, ArrayRef< Register > ResRegs, ArrayRef< ArrayRef< Register > > ArgRegs, Register SwiftErrorVReg, std::optional< PtrAuthInfo > PAI, Register ConvergenceCtrlToken, std::function< Register()> 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 26 of file RISCVCallLowering.h.
| RISCVCallLowering::RISCVCallLowering | ( | const RISCVTargetLowering & | TLI | ) |
Definition at line 323 of file RISCVCallLowering.cpp.
References llvm::CallLowering::CallLowering().
|
overridevirtual |
This hook must be implemented to check whether the return values described by Outs can fit into the return registers.
If false is returned, an sret-demotion is performed.
Reimplemented from llvm::CallLowering.
Definition at line 434 of file RISCVCallLowering.cpp.
References llvm::CC_RISCV(), llvm::CCValAssign::Full, llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::MVT::getVT(), I, and llvm::SmallVectorTemplateCommon< T, typename >::size().
|
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 574 of file RISCVCallLowering.cpp.
References llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addImm(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildInstrNoInsert(), Call, llvm::CC_RISCV(), llvm::CC_RISCV_FastCC(), llvm::constrainOperandRegClass(), llvm::CallLowering::determineAndHandleAssignments(), DL, llvm::CallingConv::Fast, llvm::MachineFunction::getDataLayout(), llvm::RISCVSubtarget::getInstrInfo(), llvm::MachineIRBuilder::getMF(), llvm::RISCVSubtarget::getRegBankInfo(), llvm::MachineFunction::getRegInfo(), llvm::RISCVSubtarget::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), llvm::MachineIRBuilder::insertInstr(), llvm::CallLowering::insertSRetLoads(), isSupportedArgumentType(), isSupportedReturnType(), llvm::RISCVII::MO_CALL, llvm::CallLowering::splitToValueTypes(), and TRI.
|
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 519 of file RISCVCallLowering.cpp.
References llvm::FunctionLoweringInfo::CanLowerReturn, llvm::CC_RISCV(), llvm::CC_RISCV_FastCC(), llvm::FunctionLoweringInfo::DemoteRegister, llvm::CallLowering::determineAssignments(), DL, F, llvm::CallingConv::Fast, llvm::MachineFunction::getDataLayout(), llvm::MachineIRBuilder::getMF(), llvm::MachineFunction::getRegInfo(), llvm::MachineFunction::getSubtarget(), llvm::CallLowering::handleAssignments(), llvm::CallLowering::insertSRetIncomingArgument(), isSupportedArgumentType(), MRI, llvm::CallLowering::setArgFlags(), and llvm::CallLowering::splitToValueTypes().
|
overridevirtual |
This hook behaves as the extended lowerReturn function, but for targets that do not support swifterror value promotion.
Reimplemented from llvm::CallLowering.
Definition at line 395 of file RISCVCallLowering.cpp.
References assert(), llvm::MachineIRBuilder::buildInstrNoInsert(), llvm::FunctionLoweringInfo::CanLowerReturn, llvm::CC_RISCV(), llvm::CC_RISCV_FastCC(), llvm::FunctionLoweringInfo::DemoteRegister, llvm::CallLowering::determineAndHandleAssignments(), DL, llvm::ArrayRef< T >::empty(), F, llvm::CallingConv::Fast, llvm::MachineFunction::getDataLayout(), llvm::MachineFunction::getFunction(), llvm::MachineIRBuilder::getMF(), llvm::MachineFunction::getRegInfo(), llvm::MachineFunction::getSubtarget(), llvm::Value::getType(), llvm::MachineIRBuilder::insertInstr(), llvm::CallLowering::insertSRetStores(), isSupportedReturnType(), llvm::CallLowering::setArgFlags(), and llvm::CallLowering::splitToValueTypes().