LLVM 20.0.0git
Macros | Functions
CallLowering.cpp File Reference

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.
 

Detailed Description

This file implements some simple delegations needed for call lowering.

Definition in file CallLowering.cpp.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "call-lowering"

Definition at line 29 of file CallLowering.cpp.

Function Documentation

◆ addFlagsUsingAttrFn()

static void addFlagsUsingAttrFn ( ISD::ArgFlagsTy Flags,
const std::function< bool(Attribute::AttrKind)> &  AttrFn 
)
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().

◆ buildCopyFromRegs()

static void buildCopyFromRegs ( MachineIRBuilder B,
ArrayRef< Register OrigRegs,
ArrayRef< Register Regs,
LLT  LLTy,
LLT  PartLLT,
const ISD::ArgFlagsTy  Flags 
)
static

◆ buildCopyToRegs()

static void buildCopyToRegs ( MachineIRBuilder B,
ArrayRef< Register DstRegs,
Register  SrcReg,
LLT  SrcTy,
LLT  PartTy,
unsigned  ExtendOp = TargetOpcode::G_ANYEXT 
)
static

◆ extendOpFromFlags()

static unsigned extendOpFromFlags ( llvm::ISD::ArgFlagsTy  Flags)
static

Definition at line 666 of file CallLowering.cpp.

Referenced by llvm::CallLowering::handleAssignments().

◆ isCopyCompatibleType()

static bool isCopyCompatibleType ( LLT  SrcTy,
LLT  DstTy 
)
static

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().

◆ mergeVectorRegsToResultRegs()

static MachineInstrBuilder mergeVectorRegsToResultRegs ( MachineIRBuilder B,
ArrayRef< Register DstRegs,
ArrayRef< Register SrcRegs 
)
static