Go to the documentation of this file.
60 return isIntegerTy() && cast<IntegerType>(
this)->getBitWidth() == Bitwidth;
74 if (isa<VectorType>(
this) && isa<VectorType>(Ty))
78 if (((isa<FixedVectorType>(
this)) && Ty->
isX86_MMXTy()) &&
86 if (((isa<FixedVectorType>(
this)) && Ty->
isX86_AMXTy()) &&
97 if (
auto *PTy = dyn_cast<PointerType>(
this)) {
98 if (
auto *OtherPTy = dyn_cast<PointerType>(Ty))
99 return PTy->getAddressSpace() == OtherPTy->getAddressSpace();
106 if (
auto *ATy = dyn_cast<ArrayType>(
this)) {
107 unsigned NumElements = ATy->getNumElements();
108 return NumElements == 0 || ATy->getElementType()->isEmptyTy();
111 if (
auto *STy = dyn_cast<StructType>(
this)) {
112 unsigned NumElements = STy->getNumElements();
113 for (
unsigned i = 0;
i < NumElements; ++
i)
114 if (!STy->getElementType(
i)->isEmptyTy())
137 const VectorType *VTy = cast<VectorType>(
this);
140 assert(!ETS.
isScalable() &&
"Vector type should have fixed-width elements");
141 return {ETS.
getFixedSize() * EC.getKnownMinValue(), EC.isScalable()};
153 if (
auto *VTy = dyn_cast<VectorType>(
this))
154 return VTy->getElementType()->getFPMantissaWidth();
167 if (
auto *ATy = dyn_cast<ArrayType>(
this))
168 return ATy->getElementType()->isSized(Visited);
170 if (
auto *VTy = dyn_cast<VectorType>(
this))
171 return VTy->getElementType()->isSized(Visited);
173 return cast<StructType>(
this)->isSized(Visited);
303 :
Type(Result->getContext(), FunctionTyID) {
304 Type **SubTys =
reinterpret_cast<Type**
>(
this+1);
305 assert(isValidReturnType(Result) &&
"invalid return type for function");
310 for (
unsigned i = 0,
e = Params.
size();
i !=
e; ++
i) {
311 assert(isValidArgumentType(Params[
i]) &&
312 "Not a valid type for function argument!");
313 SubTys[
i+1] = Params[
i];
332 if (Insertion.second) {
339 *Insertion.first = FT;
342 FT = *Insertion.first;
378 if (Insertion.second) {
382 ST->setSubclassData(SCDB_IsLiteral);
384 *Insertion.first =
ST;
387 ST = *Insertion.first;
395 if (isa<ScalableVectorType>(Ty))
397 if (
auto *STy = dyn_cast<StructType>(Ty))
398 if (STy->containsScalableVectorType())
414 if (Elements.
empty()) {
449 if (!IterBool.second) {
451 TempStr.push_back(
'.');
460 std::make_pair(TmpStream.
str(),
this));
461 }
while (!IterBool.second);
502 "This method may not be invoked with an empty list");
508 "This method may not be invoked with an empty list");
527 if (isa<ScalableVectorType>(Ty))
529 if (!Ty->isSized(Visited))
555 if (
this ==
Other)
return true;
564 unsigned Idx = (unsigned)cast<Constant>(V)->getUniqueInteger().getZExtValue();
574 if (isa<ScalableVectorType>(V->
getType()))
576 const Constant *
C = dyn_cast<Constant>(V);
578 C =
C->getSplatValue();
584 return C.pImpl->NamedStructTypes.lookup(
Name);
591 ArrayType::ArrayType(
Type *ElType, uint64_t NumEl)
592 :
Type(ElType->getContext(), ArrayTyID), ContainedType(ElType),
603 pImpl->
ArrayTypes[std::make_pair(ElementType, NumElements)];
614 !isa<ScalableVectorType>(ElemTy);
622 :
Type(ElType->getContext(), TID), ContainedType(ElType),
623 ElementQuantity(
EQ) {
645 assert(NumElts > 0 &&
"#Elements of a VectorType must be greater than 0");
647 "be an integer, floating point, or "
658 return cast<FixedVectorType>(Entry);
666 unsigned MinNumElts) {
667 assert(MinNumElts > 0 &&
"#Elements of a VectorType must be greater than 0");
669 "be an integer, floating point, or "
680 return cast<ScalableVectorType>(Entry);
688 assert(EltTy &&
"Can't get a pointer to <null> type!");
702 PointerType::PointerType(
Type *
E,
unsigned AddrSpace)
703 :
Type(
E->getContext(), PointerTyID), PointeeTy(
E) {
LLVMContextImpl *const pImpl
@ FloatTyID
32-bit floating point type
Class to represent scalable SIMD vectors.
@ DoubleTyID
64-bit floating point type
static bool isValidElementType(Type *ElemTy)
Return true if the specified type is valid as a element type.
static PointerType * getInt16PtrTy(LLVMContext &C, unsigned AS=0)
@ MIN_INT_BITS
Minimum number of bits that can be specified.
static IntegerType * getInt1Ty(LLVMContext &C)
StringMapEntry - This is used to represent one value that is inserted into a StringMap.
StringRef getName() const
Return the name for this struct type if it has an identity.
static StructType * get(LLVMContext &Context, ArrayRef< Type * > Elements, bool isPacked=false)
This static method is the primary way to create a literal StructType.
static PointerType * getInt8PtrTy(LLVMContext &C, unsigned AS=0)
bool isX86_MMXTy() const
Return true if this is X86 MMX.
static Type * getFP128Ty(LLVMContext &C)
bool isPointerTy() const
True if this is an instance of PointerType.
ScalarTy getFixedSize() const
ArrayRef< T > copy(Allocator &A)
@ VoidTyID
type with no size
void remove(MapEntryTy *KeyValue)
remove - Remove the specified key/value pair from the map, but do not erase it.
static PointerType * get(Type *ElementType, unsigned AddressSpace)
This constructs a pointer to an object of the specified type in a numbered address space.
void setBody(ArrayRef< Type * > Elements, bool isPacked=false)
Specify a body for an opaque identified type.
Type * getScalarType() const
If this is a vector type, return the element type, otherwise return 'this'.
@ X86_AMXTyID
AMX vectors (8192 bits, X86 specific)
static FunctionType * get(Type *Result, ArrayRef< Type * > Params, bool isVarArg)
This static method is the primary way of constructing a FunctionType.
unsigned getSubclassData() const
TypeID getTypeID() const
Return the type id for the type.
The instances of the Type class are immutable: once they are created, they are never changed.
static StructType * getTypeByName(LLVMContext &C, StringRef Name)
Return the type with the specified name, or null if there is none by that name.
static Type * getTokenTy(LLVMContext &C)
static Type * getPrimitiveType(LLVMContext &C, TypeID IDNumber)
Return a type based on an identifier.
Type * getElementType() const
static unsigned getBitWidth(Type *Ty, const DataLayout &DL)
Returns the bitwidth of the given scalar or pointer type.
Class to represent array types.
static StructType * create(LLVMContext &Context, StringRef Name)
This creates an identified struct.
ScalableVectorType(Type *ElTy, unsigned MinNumElts)
bool isFloatingPointTy() const
Return true if this is one of the six floating-point types.
Class to represent fixed width SIMD vectors.
static PointerType * getInt32PtrTy(LLVMContext &C, unsigned AS=0)
bool isMetadataTy() const
Return true if this is 'metadata'.
static IntegerType * getInt8Ty(LLVMContext &C)
StructTypeSet AnonStructTypes
bool isScalable() const
Returns whether the size is scaled by a runtime quantity (vscale).
void setName(StringRef Name)
Change the name of this type to the specified name, or to a name with a suffix if there is a collisio...
static IntegerType * getInt32Ty(LLVMContext &C)
bool empty() const
empty - Check if the array is empty.
static PointerType * getBFloatPtrTy(LLVMContext &C, unsigned AS=0)
APInt getMask() const
For example, this is 0xFF for an 8 bit integer, 0xFFFF for i16, etc.
This is the shared class of boolean and integer constants.
static Type * getMetadataTy(LLVMContext &C)
static PointerType * getFP128PtrTy(LLVMContext &C, unsigned AS=0)
static Type * getX86_AMXTy(LLVMContext &C)
DenseMap< std::pair< Type *, ElementCount >, VectorType * > VectorTypes
StringMap< StructType * > NamedStructTypes
LLVM_ATTRIBUTE_RETURNS_NONNULL LLVM_ATTRIBUTE_RETURNS_NOALIAS void * Allocate(size_t Size, Align Alignment)
Allocate space at the specified alignment.
static Type * getPPC_FP128Ty(LLVMContext &C)
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
FixedVectorType(Type *ElTy, unsigned NumElts)
static Type * getDoubleTy(LLVMContext &C)
(vector float) vec_cmpeq(*A, *B) C
bool isSized(SmallPtrSetImpl< Type * > *Visited=nullptr) const
isSized - Return true if this is a sized type.
static PointerType * getPPC_FP128PtrTy(LLVMContext &C, unsigned AS=0)
static bool isValidReturnType(Type *RetTy)
Return true if the specified type is valid as a return type.
bool isVectorTy() const
True if this is an instance of VectorType.
IntegerType(LLVMContext &C, unsigned NumBits)
ElementCount getElementCount() const
Return an ElementCount instance to represent the (possibly scalable) number of elements in the vector...
static TypeSize Fixed(ScalarTy MinVal)
Class to represent integer types.
bool isTokenTy() const
Return true if this is 'token'.
unsigned getScalarSizeInBits() const LLVM_READONLY
If this is a vector type, return the getPrimitiveSizeInBits value for the element type.
static FixedVectorType * get(Type *ElementType, unsigned NumElts)
static PointerType * getInt1PtrTy(LLVMContext &C, unsigned AS=0)
bool isFunctionTy() const
True if this is an instance of FunctionType.
@ BFloatTyID
16-bit floating point type (7-bit significand)
static ElementCount getFixed(ScalarTy MinVal)
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
bool isIntegerTy() const
True if this is an instance of IntegerType.
static bool isValidElementType(Type *ElemTy)
Return true if the specified type is valid as a element type.
static PointerType * getIntNPtrTy(LLVMContext &C, unsigned N, unsigned AS=0)
Base class of all SIMD vector types.
int getFPMantissaWidth() const
Return the width of the mantissa of this type.
This is an important base class in LLVM.
std::pair< iterator, bool > insert_as(const ValueT &V, const LookupKeyT &LookupKey)
Alternative version of insert that uses a different (and possibly less expensive) key type.
@ X86_MMXTyID
MMX vectors (64 bits, X86 specific)
static PointerType * getHalfPtrTy(LLVMContext &C, unsigned AS=0)
bool isOpaque() const
Return true if this is a type with an identity that has no body specified yet.
@ MAX_INT_BITS
Maximum number of bits that can be specified.
This is an important class for using LLVM in a threaded context.
unsigned NamedStructTypesUniqueID
static PointerType * getInt64PtrTy(LLVMContext &C, unsigned AS=0)
DenseMap< std::pair< Type *, unsigned >, PointerType * > ASPointerTypes
static bool isValidArgumentType(Type *ArgTy)
Return true if the specified type is valid as an argument type.
Class to represent pointers.
static PointerType * getX86_MMXPtrTy(LLVMContext &C, unsigned AS=0)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
DenseMap< std::pair< Type *, uint64_t >, ArrayType * > ArrayTypes
bool isVoidTy() const
Return true if this is 'void'.
AllocatorTy & getAllocator()
static ArrayType * get(Type *ElementType, uint64_t NumElements)
This static method is the primary way to construct an ArrayType.
static Type * getX86_FP80Ty(LLVMContext &C)
static PointerType * getDoublePtrTy(LLVMContext &C, unsigned AS=0)
Class for arbitrary precision integers.
@ FP128TyID
128-bit floating point type (112-bit significand)
void setSubclassData(unsigned val)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
static APInt getAllOnesValue(unsigned numBits)
Get the all-ones value.
Class to represent struct types.
@ PPC_FP128TyID
128-bit floating point type (two 64-bits, PowerPC)
StringRef - Represent a constant reference to a string, i.e.
StringRef str() const
Return a StringRef for the vector contents.
Type * getType() const
All values are typed, get the type of this value.
bool indexValid(const Value *V) const
bool isLabelTy() const
Return true if this is 'label'.
VectorType(Type *ElType, unsigned EQ, Type::TypeID TID)
Type * getTypeAtIndex(const Value *V) const
Given an index value into the type, return the type of the element.
LLVMContext & getContext() const
Return the LLVMContext in which this type was uniqued.
static IntegerType * getInt128Ty(LLVMContext &C)
static PointerType * getFloatPtrTy(LLVMContext &C, unsigned AS=0)
unsigned getNumElements() const
Random access to the elements.
@ IntegerTyID
Arbitrary bit width integers.
Symbol info for RuntimeDyld.
unsigned NumContainedTys
Keeps track of how many Type*'s there are in the ContainedTys list.
static IntegerType * getInt64Ty(LLVMContext &C)
static IntegerType * getIntNTy(LLVMContext &C, unsigned N)
static Type * getHalfTy(LLVMContext &C)
ArrayRef< Type * > elements() const
@ FixedVectorTyID
Fixed width SIMD vector type.
bool isEmptyTy() const
Return true if this type is empty, that is, it has no elements or all of its elements are empty.
bool isIntOrIntVectorTy() const
Return true if this is an integer type or a vector of integer types.
static ElementCount getScalable(ScalarTy MinVal)
PointerType * getPointerTo(unsigned AddrSpace=0) const
Return a pointer to the current type.
static Type * getBFloatTy(LLVMContext &C)
Type *const * ContainedTys
A pointer to the array of Types contained by this Type.
static PointerType * getX86_FP80PtrTy(LLVMContext &C, unsigned AS=0)
static Type * getVoidTy(LLVMContext &C)
static bool isValidElementType(Type *ElemTy)
Return true if the specified type is valid as a element type.
static bool isLoadableOrStorableType(Type *ElemTy)
Return true if we can load or store from a pointer to this type.
bool containsScalableVectorType() const
Returns true if this struct contains a scalable vector.
size_t size() const
size - Get the array size.
unsigned getBitWidth() const
Get the number of bits in this IntegerType.
A raw_ostream that writes to an SmallVector or SmallString.
Type * getElementType(unsigned N) const
static IntegerType * getInt16Ty(LLVMContext &C)
@ ScalableVectorTyID
Scalable SIMD vector type.
A templated base class for SmallPtrSet which provides the typesafe interface that is common across al...
static bool isValidElementType(Type *ElemTy)
Return true if the specified type is valid as a element type.
DenseMap< Type *, PointerType * > PointerTypes
static IntegerType * get(LLVMContext &C, unsigned NumBits)
This static method is the primary way of constructing an IntegerType.
static ScalableVectorType * get(Type *ElementType, unsigned MinNumElts)
static Type * getLabelTy(LLVMContext &C)
TypeID
Definitions of all of the base types for the Type system.
static Type * getX86_MMXTy(LLVMContext &C)
bool isLiteral() const
Return true if this type is uniqued by structural equivalence, false if it is a struct definition.
bool canLosslesslyBitCastTo(Type *Ty) const
Return true if this type could be converted with a lossless BitCast to type 'Ty'.
bool isLayoutIdentical(StructType *Other) const
Return true if this is layout identical to the specified struct.
LLVM Value Representation.
static VectorType * get(Type *ElementType, ElementCount EC)
This static method is the primary way to construct an VectorType.
static PointerType * getX86_AMXPtrTy(LLVMContext &C, unsigned AS=0)
@ HalfTyID
16-bit floating point type
@ X86_FP80TyID
80-bit floating point type (X87)
static Type * getFloatTy(LLVMContext &C)
bool isX86_AMXTy() const
Return true if this is X86 AMX.
FunctionTypeSet FunctionTypes
bool isFirstClassType() const
Return true if the type is "first class", meaning it is a valid type for a Value.
Optional< std::vector< StOtherPiece > > Other
Class to represent function types.
TypeSize getPrimitiveSizeInBits() const LLVM_READONLY
Return the basic size of this type if it is a primitive type.
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.