LLVM 20.0.0git
Classes | Typedefs | Enumerations | Functions | Variables
llvm::Intrinsic Namespace Reference

This namespace contains an enum with a value for every intrinsic/builtin function known by LLVM. More...

Classes

struct  IITDescriptor
 This is a type descriptor which explains the type requirements of an intrinsic. More...
 

Typedefs

using ID = unsigned
 

Enumerations

enum  IndependentIntrinsics : unsigned { not_intrinsic = 0 }
 
enum  MatchIntrinsicTypesResult { MatchIntrinsicTypes_Match = 0 , MatchIntrinsicTypes_NoMatchRet = 1 , MatchIntrinsicTypes_NoMatchArg = 2 }
 

Functions

StringRef getName (ID id)
 Return the LLVM name for an intrinsic, such as "llvm.ppc.altivec.lvx".
 
StringRef getBaseName (ID id)
 Return the LLVM name for an intrinsic, without encoded types for overloading, such as "llvm.ssa.copy".
 
std::string getName (ID Id, ArrayRef< Type * > Tys, Module *M, FunctionType *FT=nullptr)
 Return the LLVM name for an intrinsic, such as "llvm.ppc.altivec.lvx" or "llvm.ssa.copy.p0s_s.1".
 
std::string getNameNoUnnamedTypes (ID Id, ArrayRef< Type * > Tys)
 Return the LLVM name for an intrinsic.
 
FunctionTypegetType (LLVMContext &Context, ID id, ArrayRef< Type * > Tys={})
 Return the function type for an intrinsic.
 
bool isOverloaded (ID id)
 Returns true if the intrinsic can be overloaded.
 
bool isTargetIntrinsic (ID IID)
 isTargetIntrinsic - Returns true if IID is an intrinsic specific to a certain target.
 
ID lookupIntrinsicID (StringRef Name)
 This does the actual lookup of an intrinsic ID which matches the given function name.
 
AttributeList getAttributes (LLVMContext &C, ID id)
 Return the attributes for an intrinsic.
 
FunctiongetOrInsertDeclaration (Module *M, ID id, ArrayRef< Type * > Tys={})
 Look up the Function declaration of the intrinsic id in the Module M.
 
 LLVM_DEPRECATED ("Use getOrInsertDeclaration instead", "getOrInsertDeclaration") inline Function *getDeclaration(Module *M
 
FunctiongetDeclarationIfExists (Module *M, ID id, ArrayRef< Type * > Tys, FunctionType *FT=nullptr)
 This version supports overloaded intrinsics.
 
ID getIntrinsicForClangBuiltin (StringRef TargetPrefix, StringRef BuiltinName)
 Map a Clang builtin name to an intrinsic ID.
 
ID getIntrinsicForMSBuiltin (StringRef TargetPrefix, StringRef BuiltinName)
 Map a MS builtin name to an intrinsic ID.
 
bool isConstrainedFPIntrinsic (ID QID)
 Returns true if the intrinsic ID is for one of the "Constrained Floating-Point Intrinsics".
 
bool hasConstrainedFPRoundingModeOperand (ID QID)
 Returns true if the intrinsic ID is for one of the "Constrained Floating-Point Intrinsics" that take rounding mode metadata.
 
void getIntrinsicInfoTableEntries (ID id, SmallVectorImpl< IITDescriptor > &T)
 Return the IIT table descriptor for the specified intrinsic into an array of IITDescriptors.
 
MatchIntrinsicTypesResult matchIntrinsicSignature (FunctionType *FTy, ArrayRef< IITDescriptor > &Infos, SmallVectorImpl< Type * > &ArgTys)
 Match the specified function type with the type constraints specified by the .td file.
 
bool matchIntrinsicVarArg (bool isVarArg, ArrayRef< IITDescriptor > &Infos)
 Verify if the intrinsic has variable arguments.
 
bool getIntrinsicSignature (Intrinsic::ID, FunctionType *FT, SmallVectorImpl< Type * > &ArgTys)
 Gets the type arguments of an intrinsic call by matching type contraints specified by the .td file.
 
bool getIntrinsicSignature (Function *F, SmallVectorImpl< Type * > &ArgTys)
 Same as previous, but accepts a Function instead of ID and FunctionType.
 
std::optional< Function * > remangleIntrinsicFunction (Function *F)
 

Variables

static const int NoAliasScopeDeclScopeArg = 0
 
ID id
 
ID ArrayRef< Type * > Tys
 

Detailed Description

This namespace contains an enum with a value for every intrinsic/builtin function known by LLVM.

The enum values are returned by Function::getIntrinsicID().

Typedef Documentation

◆ ID

Definition at line 28 of file GenericSSAContext.h.

Enumeration Type Documentation

◆ IndependentIntrinsics

Enumerator
not_intrinsic 

Definition at line 43 of file Intrinsics.h.

◆ MatchIntrinsicTypesResult

Enumerator
MatchIntrinsicTypes_Match 
MatchIntrinsicTypes_NoMatchRet 
MatchIntrinsicTypes_NoMatchArg 

Definition at line 229 of file Intrinsics.h.

Function Documentation

◆ getAttributes()

AttributeList llvm::Intrinsic::getAttributes ( LLVMContext C,
ID  id 
)

◆ getBaseName()

StringRef llvm::Intrinsic::getBaseName ( ID  id)

Return the LLVM name for an intrinsic, without encoded types for overloading, such as "llvm.ssa.copy".

Definition at line 41 of file Intrinsics.cpp.

References assert(), and id.

Referenced by llvm::VPWidenIntrinsicRecipe::getIntrinsicName(), getIntrinsicNameImpl(), getName(), llvm::SDNode::getOperationName(), and llvm::MachineOperand::print().

◆ getDeclarationIfExists()

Function * llvm::Intrinsic::getDeclarationIfExists ( Module M,
ID  id,
ArrayRef< Type * >  Tys,
FunctionType FT = nullptr 
)

◆ getIntrinsicForClangBuiltin()

ID llvm::Intrinsic::getIntrinsicForClangBuiltin ( StringRef  TargetPrefix,
StringRef  BuiltinName 
)

Map a Clang builtin name to an intrinsic ID.

◆ getIntrinsicForMSBuiltin()

ID llvm::Intrinsic::getIntrinsicForMSBuiltin ( StringRef  TargetPrefix,
StringRef  BuiltinName 
)

Map a MS builtin name to an intrinsic ID.

◆ getIntrinsicInfoTableEntries()

void llvm::Intrinsic::getIntrinsicInfoTableEntries ( ID  id,
SmallVectorImpl< IITDescriptor > &  T 
)

Return the IIT table descriptor for the specified intrinsic into an array of IITDescriptors.

Definition at line 446 of file Intrinsics.cpp.

References DecodeIITType(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::ArrayRef< T >::size().

Referenced by llvm::IRBuilderBase::CreateIntrinsic(), getIntrinsicSignature(), and getType().

◆ getIntrinsicSignature() [1/2]

bool llvm::Intrinsic::getIntrinsicSignature ( Function F,
SmallVectorImpl< Type * > &  ArgTys 
)

Same as previous, but accepts a Function instead of ID and FunctionType.

Definition at line 1077 of file Intrinsics.cpp.

References F, and getIntrinsicSignature().

◆ getIntrinsicSignature() [2/2]

bool llvm::Intrinsic::getIntrinsicSignature ( Intrinsic::ID  ID,
FunctionType FT,
SmallVectorImpl< Type * > &  ArgTys 
)

Gets the type arguments of an intrinsic call by matching type contraints specified by the .td file.

The overloaded types are pushed into the AgTys vector.

Returns false if the given ID and function type combination is not a valid intrinsic call.

Definition at line 1059 of file Intrinsics.cpp.

References getIntrinsicInfoTableEntries(), llvm::FunctionType::isVarArg(), matchIntrinsicSignature(), and matchIntrinsicVarArg().

Referenced by getIntrinsicSignature(), modifyIntrinsicCall(), optimizeSection(), remangleIntrinsicFunction(), and simplifyAMDGCNMemoryIntrinsicDemanded().

◆ getName() [1/2]

StringRef llvm::Intrinsic::getName ( ID  id)

Return the LLVM name for an intrinsic, such as "llvm.ppc.altivec.lvx".

Note, this version is for intrinsics with no overloads. Use the other version of getName if overloads are required.

Definition at line 46 of file Intrinsics.cpp.

References assert(), getBaseName(), and isOverloaded().

Referenced by LLVMIntrinsicCopyOverloadedName2(), LLVMIntrinsicGetName(), remangleIntrinsicFunction(), replaceWithCallToVeclib(), llvm::IRSimilarity::IRInstructionData::setCalleeName(), and upgradeIntrinsicFunction1().

◆ getName() [2/2]

std::string llvm::Intrinsic::getName ( ID  Id,
ArrayRef< Type * >  Tys,
Module M,
FunctionType FT = nullptr 
)

Return the LLVM name for an intrinsic, such as "llvm.ppc.altivec.lvx" or "llvm.ssa.copy.p0s_s.1".

Note, this version of getName supports overloads. This is less efficient than the StringRef version of this function. If no overloads are required, it is safe to use this version, but better to use the StringRef version. If one of the types is based on an unnamed type, a function type will be computed. Providing FT will avoid this computation.

Definition at line 178 of file Intrinsics.cpp.

References assert(), getIntrinsicNameImpl(), and Tys.

◆ getNameNoUnnamedTypes()

std::string llvm::Intrinsic::getNameNoUnnamedTypes ( ID  Id,
ArrayRef< Type * >  Tys 
)

Return the LLVM name for an intrinsic.

This is a special version only to be used by LLVMIntrinsicCopyOverloadedName. It only supports overloads based on named types.

Definition at line 184 of file Intrinsics.cpp.

References getIntrinsicNameImpl(), and Tys.

Referenced by LLVMIntrinsicCopyOverloadedName().

◆ getOrInsertDeclaration()

Function * llvm::Intrinsic::getOrInsertDeclaration ( Module M,
ID  id,
ArrayRef< Type * >  Tys = {} 
)

Look up the Function declaration of the intrinsic id in the Module M.

If it does not exist, add a declaration and return it. Otherwise, return the existing declaration.

The Tys parameter is for intrinsics with overloaded types (e.g., those using iAny, fAny, vAny, or pAny). For a declaration of an overloaded intrinsic, Tys must provide exactly one type for each overloaded type in the intrinsic.

Definition at line 731 of file Intrinsics.cpp.

References getName(), getType(), and Tys.

Referenced by addAssumeNonNull(), convertNvvmIntrinsicToLlvm(), convertToParamAS(), convertToRelLookupTable(), llvm::IRBuilderBase::CreateAssumption(), llvm::IRBuilderBase::CreateBinaryIntrinsic(), llvm::MatrixBuilder::CreateColumnMajorLoad(), llvm::MatrixBuilder::CreateColumnMajorStore(), createCoroSave(), llvm::DbgLabelRecord::createDebugIntrinsic(), llvm::DbgVariableRecord::createDebugIntrinsic(), CreateGCRelocates(), CreateGCStatepointCallCommon(), CreateGCStatepointInvokeCommon(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::IRBuilderBase::CreateLaunderInvariantGroup(), llvm::MatrixBuilder::CreateMatrixMultiply(), llvm::MatrixBuilder::CreateMatrixTranspose(), llvm::IRBuilderBase::CreateStripInvariantGroup(), llvm::IRBuilderBase::CreateUnaryIntrinsic(), llvm::IRBuilderBase::CreateVectorReverse(), llvm::IRBuilderBase::CreateVectorSplice(), llvm::PPCTargetLowering::emitMaskedAtomicCmpXchgIntrinsic(), llvm::LoongArchTargetLowering::emitMaskedAtomicRMWIntrinsic(), llvm::RISCVTargetLowering::emitMaskedAtomicRMWIntrinsic(), llvm::AArch64TargetLowering::emitStoreConditional(), llvm::ARMTargetLowering::emitStoreConditional(), emitTPIDR2Save(), llvm::InstCombinerImpl::EvaluateInDifferentType(), llvm::VPWidenIntrinsicRecipe::execute(), expandIToFP(), explicifyGuards(), factorizeMinMaxTree(), llvm::AMDGPULibCalls::fold(), foldBitwiseLogicWithIntrinsics(), foldCtpop(), foldCttzCtlz(), foldShuffleOfUnaryOps(), foldSubOfMinMax(), foldToUnsignedSaturatedAdd(), llvm::InstCombinerImpl::foldVectorBinop(), foldVectorCmp(), generateUnsignedDivisionCode(), llvm::memtag::getAndroidSlotPtr(), getDeclareIntrin(), llvm::VPIntrinsic::getOrInsertDeclarationForParams(), getStructuredLoadFunction(), getStructuredStoreFunction(), llvm::InlineFunction(), insertCall(), llvm::DIBuilder::insertDbgAssign(), insertLifetimeMarkersSurroundingCall(), llvm::BPFCoreSharedInfo::insertPassThrough(), llvm::GCNTTIImpl::instCombineIntrinsic(), instCombineSVEAllActive(), llvm::SampleProfileProber::instrumentOneFunc(), LLVMGetIntrinsicDeclaration(), lowerExpectAssume(), lowerGuardIntrinsic(), llvm::RISCVTargetLowering::lowerInterleavedStore(), llvm::RISCVTargetLowering::lowerInterleaveIntrinsicToStore(), llvm::IntrinsicLowering::LowerToByteSwap(), makeIntrinsicCall(), llvm::coro::LowererBase::makeSubFnCall(), matchFunnelShift(), processUGT_ADDCST_ADD(), reassociateMinMaxWithConstantInOperand(), llvm::recognizeBSwapOrBitReverseIdiom(), remangleIntrinsicFunction(), llvm::GCNTTIImpl::rewriteIntrinsicWithAddressSpace(), runImpl(), llvm::InstCombinerImpl::SimplifyDemandedUseBits(), toSpvOverloadedIntrinsic(), llvm::updatePublicTypeTestCalls(), llvm::UpgradeARCRuntime(), upgradeArmOrAarch64IntrinsicFunction(), upgradeIntrinsicFunction1(), upgradeNVVMIntrinsicCall(), upgradePTESTIntrinsic(), upgradeX86BF16DPIntrinsic(), upgradeX86BF16Intrinsic(), upgradeX86IntrinsicCall(), upgradeX86IntrinsicFunction(), upgradeX86IntrinsicsWith8BitMask(), upgradeX86MaskedFPCompare(), UseTlsOffset(), useTpOffset(), llvm::InstCombinerImpl::visitAllocSite(), llvm::InstCombinerImpl::visitBitCast(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitFPTrunc(), and llvm::InstCombinerImpl::visitXor().

◆ getType()

FunctionType * llvm::Intrinsic::getType ( LLVMContext Context,
ID  id,
ArrayRef< Type * >  Tys = {} 
)

◆ hasConstrainedFPRoundingModeOperand()

bool llvm::Intrinsic::hasConstrainedFPRoundingModeOperand ( Intrinsic::ID  QID)

Returns true if the intrinsic ID is for one of the "Constrained Floating-Point Intrinsics" that take rounding mode metadata.

Definition at line 774 of file Intrinsics.cpp.

Referenced by llvm::IRBuilderBase::CreateConstrainedFPCall(), llvm::IRBuilderBase::CreateConstrainedFPCast(), and llvm::ConstrainedFPIntrinsic::getNonMetadataArgCount().

◆ isConstrainedFPIntrinsic()

bool llvm::Intrinsic::isConstrainedFPIntrinsic ( ID  QID)

Returns true if the intrinsic ID is for one of the "Constrained Floating-Point Intrinsics".

Definition at line 762 of file Intrinsics.cpp.

Referenced by llvm::ConstrainedFPIntrinsic::classof().

◆ isOverloaded()

bool llvm::Intrinsic::isOverloaded ( ID  id)

◆ isTargetIntrinsic()

bool llvm::Intrinsic::isTargetIntrinsic ( Intrinsic::ID  IID)

isTargetIntrinsic - Returns true if IID is an intrinsic specific to a certain target.

If it is a generic intrinsic false is returned.

Definition at line 617 of file Intrinsics.cpp.

Referenced by llvm::BasicTTIImplBase< T >::getIntrinsicInstrCost(), llvm::isTriviallyScalarizable(), llvm::isVectorIntrinsicWithOverloadTypeAtArg(), llvm::isVectorIntrinsicWithScalarOpAtArg(), and llvm::isVectorIntrinsicWithStructReturnOverloadAtField().

◆ LLVM_DEPRECATED()

llvm::Intrinsic::LLVM_DEPRECATED ( "Use getOrInsertDeclaration instead"  ,
"getOrInsertDeclaration"   
)

◆ lookupIntrinsicID()

Intrinsic::ID llvm::Intrinsic::lookupIntrinsicID ( StringRef  Name)

This does the actual lookup of an intrinsic ID which matches the given function name.

Definition at line 706 of file Intrinsics.cpp.

References assert(), findTargetSubtable(), Idx, isOverloaded(), lookupLLVMIntrinsicByName(), Name, and not_intrinsic.

Referenced by isOldDbgFormatIntrinsic(), and LLVMLookupIntrinsicID().

◆ matchIntrinsicSignature()

Intrinsic::MatchIntrinsicTypesResult llvm::Intrinsic::matchIntrinsicSignature ( FunctionType FTy,
ArrayRef< IITDescriptor > &  Infos,
SmallVectorImpl< Type * > &  ArgTys 
)

Match the specified function type with the type constraints specified by the .td file.

If the given type is an overloaded type it is pushed to the ArgTys vector.

Returns false if the given type matches with the constraints, true otherwise.

Definition at line 1015 of file Intrinsics.cpp.

References Check, llvm::FunctionType::getReturnType(), I, matchIntrinsicType(), MatchIntrinsicTypes_Match, MatchIntrinsicTypes_NoMatchArg, MatchIntrinsicTypes_NoMatchRet, llvm::FunctionType::params(), and llvm::SmallVectorBase< Size_T >::size().

Referenced by getIntrinsicSignature().

◆ matchIntrinsicVarArg()

bool llvm::Intrinsic::matchIntrinsicVarArg ( bool  isVarArg,
ArrayRef< IITDescriptor > &  Infos 
)

Verify if the intrinsic has variable arguments.

This method is intended to be called after all the fixed arguments have been matched first.

This method returns true on error.

Definition at line 1040 of file Intrinsics.cpp.

References D, llvm::ArrayRef< T >::empty(), llvm::ArrayRef< T >::front(), llvm::ArrayRef< T >::size(), and llvm::ArrayRef< T >::slice().

Referenced by getIntrinsicSignature().

◆ remangleIntrinsicFunction()

std::optional< Function * > llvm::Intrinsic::remangleIntrinsicFunction ( Function F)

Variable Documentation

◆ id

ID llvm::Intrinsic::id

Definition at line 102 of file Intrinsics.h.

Referenced by getBaseName().

◆ NoAliasScopeDeclScopeArg

const int llvm::Intrinsic::NoAliasScopeDeclScopeArg = 0
static

◆ Tys

ID ArrayRef<Type *> llvm::Intrinsic::Tys
Initial value:
= {}) {
return getOrInsertDeclaration(M, id, Tys);
}
Function *getDeclarationIfExists(const Module *M, ID id)
A Module instance is used to store all the information related to an LLVM module.
Definition: Module.h:65
Function * getOrInsertDeclaration(Module *M, ID id, ArrayRef< Type * > Tys={})
Look up the Function declaration of the intrinsic id in the Module M.
Definition: Intrinsics.cpp:731

Definition at line 102 of file Intrinsics.h.

Referenced by getDeclarationIfExists(), getName(), getNameNoUnnamedTypes(), getOrInsertDeclaration(), and getType().