LLVM: llvm::CCState Class Reference (original) (raw)
CCState - This class holds information needed while lowering arguments and return values. More...
#include "[llvm/CodeGen/CallingConvLower.h](CallingConvLower%5F8h%5Fsource.html)"
| Public Member Functions | |
|---|---|
| LLVM_ABI | CCState (CallingConv::ID CC, bool IsVarArg, MachineFunction &MF, SmallVectorImpl< CCValAssign > &Locs, LLVMContext &Context, bool NegativeOffsets=false) |
| void | addLoc (const CCValAssign &V) |
| LLVMContext & | getContext () const |
| MachineFunction & | getMachineFunction () const |
| CallingConv::ID | getCallingConv () const |
| bool | isVarArg () const |
| uint64_t | getStackSize () const |
| Returns the size of the currently allocated portion of the stack. | |
| uint64_t | getAlignedCallFrameSize () const |
| getAlignedCallFrameSize - Return the size of the call frame needed to be able to store all arguments and such that the alignment requirement of each of the arguments is satisfied. | |
| bool | isAllocated (MCRegister Reg) const |
| isAllocated - Return true if the specified register (or an alias) is allocated. | |
| LLVM_ABI void | AnalyzeFormalArguments (const SmallVectorImpl< ISD::InputArg > &Ins, CCAssignFn Fn) |
| AnalyzeFormalArguments - Analyze an array of argument values, incorporating info about the formals into this state. | |
| void | AnalyzeArguments (const SmallVectorImpl< ISD::InputArg > &Ins, CCAssignFn Fn) |
| The function will invoke AnalyzeFormalArguments. | |
| LLVM_ABI void | AnalyzeReturn (const SmallVectorImpl< ISD::OutputArg > &Outs, CCAssignFn Fn) |
| AnalyzeReturn - Analyze the returned values of a return, incorporating info about the result values into this state. | |
| LLVM_ABI bool | CheckReturn (const SmallVectorImpl< ISD::OutputArg > &Outs, CCAssignFn Fn) |
| CheckReturn - Analyze the return values of a function, returning true if the return can be performed without sret-demotion, and false otherwise. | |
| LLVM_ABI void | AnalyzeCallOperands (const SmallVectorImpl< ISD::OutputArg > &Outs, CCAssignFn Fn) |
| AnalyzeCallOperands - Analyze the outgoing arguments to a call, incorporating info about the passed values into this state. | |
| LLVM_ABI void | AnalyzeCallOperands (SmallVectorImpl< MVT > &ArgVTs, SmallVectorImpl< ISD::ArgFlagsTy > &Flags, SmallVectorImpl< Type * > &OrigTys, CCAssignFn Fn) |
| AnalyzeCallOperands - Same as above except it takes vectors of types and argument flags. | |
| void | AnalyzeArguments (const SmallVectorImpl< ISD::OutputArg > &Outs, CCAssignFn Fn) |
| The function will invoke AnalyzeCallOperands. | |
| LLVM_ABI void | AnalyzeCallResult (const SmallVectorImpl< ISD::InputArg > &Ins, CCAssignFn Fn) |
| AnalyzeCallResult - Analyze the return values of a call, incorporating info about the passed values into this state. | |
| LLVM_ABI bool | IsShadowAllocatedReg (MCRegister Reg) const |
| A shadow allocated register is a register that was allocated but wasn't added to the location list (Locs). | |
| LLVM_ABI void | AnalyzeCallResult (MVT VT, Type *OrigTy, CCAssignFn Fn) |
| AnalyzeCallResult - Same as above except it's specialized for calls which produce a single value. | |
| unsigned | getFirstUnallocated (ArrayRef< MCPhysReg > Regs) const |
| getFirstUnallocated - Return the index of the first unallocated register in the set, or Regs.size() if they are all allocated. | |
| void | DeallocateReg (MCPhysReg Reg) |
| MCRegister | AllocateReg (MCPhysReg Reg) |
| AllocateReg - Attempt to allocate one register. | |
| MCRegister | AllocateReg (MCPhysReg Reg, MCPhysReg ShadowReg) |
| Version of AllocateReg with extra register to be shadowed. | |
| MCRegister | AllocateReg (ArrayRef< MCPhysReg > Regs) |
| AllocateReg - Attempt to allocate one of the specified registers. | |
| ArrayRef< MCPhysReg > | AllocateRegBlock (ArrayRef< MCPhysReg > Regs, unsigned RegsRequired) |
| Attempt to allocate a block of RegsRequired consecutive registers. | |
| MCRegister | AllocateReg (ArrayRef< MCPhysReg > Regs, const MCPhysReg *ShadowRegs) |
| Version of AllocateReg with list of registers to be shadowed. | |
| int64_t | AllocateStack (unsigned Size, Align Alignment) |
| AllocateStack - Allocate a chunk of stack space with the specified size and alignment. | |
| LLVM_ABI void | ensureMaxAlignment (Align Alignment) |
| int64_t | AllocateStack (unsigned Size, Align Alignment, ArrayRef< MCPhysReg > ShadowRegs) |
| Version of AllocateStack with list of extra registers to be shadowed. | |
| LLVM_ABI void | HandleByVal (unsigned ValNo, MVT ValVT, MVT LocVT, CCValAssign::LocInfo LocInfo, int MinSize, Align MinAlign, ISD::ArgFlagsTy ArgFlags) |
| Allocate space on the stack large enough to pass an argument by value. | |
| unsigned | getInRegsParamsCount () const |
| unsigned | getInRegsParamsProcessed () const |
| void | getInRegsParamInfo (unsigned InRegsParamRecordIndex, unsigned &BeginReg, unsigned &EndReg) const |
| void | addInRegsParamInfo (unsigned RegBegin, unsigned RegEnd) |
| bool | nextInRegsParam () |
| void | clearByValRegsInfo () |
| void | rewindByValRegsInfo () |
| SmallVectorImpl< CCValAssign > & | getPendingLocs () |
| SmallVectorImpl< ISD::ArgFlagsTy > & | getPendingArgFlags () |
| LLVM_ABI void | getRemainingRegParmsForType (SmallVectorImpl< MCRegister > &Regs, MVT VT, CCAssignFn Fn) |
| Compute the remaining unused register parameters that would be used for the given value type. | |
| LLVM_ABI void | analyzeMustTailForwardedRegisters (SmallVectorImpl< ForwardedRegister > &Forwards, ArrayRef< MVT > RegParmTypes, CCAssignFn Fn) |
| Compute the set of registers that need to be preserved and forwarded to any musttail calls. | |
| template<class T> | |
| void | AnalyzeArgumentsSecondPass (const SmallVectorImpl< T > &Args, CCAssignFn Fn) |
| The function runs an additional analysis pass over function arguments. |
CCState - This class holds information needed while lowering arguments and return values.
It captures which registers are already assigned and which stack slots are used. It provides accessors to allocate these values.
Definition at line 171 of file CallingConvLower.h.
◆ addInRegsParamInfo()
◆ addLoc()
◆ AllocateReg() [1/4]
◆ AllocateReg() [2/4]
◆ AllocateReg() [3/4]
AllocateReg - Attempt to allocate one register.
If it is not available, return zero. Otherwise, return the register, marking it and any aliases as allocated.
Definition at line 333 of file CallingConvLower.h.
References isAllocated(), and Reg.
Referenced by allocateFixedSGPRInputImpl(), allocateHSAUserSGPRs(), llvm::SITargetLowering::allocateHSAUserSGPRs(), llvm::SITargetLowering::allocateLDSKernelId(), llvm::SITargetLowering::allocatePreloadKernArgSGPRs(), allocateSGPR32InputImpl(), llvm::SITargetLowering::allocateSpecialEntryInputVGPRs(), llvm::SITargetLowering::allocateSpecialInputVGPRsFixed(), llvm::SITargetLowering::allocateSystemSGPRs(), allocateVGPR32Input(), llvm::analyzeArguments(), llvm::analyzeReturnValues(), llvm::SITargetLowering::LowerFormalArguments(), llvm::AMDGPUCallLowering::lowerFormalArguments(), llvm::AMDGPUCallLowering::passSpecialInputs(), and llvm::SITargetLowering::passSpecialInputs().
◆ AllocateReg() [4/4]
◆ AllocateRegBlock()
◆ AllocateStack() [1/2]
| int64_t llvm::CCState::AllocateStack ( unsigned Size, Align Alignment ) | inline |
|---|
AllocateStack - Allocate a chunk of stack space with the specified size and alignment.
Definition at line 408 of file CallingConvLower.h.
References llvm::alignTo(), ensureMaxAlignment(), llvm::Offset, and Size.
Referenced by AllocateStack(), allocateVGPR32Input(), llvm::analyzeArguments(), analyzeCallOperands(), HandleByVal(), llvm::VETargetLowering::LowerCall(), llvm::MipsCallLowering::lowerCall(), llvm::VETargetLowering::LowerFormalArguments(), llvm::MipsCallLowering::lowerFormalArguments(), and llvm::SITargetLowering::passSpecialInputs().
◆ AllocateStack() [2/2]
Version of AllocateStack with list of extra registers to be shadowed.
Note that, unlike AllocateReg, this shadows ALL of the shadow registers.
Definition at line 426 of file CallingConvLower.h.
References AllocateStack(), Reg, and Size.
◆ AnalyzeArguments() [1/2]
◆ AnalyzeArguments() [2/2]
◆ AnalyzeArgumentsSecondPass()
The function runs an additional analysis pass over function arguments.
It will mark each argument with the attribute flag SecArgPass. After running, it will sort the locs list.
Creates similar argument list to Args in which each argument is marked using SecArgPass flag.
Definition at line 520 of file CallingConvLower.h.
References A(), AnalyzeArguments(), B(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), E(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::SmallVectorImpl< T >::swap().
◆ AnalyzeCallOperands() [1/2]
AnalyzeCallOperands - Analyze the outgoing arguments to a call, incorporating info about the passed values into this state.
Analyze the outgoing arguments to a call, incorporating info about the passed values into this state.
Definition at line 126 of file CallingConvLower.cpp.
References AbstractManglingParser< Derived, Alloc >::NumOps, llvm::dbgs(), llvm::CCValAssign::Full, llvm_unreachable, and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by AnalyzeArguments(), llvm::SITargetLowering::isEligibleForTailCallOptimization(), llvm::HexagonTargetLowering::LowerCall(), llvm::LoongArchTargetLowering::LowerCall(), llvm::RISCVTargetLowering::LowerCall(), llvm::SITargetLowering::LowerCall(), llvm::SystemZTargetLowering::LowerCall(), llvm::VETargetLowering::LowerCall(), llvm::XtensaTargetLowering::LowerCall(), llvm::SparcTargetLowering::LowerCall_32(), and llvm::SparcTargetLowering::LowerCall_64().
◆ AnalyzeCallOperands() [2/2]
◆ AnalyzeCallResult() [1/2]
AnalyzeCallResult - Analyze the return values of a call, incorporating info about the passed values into this state.
Analyze the return values of a call, incorporating info about the passed values into this state.
Definition at line 164 of file CallingConvLower.cpp.
References llvm::dbgs(), llvm::CCValAssign::Full, llvm_unreachable, and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by llvm::SystemZTargetLowering::LowerCall(), llvm::VETargetLowering::LowerCall(), llvm::XtensaTargetLowering::LowerCall(), llvm::SparcTargetLowering::LowerCall_32(), llvm::SparcTargetLowering::LowerCall_64(), llvm::HexagonTargetLowering::LowerCallResult(), llvm::SITargetLowering::LowerCallResult(), and resultsCompatible().
◆ AnalyzeCallResult() [2/2]
◆ AnalyzeFormalArguments()
AnalyzeFormalArguments - Analyze an array of argument values, incorporating info about the formals into this state.
Analyze an array of argument values, incorporating info about the formals into this state.
Definition at line 85 of file CallingConvLower.cpp.
References llvm::CCValAssign::Full, llvm::report_fatal_error(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by AnalyzeArguments(), llvm::HexagonTargetLowering::LowerFormalArguments(), llvm::LoongArchTargetLowering::LowerFormalArguments(), llvm::R600TargetLowering::LowerFormalArguments(), llvm::RISCVTargetLowering::LowerFormalArguments(), llvm::SITargetLowering::LowerFormalArguments(), llvm::SystemZTargetLowering::LowerFormalArguments(), llvm::VETargetLowering::LowerFormalArguments(), llvm::XtensaTargetLowering::LowerFormalArguments(), llvm::SparcTargetLowering::LowerFormalArguments_32(), and llvm::SparcTargetLowering::LowerFormalArguments_64().
◆ analyzeMustTailForwardedRegisters()
◆ AnalyzeReturn()
AnalyzeReturn - Analyze the returned values of a return, incorporating info about the result values into this state.
Analyze the returned values of a return, incorporating info about the result values into this state.
Definition at line 113 of file CallingConvLower.cpp.
References llvm::CCValAssign::Full, llvm::report_fatal_error(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by llvm::HexagonTargetLowering::LowerReturn(), llvm::SITargetLowering::LowerReturn(), llvm::SystemZTargetLowering::LowerReturn(), llvm::VETargetLowering::LowerReturn(), llvm::XtensaTargetLowering::LowerReturn(), llvm::SparcTargetLowering::LowerReturn_32(), and llvm::SparcTargetLowering::LowerReturn_64().
◆ CheckReturn()
CheckReturn - Analyze the return values of a function, returning true if the return can be performed without sret-demotion, and false otherwise.
Analyze the return values of a function, returning true if the return can be performed without sret-demotion and false otherwise.
Definition at line 99 of file CallingConvLower.cpp.
References llvm::CCValAssign::Full, and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by llvm::HexagonTargetLowering::CanLowerReturn(), llvm::LanaiTargetLowering::CanLowerReturn(), llvm::SITargetLowering::CanLowerReturn(), llvm::SparcTargetLowering::CanLowerReturn(), llvm::SystemZTargetLowering::CanLowerReturn(), llvm::VETargetLowering::CanLowerReturn(), and llvm::XtensaTargetLowering::CanLowerReturn().
◆ clearByValRegsInfo()
| void llvm::CCState::clearByValRegsInfo ( ) | inline |
|---|
◆ DeallocateReg()
| void llvm::CCState::DeallocateReg ( MCPhysReg Reg) | inline |
|---|
◆ ensureMaxAlignment()
| void CCState::ensureMaxAlignment | ( | Align | Alignment | ) |
|---|
◆ getAlignedCallFrameSize()
| uint64_t llvm::CCState::getAlignedCallFrameSize ( ) const | inline |
|---|
getAlignedCallFrameSize - Return the size of the call frame needed to be able to store all arguments and such that the alignment requirement of each of the arguments is satisfied.
Definition at line 251 of file CallingConvLower.h.
References llvm::alignTo().
◆ getCallingConv()
◆ getContext()
| LLVMContext & llvm::CCState::getContext ( ) const | inline |
|---|
◆ getFirstUnallocated()
getFirstUnallocated - Return the index of the first unallocated register in the set, or Regs.size() if they are all allocated.
Definition at line 318 of file CallingConvLower.h.
References isAllocated(), and llvm::ArrayRef< T >::size().
Referenced by AllocateReg(), AllocateReg(), allocateSGPR32InputImpl(), allocateVGPR32Input(), llvm::LoongArchTargetLowering::LowerFormalArguments(), llvm::RISCVTargetLowering::LowerFormalArguments(), llvm::SITargetLowering::LowerFormalArguments(), llvm::XtensaTargetLowering::LowerFormalArguments(), llvm::AMDGPUCallLowering::lowerFormalArguments(), llvm::MipsCallLowering::lowerFormalArguments(), and llvm::SparcTargetLowering::LowerFormalArguments_32().
◆ getInRegsParamInfo()
| void llvm::CCState::getInRegsParamInfo ( unsigned InRegsParamRecordIndex, unsigned & BeginReg, unsigned & EndReg ) const | inline |
|---|
◆ getInRegsParamsCount()
| unsigned llvm::CCState::getInRegsParamsCount ( ) const | inline |
|---|
◆ getInRegsParamsProcessed()
| unsigned llvm::CCState::getInRegsParamsProcessed ( ) const | inline |
|---|
◆ getMachineFunction()
◆ getPendingArgFlags()
◆ getPendingLocs()
◆ getRemainingRegParmsForType()
Compute the remaining unused register parameters that would be used for the given value type.
This is useful when varargs are passed in the registers that normal prototyped parameters would be passed in, or for implementing perfect forwarding.
Definition at line 203 of file CallingConvLower.cpp.
References assert(), llvm::dbgs(), llvm::CCValAssign::Full, llvm::EVT::getTypeForEVT(), I, isValueTypeInRegForCC(), llvm_unreachable, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::ISD::ArgFlagsTy::setInReg().
Referenced by analyzeMustTailForwardedRegisters().
◆ getStackSize()
| uint64_t llvm::CCState::getStackSize ( ) const | inline |
|---|
Returns the size of the currently allocated portion of the stack.
Definition at line 246 of file CallingConvLower.h.
Referenced by llvm::AMDGPUCallLowering::areCalleeOutgoingArgsTailCallable(), llvm::SparcTargetLowering::IsEligibleForTailCallOptimization(), llvm::SITargetLowering::isEligibleForTailCallOptimization(), llvm::HexagonTargetLowering::LowerCall(), llvm::LoongArchTargetLowering::LowerCall(), llvm::RISCVTargetLowering::LowerCall(), llvm::SITargetLowering::LowerCall(), llvm::SystemZTargetLowering::LowerCall(), llvm::VETargetLowering::LowerCall(), llvm::XtensaTargetLowering::LowerCall(), llvm::AMDGPUCallLowering::lowerCall(), llvm::MipsCallLowering::lowerCall(), llvm::SparcTargetLowering::LowerCall_32(), llvm::SparcTargetLowering::LowerCall_64(), llvm::HexagonTargetLowering::LowerFormalArguments(), llvm::LoongArchTargetLowering::LowerFormalArguments(), llvm::RISCVTargetLowering::LowerFormalArguments(), llvm::SITargetLowering::LowerFormalArguments(), llvm::SystemZTargetLowering::LowerFormalArguments(), llvm::XtensaTargetLowering::LowerFormalArguments(), llvm::MipsCallLowering::lowerFormalArguments(), llvm::SparcTargetLowering::LowerFormalArguments_32(), llvm::SparcTargetLowering::LowerFormalArguments_64(), and llvm::AMDGPUCallLowering::lowerTailCall().
◆ HandleByVal()
◆ isAllocated()
◆ IsShadowAllocatedReg()
A shadow allocated register is a register that was allocated but wasn't added to the location list (Locs).
Returns
true if the register was allocated as shadow or false otherwise.
Definition at line 72 of file CallingConvLower.cpp.
References isAllocated().
◆ isVarArg()
| bool llvm::CCState::isVarArg ( ) const | inline |
|---|
◆ nextInRegsParam()
| bool llvm::CCState::nextInRegsParam ( ) | inline |
|---|
◆ resultsCompatible()
Returns true if the results of the two calling conventions are compatible.
This is usually part of the check for tailcall eligibility.
Definition at line 264 of file CallingConvLower.cpp.
References AnalyzeCallResult(), assert(), llvm::CallingConv::C, CCState(), llvm::equal(), llvm::CCValAssign::getLocInfo(), llvm::CCValAssign::getLocMemOffset(), llvm::CCValAssign::getLocReg(), llvm::CCValAssign::isMemLoc(), llvm::CCValAssign::isPendingLoc(), llvm::CCValAssign::isRegLoc(), and llvm_unreachable.
Referenced by llvm::SITargetLowering::isEligibleForTailCallOptimization().
◆ rewindByValRegsInfo()
| void llvm::CCState::rewindByValRegsInfo ( ) | inline |
|---|
The documentation for this class was generated from the following files:
- include/llvm/CodeGen/CallingConvLower.h
- lib/CodeGen/CallingConvLower.cpp