Eliminate x86.sse2.punpckh.qdq and x86.sse2.punpckl.qdq.
[oota-llvm.git] / include / llvm / Type.h
index 48ed04027b61abbb3668f795c08d38d58e471041..b029212de492e488ca5554ee84bb7bd34383e2a0 100644 (file)
@@ -212,9 +212,20 @@ public:
   inline bool isPrimitiveType() const { return ID <= LastPrimitiveTyID; }
   inline bool isDerivedType()   const { return ID >= FirstDerivedTyID; }
 
-  /// isFirstClassType - Return true if the value is holdable in a register.
+  /// isFirstClassType - Return true if the type is "first class", meaning it
+  /// is a valid type for a Value.
   ///
   inline bool isFirstClassType() const {
+    // There are more first-class kinds than non-first-class kinds, so a
+    // negative test is simpler than a positive one.
+    return ID != FunctionTyID && ID != VoidTyID && ID != OpaqueTyID;
+  }
+
+  /// isSingleValueType - Return true if the type is a valid type for a
+  /// virtual register in codegen.  This includes all first-class types
+  /// except struct and array types.
+  ///
+  inline bool isSingleValueType() const {
     return (ID != VoidTyID && ID <= LastPrimitiveTyID) ||
             ID == IntegerTyID || ID == PointerTyID || ID == VectorTyID;
   }
@@ -242,6 +253,19 @@ public:
   /// primitive type.
   ///
   unsigned getPrimitiveSizeInBits() const;
+  
+  /// getFPMantissaWidth - Return the width of the mantissa of this type.  This
+  /// is only valid on scalar floating point types.  If the FP type does not
+  /// have a stable mantissa (e.g. ppc long double), this method returns -1.
+  int getFPMantissaWidth() const {
+    assert(isFloatingPoint() && "Not a floating point type!");
+    if (ID == FloatTyID) return 24;
+    if (ID == DoubleTyID) return 53;
+    if (ID == X86_FP80TyID) return 64;
+    if (ID == FP128TyID) return 113;
+    assert(ID == PPC_FP128TyID && "unknown fp type");
+    return -1;
+  }
 
   /// getForwardedType - Return the type that this type has been resolved to if
   /// it has been resolved to anything.  This is used to implement the