LLVM: llvm::Intrinsic Namespace Reference (original) (raw)

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...
Functions
LLVM_ABI StringRef getName (ID id)
Return the LLVM name for an intrinsic, such as "llvm.ppc.altivec.lvx".
LLVM_ABI StringRef getBaseName (ID id)
Return the LLVM name for an intrinsic, without encoded types for overloading, such as "llvm.ssa.copy".
LLVM_ABI 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".
LLVM_ABI std::string getNameNoUnnamedTypes (ID Id, ArrayRef< Type * > Tys)
Return the LLVM name for an intrinsic.
LLVM_ABI FunctionType * getType (LLVMContext &Context, ID id, ArrayRef< Type * > Tys={})
Return the function type for an intrinsic.
LLVM_ABI bool isOverloaded (ID id)
Returns true if the intrinsic can be overloaded.
LLVM_ABI bool hasPrettyPrintedArgs (ID id)
Returns true if the intrinsic has pretty printed immediate arguments.
LLVM_ABI bool isTargetIntrinsic (ID IID)
isTargetIntrinsic - Returns true if IID is an intrinsic specific to a certain target.
LLVM_ABI ID lookupIntrinsicID (StringRef Name)
This does the actual lookup of an intrinsic ID which matches the given function name.
LLVM_ABI AttributeList getAttributes (LLVMContext &C, ID id, FunctionType *FT)
Return the attributes for an intrinsic.
LLVM_ABI AttributeSet getFnAttributes (LLVMContext &C, ID id)
Return the function attributes for an intrinsic.
LLVM_ABI Function * getOrInsertDeclaration (Module *M, ID id, ArrayRef< Type * > Tys={})
Look up the Function declaration of the intrinsic id in the Module M.
LLVM_ABI Function * getOrInsertDeclaration (Module *M, ID IID, Type *RetTy, ArrayRef< Type * > ArgTys)
Look up the Function declaration of the intrinsic IID in the Module M.
LLVM_ABI Function * getDeclarationIfExists (const Module *M, ID id)
Look up the Function declaration of the intrinsic id in the Module M and return it if it exists.
LLVM_ABI Function * getDeclarationIfExists (Module *M, ID id, ArrayRef< Type * > Tys, FunctionType *FT=nullptr)
This version supports overloaded intrinsics.
LLVM_ABI ID getIntrinsicForClangBuiltin (StringRef TargetPrefix, StringRef BuiltinName)
Map a Clang builtin name to an intrinsic ID.
LLVM_ABI ID getIntrinsicForMSBuiltin (StringRef TargetPrefix, StringRef BuiltinName)
Map a MS builtin name to an intrinsic ID.
LLVM_ABI bool isConstrainedFPIntrinsic (ID QID)
Returns true if the intrinsic ID is for one of the "Constrained Floating-Point Intrinsics".
LLVM_ABI bool hasConstrainedFPRoundingModeOperand (ID QID)
Returns true if the intrinsic ID is for one of the "Constrained Floating-Point Intrinsics" that take rounding mode metadata.
LLVM_ABI void getIntrinsicInfoTableEntries (ID id, SmallVectorImpl< IITDescriptor > &T)
Return the IIT table descriptor for the specified intrinsic into an array of IITDescriptors.
LLVM_ABI MatchIntrinsicTypesResult matchIntrinsicSignature (FunctionType *FTy, ArrayRef< IITDescriptor > &Infos, SmallVectorImpl< Type * > &ArgTys)
Match the specified function type with the type constraints specified by the .td file.
LLVM_ABI bool matchIntrinsicVarArg (bool isVarArg, ArrayRef< IITDescriptor > &Infos)
Verify if the intrinsic has variable arguments.
LLVM_ABI 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.
LLVM_ABI bool getIntrinsicSignature (Function *F, SmallVectorImpl< Type * > &ArgTys)
Same as previous, but accepts a Function instead of ID and FunctionType.
LLVM_ABI std::optional< Function * > remangleIntrinsicFunction (Function *F)
LLVM_ABI Intrinsic::ID getInterleaveIntrinsicID (unsigned Factor)
Returns the corresponding llvm.vector.interleaveN intrinsic for factor N.
LLVM_ABI Intrinsic::ID getDeinterleaveIntrinsicID (unsigned Factor)
Returns the corresponding llvm.vector.deinterleaveN intrinsic for factor N.
LLVM_ABI void printImmArg (ID IID, unsigned ArgIdx, raw_ostream &OS, const Constant *ImmArgVal)
Print the argument info for the arguments with ArgInfo.

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

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

ID

IndependentIntrinsics

MatchIntrinsicTypesResult

Enumerator
MatchIntrinsicTypes_Match
MatchIntrinsicTypes_NoMatchRet
MatchIntrinsicTypes_NoMatchArg

Definition at line 258 of file Intrinsics.h.

getAttributes()

getBaseName()

getDeclarationIfExists() [1/2]

Look up the Function declaration of the intrinsic id in the Module M and return it if it exists.

Otherwise, return nullptr. This version supports non-overloaded intrinsics.

Definition at line 792 of file Intrinsics.cpp.

References llvm::Function::getFunction(), and getName().

Referenced by collectUnswitchCandidates(), computeVirtualCallSiteTypeInfoMap(), containsProfilingIntrinsics(), llvm::coro::declaresIntrinsics(), explicifyGuards(), llvm::ScalarEvolution::isBasicBlockEntryGuardedByCond(), lowerGuardIntrinsic(), lowerWidenableCondition(), llvm::objcarc::ModuleHasARC(), llvm::FatLtoCleanup::run(), llvm::GuardWideningPass::run(), llvm::JumpThreadingPass::runImpl(), llvm::ScalarEvolution::ScalarEvolution(), splitGlobals(), stripDebugDeclareImpl(), and llvm::updatePublicTypeTestCalls().

getDeclarationIfExists() [2/2]

getDeinterleaveIntrinsicID()

Intrinsic::ID llvm::Intrinsic::getDeinterleaveIntrinsicID ( unsigned Factor )

getFnAttributes()

getInterleaveIntrinsicID()

Intrinsic::ID llvm::Intrinsic::getInterleaveIntrinsicID ( unsigned Factor )

getIntrinsicForClangBuiltin()

Map a Clang builtin name to an intrinsic ID.

References LLVM_ABI.

getIntrinsicForMSBuiltin()

Map a MS builtin name to an intrinsic ID.

References LLVM_ABI.

getIntrinsicInfoTableEntries()

getIntrinsicSignature() [1/2]

getIntrinsicSignature() [2/2]

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 1110 of file Intrinsics.cpp.

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

Referenced by getIntrinsicSignature(), modifyIntrinsicCall(), optimizeSection(), remangleIntrinsicFunction(), simplifyAMDGCNImageIntrinsic(), simplifyAMDGCNMemoryIntrinsicDemanded(), and llvm::UpgradeIntrinsicFunction().

getName() [1/2]

getName() [2/2]

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 182 of file Intrinsics.cpp.

References assert(), and getIntrinsicNameImpl().

getNameNoUnnamedTypes()

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

getOrInsertDeclaration() [1/2]

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 755 of file Intrinsics.cpp.

References getOrInsertIntrinsicDeclarationImpl(), and getType().

Referenced by addAssumeNonNull(), convertNvvmIntrinsicToLlvm(), convertToRelLookupTable(), llvm::ConvergenceControlInst::CreateAnchor(), llvm::IRBuilderBase::CreateAssumption(), llvm::IRBuilderBase::CreateBinaryIntrinsic(), llvm::MatrixBuilder::CreateColumnMajorLoad(), llvm::MatrixBuilder::CreateColumnMajorStore(), createCoroSave(), llvm::DbgLabelRecord::createDebugIntrinsic(), llvm::DbgVariableRecord::createDebugIntrinsic(), llvm::ConvergenceControlInst::CreateEntry(), CreateGCRelocates(), CreateGCStatepointCallCommon(), CreateGCStatepointInvokeCommon(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::IRBuilderBase::CreateIntrinsic(), llvm::IRBuilderBase::CreateLaunderInvariantGroup(), llvm::ConvergenceControlInst::CreateLoop(), 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(), EvaluateInDifferentTypeImpl(), llvm::VPWidenIntrinsicRecipe::execute(), expandIToFP(), expandProtectedFieldPtr(), explicifyGuards(), factorizeMinMaxTree(), llvm::AMDGPULibCalls::fold(), foldBitwiseLogicWithIntrinsics(), foldCtpop(), foldCttzCtlz(), foldShuffleOfUnaryOps(), foldSubOfMinMax(), foldToUnsignedSaturatedAdd(), llvm::InstCombinerImpl::foldVectorBinop(), foldVectorCmp(), generateUnsignedDivisionCode(), llvm::memtag::getAndroidSlotPtr(), getOrInsertDeclaration(), llvm::VPIntrinsic::getOrInsertDeclarationForParams(), getStructuredLoadFunction(), getStructuredStoreFunction(), llvm::GCNTTIImpl::hoistLaneIntrinsicThroughOperand(), llvm::InlineFunctionImpl(), insertCall(), insertLifetimeMarkersSurroundingCall(), llvm::BPFCoreSharedInfo::insertPassThrough(), llvm::GCNTTIImpl::instCombineIntrinsic(), llvm::SampleProfileProber::instrumentOneFunc(), LLVMGetIntrinsicDeclaration(), llvm::RISCVTargetLowering::lowerDeinterleaveIntrinsicToLoad(), lowerExpectAssume(), lowerGuardIntrinsic(), llvm::RISCVTargetLowering::lowerInterleavedStore(), llvm::RISCVTargetLowering::lowerInterleaveIntrinsicToStore(), llvm::IntrinsicLowering::LowerToByteSwap(), llvm::lowerUnaryVectorIntrinsicAsLoop(), makeIntrinsicCall(), llvm::coro::LowererBase::makeSubFnCall(), matchFunnelShift(), optimizeModularFormat(), processUGT_ADDCST_ADD(), reassociateMinMaxWithConstantInOperand(), llvm::recognizeBSwapOrBitReverseIdiom(), remangleIntrinsicFunction(), llvm::GCNTTIImpl::rewriteIntrinsicWithAddressSpace(), runImpl(), simplifyAMDGCNImageIntrinsic(), llvm::GCNTTIImpl::simplifyAMDGCNLaneIntrinsicDemanded(), llvm::InstCombinerImpl::SimplifyDemandedUseBits(), simplifySVEIntrinsic(), llvm::updatePublicTypeTestCalls(), llvm::UpgradeARCRuntime(), upgradeArmOrAarch64IntrinsicFunction(), upgradeIntrinsicFunction1(), upgradeNVVMIntrinsicCall(), upgradePTESTIntrinsic(), upgradeX86BF16DPIntrinsic(), upgradeX86BF16Intrinsic(), upgradeX86IntrinsicCall(), upgradeX86IntrinsicFunction(), upgradeX86IntrinsicsWith8BitMask(), upgradeX86MaskedFPCompare(), upgradeX86MultiplyAddBytes(), UseTlsOffset(), useTpOffset(), llvm::InstCombinerImpl::visitAllocSite(), llvm::InstCombinerImpl::visitBitCast(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitFPTrunc(), and llvm::InstCombinerImpl::visitXor().

getOrInsertDeclaration() [2/2]

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

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

This overload automatically resolves overloaded intrinsics based on the provided return type and argument types. For non-overloaded intrinsics, the return type and argument types are ignored.

Parameters

M - The module to get or insert the intrinsic declaration.
IID - The intrinsic ID.
RetTy - The return type of the intrinsic.
ArgTys - The argument types of the intrinsic.

Definition at line 763 of file Intrinsics.cpp.

References assert(), llvm::FunctionType::get(), getIntrinsicInfoTableEntries(), getOrInsertDeclaration(), getOrInsertIntrinsicDeclarationImpl(), isOverloaded(), matchIntrinsicSignature(), MatchIntrinsicTypes_Match, and matchIntrinsicVarArg().

getType()

Return the function type for an intrinsic.

Definition at line 577 of file Intrinsics.cpp.

References llvm::SmallVectorTemplateCommon< T, typename >::back(), DecodeFixedType(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::FunctionType::get(), getIntrinsicInfoTableEntries(), llvm::SmallVectorTemplateBase< T, bool >::pop_back(), and llvm::SmallVectorTemplateBase< T, bool >::push_back().

Referenced by llvm::SITargetLowering::computeKnownAlignForTargetInstr(), getIntrinsicNameImpl(), and LLVMIntrinsicGetType().

hasConstrainedFPRoundingModeOperand()

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

hasPrettyPrintedArgs()

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

Returns true if the intrinsic has pretty printed immediate arguments.

Definition at line 605 of file Intrinsics.cpp.

isConstrainedFPIntrinsic()

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

isOverloaded()

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

isTargetIntrinsic()

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

lookupIntrinsicID()

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

matchIntrinsicSignature()

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 1066 of file Intrinsics.cpp.

References llvm::FunctionType::getReturnType(), I, matchIntrinsicType(), MatchIntrinsicTypes_Match, MatchIntrinsicTypes_NoMatchArg, MatchIntrinsicTypes_NoMatchRet, llvm::FunctionType::params(), and llvm::SmallVectorTemplateCommon< T, typename >::size().

Referenced by getIntrinsicSignature(), and getOrInsertDeclaration().

matchIntrinsicVarArg()

printImmArg()

Print the argument info for the arguments with ArgInfo.

References LLVM_ABI.

remangleIntrinsicFunction()

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

NoAliasScopeDeclScopeArg

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