Remove warnings when using -Wshorten-64-to-32.
[oota-llvm.git] / include / llvm / Type.h
index cf1c64fc9d3c80df5a743a45ae095e5e54c8a9ae..1ee84e2cabe256edfd5993c772297b604fea3b9c 100644 (file)
@@ -2,8 +2,8 @@
 //
 //                     The LLVM Compiler Infrastructure
 //
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
 
@@ -70,18 +70,20 @@ public:
     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 bitcode 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,
@@ -177,9 +179,15 @@ public:
   ///
   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.
   ///
@@ -221,8 +229,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 (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.
@@ -236,7 +243,7 @@ public:
   ///
   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.
@@ -282,6 +289,7 @@ public:
   // 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:
@@ -349,9 +357,10 @@ inline void PATypeHandle::removeUser() {
     Ty->removeAbstractTypeUser(User);
 }
 
-// Define inline methods for PATypeHolder...
+// Define inline methods for PATypeHolder.
 
 inline void PATypeHolder::addRef() {
+  assert(Ty && "Type Holder has a null type!");
   if (Ty->isAbstract())
     Ty->addRef();
 }