LLVM 20.0.0git
|
This file implements some simple delegations needed for call lowering. More...
#include "llvm/CodeGen/GlobalISel/CallLowering.h"
#include "llvm/CodeGen/Analysis.h"
#include "llvm/CodeGen/CallingConvLower.h"
#include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
#include "llvm/CodeGen/GlobalISel/Utils.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/TargetLowering.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/Target/TargetMachine.h"
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "call-lowering" |
Functions | |
static void | addFlagsUsingAttrFn (ISD::ArgFlagsTy &Flags, const std::function< bool(Attribute::AttrKind)> &AttrFn) |
Helper function which updates Flags when AttrFn returns true. | |
static MachineInstrBuilder | mergeVectorRegsToResultRegs (MachineIRBuilder &B, ArrayRef< Register > DstRegs, ArrayRef< Register > SrcRegs) |
Pack values SrcRegs to cover the vector type result DstRegs . | |
static void | buildCopyFromRegs (MachineIRBuilder &B, ArrayRef< Register > OrigRegs, ArrayRef< Register > Regs, LLT LLTy, LLT PartLLT, const ISD::ArgFlagsTy Flags) |
Create a sequence of instructions to combine pieces split into register typed values to the original IR value. | |
static void | buildCopyToRegs (MachineIRBuilder &B, ArrayRef< Register > DstRegs, Register SrcReg, LLT SrcTy, LLT PartTy, unsigned ExtendOp=TargetOpcode::G_ANYEXT) |
Create a sequence of instructions to expand the value in SrcReg (of type SrcTy ) to the types in DstRegs (of type PartTy ). | |
static unsigned | extendOpFromFlags (llvm::ISD::ArgFlagsTy Flags) |
static bool | isCopyCompatibleType (LLT SrcTy, LLT DstTy) |
Check if we can use a basic COPY instruction between the two types. | |
This file implements some simple delegations needed for call lowering.
Definition in file CallLowering.cpp.
#define DEBUG_TYPE "call-lowering" |
Definition at line 29 of file CallLowering.cpp.
|
static |
Helper function which updates Flags
when AttrFn
returns true.
Definition at line 37 of file CallLowering.cpp.
Referenced by llvm::CallLowering::addArgFlagsFromAttributes(), llvm::CallLowering::getAttributesForArgIdx(), and llvm::CallLowering::getAttributesForReturn().
|
static |
Create a sequence of instructions to combine pieces split into register typed values to the original IR value.
OrigRegs
contains the destination value registers of type LLTy
, and Regs
contains the legalized pieces with type PartLLT
. This is used for incoming values (physregs to vregs).
Definition at line 373 of file CallLowering.cpp.
References assert(), B, llvm::LLT::changeElementCount(), llvm::LLT::changeElementType(), llvm::divideCeil(), llvm::ArrayRef< T >::drop_front(), llvm::LLT::fixed_vector(), llvm::LLT::getElementCount(), llvm::LLT::getElementType(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getFixedValue(), llvm::getGCDType(), llvm::LLT::getNumElements(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::LLT::getSizeInBits(), I, llvm::details::FixedOrScalableQuantity< TypeSize, uint64_t >::isKnownGT(), llvm::LLT::isPointer(), llvm::LLT::isVector(), Merge, mergeVectorRegsToResultRegs(), MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorImpl< T >::reserve(), llvm::LLT::scalar(), llvm::ArrayRef< T >::size(), llvm::SmallVectorBase< Size_T >::size(), llvm::ArrayRef< T >::take_front(), and llvm::SmallVectorImpl< T >::truncate().
Referenced by llvm::CallLowering::handleAssignments().
|
static |
Create a sequence of instructions to expand the value in SrcReg
(of type SrcTy
) to the types in DstRegs
(of type PartTy
).
ExtendOp
should contain the type of scalar value extension if necessary.
This is used for outgoing values (vregs to physregs)
Definition at line 558 of file CallLowering.cpp.
References llvm::alignTo(), assert(), B, llvm::ArrayRef< T >::front(), llvm::getCoverTy(), llvm::LLT::getElementCount(), llvm::LLT::getElementType(), llvm::getGCDType(), llvm::LLT::getNumElements(), getReg(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getSizeInBits(), llvm::details::FixedOrScalableQuantity< TypeSize, uint64_t >::isKnownGT(), llvm::details::FixedOrScalableQuantity< ElementCount, unsigned >::isKnownLT(), llvm::LLT::isScalar(), llvm::LLT::isVector(), MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::LLT::scalar(), llvm::ArrayRef< T >::size(), Size, and llvm::LLT::vector().
Referenced by llvm::CallLowering::handleAssignments().
|
static |
Definition at line 666 of file CallLowering.cpp.
Referenced by llvm::CallLowering::handleAssignments().
Check if we can use a basic COPY instruction between the two types.
We're currently building on top of the infrastructure using MVT, which loses pointer information in the CCValAssign. We accept copies from physical registers that have been reported as integers if it's to an equivalent sized pointer LLT.
Definition at line 1370 of file CallLowering.cpp.
References llvm::LLT::getScalarType(), llvm::LLT::getSizeInBits(), llvm::LLT::isPointer(), and llvm::LLT::isScalar().
Referenced by llvm::CallLowering::IncomingValueHandler::assignValueToReg().
|
static |
Pack values SrcRegs
to cover the vector type result DstRegs
.
Definition at line 327 of file CallLowering.cpp.
References assert(), B, llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::ArrayRef< T >::begin(), llvm::ArrayRef< T >::end(), llvm::getCoverTy(), llvm::LLT::getSizeInBits(), I, MRI, llvm::ArrayRef< T >::size(), and llvm::SmallVectorBase< Size_T >::size().
Referenced by buildCopyFromRegs().