|
LLVM 22.0.0git
|
#include "Target/Mips/MipsCallLowering.h"
Public Member Functions | |
| MipsCallLowering (const MipsTargetLowering &TLI) | |
| bool | lowerReturn (MachineIRBuilder &MIRBuilder, 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 | 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 | 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 23 of file MipsCallLowering.h.
| MipsCallLowering::MipsCallLowering | ( | const MipsTargetLowering & | TLI | ) |
Definition at line 25 of file MipsCallLowering.cpp.
References llvm::CallLowering::CallLowering().
|
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 383 of file MipsCallLowering.cpp.
References llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addDef(), llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addRegMask(), llvm::MachineInstrBuilder::addUse(), llvm::alignTo(), llvm::CCState::AllocateStack(), llvm::MachineIRBuilder::buildCopy(), llvm::MachineIRBuilder::buildGlobalValue(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildInstrNoInsert(), llvm::CallingConv::C, llvm::SmallVectorImpl< T >::clear(), llvm::MachineInstrBuilder::constrainAllUses(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::CallLowering::determineAssignments(), DL, F, llvm::CallLowering::BaseArgInfo::Flags, llvm::MachineFunction::getDataLayout(), llvm::TargetSubtargetInfo::getFrameLowering(), llvm::MachineFunction::getFunction(), llvm::MipsFunctionInfo::getGlobalBaseRegForGlobalISel(), llvm::MachineFunction::getInfo(), llvm::MachineIRBuilder::getMF(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MipsSubtarget::getRegBankInfo(), llvm::MachineFunction::getRegInfo(), llvm::MipsSubtarget::getRegisterInfo(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::TargetFrameLowering::getStackAlignment(), llvm::CCState::getStackSize(), llvm::MachineFunction::getSubtarget(), llvm::MachineFunction::getTarget(), llvm::MachineIRBuilder::getTII(), llvm::CallLowering::getTLI(), llvm::CallLowering::handleAssignments(), llvm::RegState::Implicit, llvm::MachineIRBuilder::insertInstr(), llvm::Type::isPointerTy(), isSupportedArgumentType(), isSupportedReturnType(), llvm::Function::isVarArg(), llvm::MipsII::MO_GOT_CALL, llvm::LLT::pointer(), Register, llvm::MachineOperand::setTargetFlags(), llvm::CallLowering::splitToValueTypes(), TRI, and llvm::CallLowering::BaseArgInfo::Ty.
|
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 299 of file MipsCallLowering.cpp.
References llvm::MachineBasicBlock::addLiveIn(), llvm::alignTo(), llvm::CCState::AllocateStack(), llvm::MachineIRBuilder::buildCopy(), llvm::MachineIRBuilder::buildFrameIndex(), llvm::MachineIRBuilder::buildStore(), llvm::MachineFrameInfo::CreateFixedObject(), llvm::CallLowering::determineAssignments(), DL, F, llvm::MachinePointerInfo::getAddrSpace(), llvm::CCState::getCallingConv(), llvm::MachineFunction::getDataLayout(), llvm::CCState::getFirstUnallocated(), llvm::MachinePointerInfo::getFixedStack(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getInfo(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineIRBuilder::getMBB(), llvm::MachineIRBuilder::getMF(), llvm::MachineFunction::getRegInfo(), llvm::CCState::getStackSize(), llvm::MachineFunction::getSubtarget(), llvm::MachineFunction::getTarget(), llvm::CallLowering::getTLI(), llvm::CallLowering::handleAssignments(), I, llvm::MipsSubtarget::isGP64bit(), isSupportedArgumentType(), llvm::MachineMemOperand::MOStore, llvm::LLT::pointer(), Register, RegSize, llvm::LLT::scalar(), llvm::CallLowering::setArgFlags(), llvm::ArrayRef< T >::size(), 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 259 of file MipsCallLowering.cpp.
References llvm::MachineIRBuilder::buildInstrNoInsert(), llvm::CallLowering::determineAssignments(), DL, llvm::ArrayRef< T >::empty(), F, llvm::MachineFunction::getDataLayout(), llvm::MachineFunction::getFunction(), llvm::MachineIRBuilder::getMF(), llvm::MachineFunction::getRegInfo(), llvm::CallLowering::getTLI(), llvm::Value::getType(), llvm::CallLowering::handleAssignments(), llvm::MachineIRBuilder::insertInstr(), isSupportedReturnType(), llvm::CallLowering::setArgFlags(), and llvm::CallLowering::splitToValueTypes().