diff options
Diffstat (limited to 'contrib/llvm-project/llvm/include/llvm/IR/Type.h')
-rw-r--r-- | contrib/llvm-project/llvm/include/llvm/IR/Type.h | 83 |
1 files changed, 37 insertions, 46 deletions
diff --git a/contrib/llvm-project/llvm/include/llvm/IR/Type.h b/contrib/llvm-project/llvm/include/llvm/IR/Type.h index d0961dac833d..1f546884b924 100644 --- a/contrib/llvm-project/llvm/include/llvm/IR/Type.h +++ b/contrib/llvm-project/llvm/include/llvm/IR/Type.h @@ -53,27 +53,28 @@ public: /// Also update LLVMTypeKind and LLVMGetTypeKind () in the C binding. /// enum TypeID { - // PrimitiveTypes - make sure LastPrimitiveTyID stays up to date. - VoidTyID = 0, ///< 0: type with no size - HalfTyID, ///< 1: 16-bit floating point type - FloatTyID, ///< 2: 32-bit floating point type - DoubleTyID, ///< 3: 64-bit floating point type - X86_FP80TyID, ///< 4: 80-bit floating point type (X87) - FP128TyID, ///< 5: 128-bit floating point type (112-bit mantissa) - PPC_FP128TyID, ///< 6: 128-bit floating point type (two 64-bits, PowerPC) - LabelTyID, ///< 7: Labels - MetadataTyID, ///< 8: Metadata - X86_MMXTyID, ///< 9: MMX vectors (64 bits, X86 specific) - TokenTyID, ///< 10: Tokens + // PrimitiveTypes + HalfTyID = 0, ///< 16-bit floating point type + BFloatTyID, ///< 16-bit floating point type (7-bit significand) + FloatTyID, ///< 32-bit floating point type + DoubleTyID, ///< 64-bit floating point type + X86_FP80TyID, ///< 80-bit floating point type (X87) + FP128TyID, ///< 128-bit floating point type (112-bit significand) + PPC_FP128TyID, ///< 128-bit floating point type (two 64-bits, PowerPC) + VoidTyID, ///< type with no size + LabelTyID, ///< Labels + MetadataTyID, ///< Metadata + X86_MMXTyID, ///< MMX vectors (64 bits, X86 specific) + TokenTyID, ///< Tokens // Derived types... see DerivedTypes.h file. - // Make sure FirstDerivedTyID stays up to date! - IntegerTyID, ///< 11: Arbitrary bit width integers - FunctionTyID, ///< 12: Functions - StructTyID, ///< 13: Structures - ArrayTyID, ///< 14: Arrays - PointerTyID, ///< 15: Pointers - VectorTyID ///< 16: SIMD 'packed' format, or other vector type + IntegerTyID, ///< Arbitrary bit width integers + FunctionTyID, ///< Functions + PointerTyID, ///< Pointers + StructTyID, ///< Structures + ArrayTyID, ///< Arrays + FixedVectorTyID, ///< Fixed width SIMD vector type + ScalableVectorTyID ///< Scalable SIMD vector type }; private: @@ -110,10 +111,6 @@ protected: /// Float). Type * const *ContainedTys = nullptr; - static bool isSequentialType(TypeID TyID) { - return TyID == ArrayTyID || TyID == VectorTyID; - } - public: /// Print the current type. /// Omit the type details if \p NoDetails == true. @@ -143,6 +140,9 @@ public: /// Return true if this is 'half', a 16-bit IEEE fp type. bool isHalfTy() const { return getTypeID() == HalfTyID; } + /// Return true if this is 'bfloat', a 16-bit bfloat type. + bool isBFloatTy() const { return getTypeID() == BFloatTyID; } + /// Return true if this is 'float', a 32-bit IEEE fp type. bool isFloatTy() const { return getTypeID() == FloatTyID; } @@ -160,8 +160,8 @@ public: /// Return true if this is one of the six floating-point types bool isFloatingPointTy() const { - return getTypeID() == HalfTyID || getTypeID() == FloatTyID || - getTypeID() == DoubleTyID || + return getTypeID() == HalfTyID || getTypeID() == BFloatTyID || + getTypeID() == FloatTyID || getTypeID() == DoubleTyID || getTypeID() == X86_FP80TyID || getTypeID() == FP128TyID || getTypeID() == PPC_FP128TyID; } @@ -169,6 +169,7 @@ public: const fltSemantics &getFltSemantics() const { switch (getTypeID()) { case HalfTyID: return APFloat::IEEEhalf(); + case BFloatTyID: return APFloat::BFloat(); case FloatTyID: return APFloat::IEEEsingle(); case DoubleTyID: return APFloat::IEEEdouble(); case X86_FP80TyID: return APFloat::x87DoubleExtended(); @@ -227,7 +228,9 @@ public: bool isPtrOrPtrVectorTy() const { return getScalarType()->isPointerTy(); } /// True if this is an instance of VectorType. - bool isVectorTy() const { return getTypeID() == VectorTyID; } + inline bool isVectorTy() const { + return getTypeID() == ScalableVectorTyID || getTypeID() == FixedVectorTyID; + } /// Return true if this type could be converted with a lossless BitCast to /// type 'Ty'. For example, i8* to i32*. BitCasts are valid for types of the @@ -270,8 +273,7 @@ public: return true; // If it is not something that can have a size (e.g. a function or label), // it doesn't have a size. - if (getTypeID() != StructTyID && getTypeID() != ArrayTyID && - getTypeID() != VectorTyID) + if (getTypeID() != StructTyID && getTypeID() != ArrayTyID && !isVectorTy()) return false; // Otherwise we have to try harder to decide. return isSizedDerivedType(Visited); @@ -304,10 +306,10 @@ public: /// If this is a vector type, return the element type, otherwise return /// 'this'. - Type *getScalarType() const { + inline Type *getScalarType() const { if (isVectorTy()) - return getVectorElementType(); - return const_cast<Type*>(this); + return getContainedType(0); + return const_cast<Type *>(this); } //===--------------------------------------------------------------------===// @@ -343,8 +345,8 @@ public: //===--------------------------------------------------------------------===// // Helper methods corresponding to subclass methods. This forces a cast to - // the specified subclass and calls its accessor. "getVectorNumElements" (for - // example) is shorthand for cast<VectorType>(Ty)->getNumElements(). This is + // the specified subclass and calls its accessor. "getArrayNumElements" (for + // example) is shorthand for cast<ArrayType>(Ty)->getNumElements(). This is // only intended to cover the core methods that are frequently used, helper // methods should not be added here. @@ -358,11 +360,6 @@ public: inline unsigned getStructNumElements() const; inline Type *getStructElementType(unsigned N) const; - inline Type *getSequentialElementType() const { - assert(isSequentialType(getTypeID()) && "Not a sequential type!"); - return ContainedTys[0]; - } - inline uint64_t getArrayNumElements() const; Type *getArrayElementType() const { @@ -370,14 +367,6 @@ public: return ContainedTys[0]; } - inline bool getVectorIsScalable() const; - inline unsigned getVectorNumElements() const; - inline ElementCount getVectorElementCount() const; - Type *getVectorElementType() const { - assert(getTypeID() == VectorTyID); - return ContainedTys[0]; - } - Type *getPointerElementType() const { assert(getTypeID() == PointerTyID); return ContainedTys[0]; @@ -408,6 +397,7 @@ public: static Type *getVoidTy(LLVMContext &C); static Type *getLabelTy(LLVMContext &C); static Type *getHalfTy(LLVMContext &C); + static Type *getBFloatTy(LLVMContext &C); static Type *getFloatTy(LLVMContext &C); static Type *getDoubleTy(LLVMContext &C); static Type *getMetadataTy(LLVMContext &C); @@ -443,6 +433,7 @@ public: // types as pointee. // static PointerType *getHalfPtrTy(LLVMContext &C, unsigned AS = 0); + static PointerType *getBFloatPtrTy(LLVMContext &C, unsigned AS = 0); static PointerType *getFloatPtrTy(LLVMContext &C, unsigned AS = 0); static PointerType *getDoublePtrTy(LLVMContext &C, unsigned AS = 0); static PointerType *getX86_FP80PtrTy(LLVMContext &C, unsigned AS = 0); |