LLVM 18.0.0git
|
#include "llvm/IR/Function.h"
#include "SymbolTableListTraitsImpl.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/IR/AbstractCallSite.h"
#include "llvm/IR/Argument.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsAArch64.h"
#include "llvm/IR/IntrinsicsAMDGPU.h"
#include "llvm/IR/IntrinsicsARM.h"
#include "llvm/IR/IntrinsicsBPF.h"
#include "llvm/IR/IntrinsicsDirectX.h"
#include "llvm/IR/IntrinsicsHexagon.h"
#include "llvm/IR/IntrinsicsLoongArch.h"
#include "llvm/IR/IntrinsicsMips.h"
#include "llvm/IR/IntrinsicsNVPTX.h"
#include "llvm/IR/IntrinsicsPowerPC.h"
#include "llvm/IR/IntrinsicsR600.h"
#include "llvm/IR/IntrinsicsRISCV.h"
#include "llvm/IR/IntrinsicsS390.h"
#include "llvm/IR/IntrinsicsVE.h"
#include "llvm/IR/IntrinsicsWebAssembly.h"
#include "llvm/IR/IntrinsicsX86.h"
#include "llvm/IR/IntrinsicsXCore.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/MDBuilder.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/SymbolTableListTraits.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Use.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
#include "llvm/IR/ValueSymbolTable.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/ModRef.h"
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <string>
#include "llvm/IR/ConstrainedOps.def"
#include "llvm/IR/IntrinsicImpl.inc"
Go to the source code of this file.
Macros | |
#define | INSTRUCTION(NAME, NARG, ROUND_MODE, INTRINSIC) case Intrinsic::INTRINSIC: |
#define | GET_INTRINSIC_NAME_TABLE |
#define | GET_INTRINSIC_TARGET_DATA |
Table of per-target intrinsic name tables. | |
#define | GET_INTRINSIC_IITINFO |
#define | GET_INTRINSIC_GENERATOR_GLOBAL |
#define | GET_INTRINSIC_OVERLOAD_TABLE |
#define | GET_INTRINSIC_ATTRIBUTES |
This defines the "Intrinsic::getAttributes(ID id)" method. | |
#define | GET_LLVM_INTRINSIC_FOR_CLANG_BUILTIN |
#define | GET_LLVM_INTRINSIC_FOR_MS_BUILTIN |
Typedefs | |
using | ProfileCount = Function::ProfileCount |
using | DeferredIntrinsicMatchPair = std::pair< Type *, ArrayRef< Intrinsic::IITDescriptor > > |
Enumerations | |
enum | IIT_Info |
IIT_Info - These are enumerators that describe the entries returned by the getIntrinsicInfoTableEntries function. More... | |
Functions | |
static Type * | getMemoryParamAllocType (AttributeSet ParamAttrs) |
For a byval, sret, inalloca, or preallocated parameter, get the in-memory parameter type. | |
static unsigned | computeAddrSpace (unsigned AddrSpace, Module *M) |
static MutableArrayRef< Argument > | makeArgArray (Argument *Args, size_t Count) |
static ArrayRef< const char * > | findTargetSubtable (StringRef Name) |
Find the segment of IntrinsicNameTable for intrinsics with the same target as Name , or the generic table if Name is not target specific. | |
static std::string | getMangledTypeStr (Type *Ty, bool &HasUnnamedType) |
Returns a stable mangling for the type specified for use in the name mangling scheme used by 'any' types in intrinsic signatures. | |
static std::string | getIntrinsicNameImpl (Intrinsic::ID Id, ArrayRef< Type * > Tys, Module *M, FunctionType *FT, bool EarlyModuleCheck) |
static void | DecodeIITType (unsigned &NextElt, ArrayRef< unsigned char > Infos, IIT_Info LastInfo, SmallVectorImpl< Intrinsic::IITDescriptor > &OutputTable) |
static Type * | DecodeFixedType (ArrayRef< Intrinsic::IITDescriptor > &Infos, ArrayRef< Type * > Tys, LLVMContext &Context) |
static bool | matchIntrinsicType (Type *Ty, ArrayRef< Intrinsic::IITDescriptor > &Infos, SmallVectorImpl< Type * > &ArgTys, SmallVectorImpl< DeferredIntrinsicMatchPair > &DeferredChecks, bool IsDeferredCheck) |
Variables | |
static cl::opt< unsigned > | NonGlobalValueMaxNameSize ("non-global-value-max-name-size", cl::Hidden, cl::init(1024), cl::desc("Maximum size for the name of non-global values.")) |
static const char *const | IntrinsicNameTable [] |
Table of string intrinsic names indexed by enum value. | |
#define GET_INTRINSIC_ATTRIBUTES |
This defines the "Intrinsic::getAttributes(ID id)" method.
Definition at line 1440 of file Function.cpp.
#define GET_INTRINSIC_GENERATOR_GLOBAL |
Definition at line 1284 of file Function.cpp.
#define GET_INTRINSIC_IITINFO |
Definition at line 1059 of file Function.cpp.
#define GET_INTRINSIC_NAME_TABLE |
#define GET_INTRINSIC_OVERLOAD_TABLE |
#define GET_INTRINSIC_TARGET_DATA |
Table of per-target intrinsic name tables.
Definition at line 862 of file Function.cpp.
#define GET_LLVM_INTRINSIC_FOR_CLANG_BUILTIN |
Definition at line 1455 of file Function.cpp.
#define GET_LLVM_INTRINSIC_FOR_MS_BUILTIN |
Definition at line 1460 of file Function.cpp.
#define INSTRUCTION | ( | NAME, | |
NARG, | |||
ROUND_MODE, | |||
INTRINSIC | |||
) | case Intrinsic::INTRINSIC: |
using DeferredIntrinsicMatchPair = std::pair<Type *, ArrayRef<Intrinsic::IITDescriptor> > |
Definition at line 1464 of file Function.cpp.
using ProfileCount = Function::ProfileCount |
Definition at line 74 of file Function.cpp.
enum IIT_Info |
IIT_Info - These are enumerators that describe the entries returned by the getIntrinsicInfoTableEntries function.
Defined in Intrinsics.td.
Definition at line 1058 of file Function.cpp.
Definition at line 413 of file Function.cpp.
|
static |
Definition at line 1321 of file Function.cpp.
References assert(), Context, D, DecodeFixedType(), llvm::ArrayRef< T >::front(), llvm::IntegerType::get(), llvm::StructType::get(), llvm::TargetExtType::get(), llvm::VectorType::get(), llvm::PointerType::get(), llvm::Type::getBFloatTy(), llvm::IntegerType::getBitWidth(), getBitWidth(), llvm::Type::getDoubleTy(), llvm::VectorType::getExtendedElementVectorType(), llvm::Type::getFloatTy(), llvm::Type::getFP128Ty(), llvm::VectorType::getHalfElementsVectorType(), llvm::Type::getHalfTy(), llvm::VectorType::getInteger(), llvm::Type::getMetadataTy(), llvm::Type::getPPC_FP128Ty(), llvm::VectorType::getSubdividedVectorType(), llvm::Type::getTokenTy(), llvm::VectorType::getTruncatedElementVectorType(), llvm::Type::getVoidTy(), llvm::Type::getX86_AMXTy(), llvm::Type::getX86_MMXTy(), llvm_unreachable, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::ArrayRef< T >::slice().
Referenced by DecodeFixedType(), and llvm::Intrinsic::getType().
|
static |
Definition at line 1064 of file Function.cpp.
References DecodeIITType(), Info, llvm_unreachable, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::ArrayRef< T >::size().
Referenced by DecodeIITType(), and llvm::Intrinsic::getIntrinsicInfoTableEntries().
Find the segment of IntrinsicNameTable
for intrinsics with the same target as Name
, or the generic table if Name
is not target specific.
Returns the relevant slice of IntrinsicNameTable
Definition at line 878 of file Function.cpp.
References assert(), llvm::ArrayRef< T >::end(), IntrinsicNameTable, Name, and llvm::partition_point().
Referenced by llvm::Function::lookupIntrinsicID().
|
static |
Definition at line 1017 of file Function.cpp.
References llvm::any_of(), assert(), llvm::ArrayRef< T >::empty(), llvm::Intrinsic::getBaseName(), getMangledTypeStr(), llvm::Intrinsic::getType(), and llvm::Intrinsic::isOverloaded().
Referenced by llvm::Intrinsic::getName(), and llvm::Intrinsic::getNameNoUnnamedTypes().
Returns a stable mangling for the type specified for use in the name mangling scheme used by 'any' types in intrinsic signatures.
The mangling of named types is simply their name. Manglings for unnamed types consist of a prefix ('p' for pointers, 'a' for arrays, 'f_' for functions) combined with the mangling of their component types. A vararg function type will have a suffix of 'vararg'. Since function types can contain other function types, we close a function type mangling with suffix 'f' which can't be confused with it's prefix. This ensures we don't have collisions between two unrelated function types. Otherwise, you might parse ffXX as f(fXX) or f(fX)X. (X is a placeholder for any other type.) The HasUnnamedType boolean is set if an unnamed type was encountered, indicating that extra care must be taken to ensure a unique name.
Definition at line 939 of file Function.cpp.
References llvm::Type::BFloatTyID, llvm::Type::DoubleTyID, llvm::Type::FloatTyID, llvm::Type::FP128TyID, getBitWidth(), getMangledTypeStr(), llvm::Type::getTypeID(), llvm::Type::HalfTyID, llvm::Type::IntegerTyID, llvm_unreachable, llvm::Type::MetadataTyID, llvm::Type::PPC_FP128TyID, llvm::Type::VoidTyID, llvm::Type::X86_AMXTyID, llvm::Type::X86_FP80TyID, and llvm::Type::X86_MMXTyID.
Referenced by getIntrinsicNameImpl(), and getMangledTypeStr().
|
static |
For a byval, sret, inalloca, or preallocated parameter, get the in-memory parameter type.
Definition at line 182 of file Function.cpp.
References llvm::AttributeSet::getByRefType(), llvm::AttributeSet::getByValType(), llvm::AttributeSet::getInAllocaType(), llvm::AttributeSet::getPreallocatedType(), and llvm::AttributeSet::getStructRetType().
Referenced by llvm::Argument::getPassPointeeByValueCopySize(), and llvm::Argument::getPointeeInMemoryValueType().
|
static |
Definition at line 480 of file Function.cpp.
Referenced by llvm::Function::stealArgumentListFrom().
|
static |
Definition at line 1467 of file Function.cpp.
References assert(), D, llvm::SmallVectorImpl< T >::emplace_back(), llvm::ArrayRef< T >::empty(), llvm::ArrayRef< T >::front(), llvm::IntegerType::get(), llvm::VectorType::getExtendedElementVectorType(), llvm::VectorType::getHalfElementsVectorType(), llvm::VectorType::getInteger(), llvm::VectorType::getSubdividedVectorType(), llvm::VectorType::getTruncatedElementVectorType(), llvm::Type::isBFloatTy(), llvm::Type::isDoubleTy(), llvm::Type::isFloatTy(), llvm::Type::isFP128Ty(), llvm::Type::isFPOrFPVectorTy(), llvm::Type::isHalfTy(), llvm::Type::isIntegerTy(), llvm::Type::isIntOrIntVectorTy(), llvm::Type::isMetadataTy(), llvm::Type::isPPC_FP128Ty(), llvm::Type::isTokenTy(), llvm::Type::isVoidTy(), llvm::Type::isX86_AMXTy(), llvm::Type::isX86_MMXTy(), llvm_unreachable, matchIntrinsicType(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorBase< Size_T >::size(), llvm::ArrayRef< T >::slice(), and true.
Referenced by llvm::Intrinsic::matchIntrinsicSignature(), and matchIntrinsicType().
Table of string intrinsic names indexed by enum value.
Definition at line 854 of file Function.cpp.
Referenced by findTargetSubtable(), llvm::Intrinsic::getBaseName(), and llvm::Function::lookupIntrinsicID().
|
static |