///
/// Opaque types are also kinda weird and scary and different because they have
/// to keep a list of uses of the type. When, through linking, parsing, or
-/// bytecode reading, they become resolved, they need to find and update all
+/// bitcode reading, they become resolved, they need to find and update all
/// users of the unknown type, causing them to reference a new, more concrete
/// type. Opaque types are deleted when their use list dwindles to zero users.
///
VoidTyID = 0, ///< 0: type with no size
FloatTyID, ///< 1: 32 bit floating point type
DoubleTyID, ///< 2: 64 bit floating point type
- LabelTyID, ///< 3: Labels
+ X86_FP80TyID, ///< 3: 80 bit floating point type (X87)
+ FP128TyID, ///< 4: 128 bit floating point type (112-bit mantissa)
+ PPC_FP128TyID, ///< 5: 128 bit floating point type (two 64-bits)
+ LabelTyID, ///< 6: Labels
// Derived types... see DerivedTypes.h file...
// Make sure FirstDerivedTyID stays up to date!!!
- IntegerTyID, ///< 4: Arbitrary bit width integers
- FunctionTyID, ///< 5: Functions
- StructTyID, ///< 6: Structures
- PackedStructTyID,///< 7: Packed Structure. This is for bytecode only
- ArrayTyID, ///< 8: Arrays
- PointerTyID, ///< 9: Pointers
- OpaqueTyID, ///< 10: Opaque: type with unknown structure
- VectorTyID, ///< 11: SIMD 'packed' format, or other vector type
+ IntegerTyID, ///< 7: Arbitrary bit width integers
+ FunctionTyID, ///< 8: Functions
+ StructTyID, ///< 9: Structures
+ ArrayTyID, ///< 10: Arrays
+ PointerTyID, ///< 11: Pointers
+ OpaqueTyID, ///< 12: Opaque: type with unknown structure
+ VectorTyID, ///< 13: SIMD 'packed' format, or other vector type
NumTypeIDs, // Must remain as last defined ID
LastPrimitiveTyID = LabelTyID,
///
bool isInteger() const { return ID == IntegerTyID; }
+ /// isIntOrIntVector - Return true if this is an integer type or a vector of
+ /// integer types.
+ ///
+ bool isIntOrIntVector() const;
+
/// isFloatingPoint - Return true if this is one of the two floating point
/// types
- bool isFloatingPoint() const { return ID == FloatTyID || ID == DoubleTyID; }
+ bool isFloatingPoint() const { return ID == FloatTyID || ID == DoubleTyID ||
+ ID == X86_FP80TyID || ID == FP128TyID || ID == PPC_FP128TyID; }
/// isFPOrFPVector - Return true if this is a FP type or a vector of FP types.
///
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 (ID != StructTyID && ID != ArrayTyID && ID != VectorTyID &&
- ID != PackedStructTyID)
+ if (ID != StructTyID && ID != ArrayTyID && ID != VectorTyID)
return false;
// If it is something that can have a size and it's concrete, it definitely
// has a size, otherwise we have to try harder to decide.
///
unsigned getPrimitiveSizeInBits() const;
- /// getForwaredType - Return the type that this type has been resolved to if
+ /// getForwardedType - Return the type that this type has been resolved to if
/// it has been resolved to anything. This is used to implement the
/// union-find algorithm for type resolution, and shouldn't be used by general
/// purpose clients.
// These are the builtin types that are always available...
//
static const Type *VoidTy, *LabelTy, *FloatTy, *DoubleTy;
+ static const Type *X86_FP80Ty, *FP128Ty, *PPC_FP128Ty;
static const IntegerType *Int1Ty, *Int8Ty, *Int16Ty, *Int32Ty, *Int64Ty;
/// Methods for support type inquiry through isa, cast, and dyn_cast: