Use InstrSlots::NUM rather than pre-dividing by four. Also, mark this const.
[oota-llvm.git] / include / llvm / Type.h
index 743a0189db1a4db0df313575a6b4a677fa998d2d..fe3c392c7c6cd03f597aca9ead7c76c7800fcc7f 100644 (file)
@@ -16,7 +16,7 @@
 #include "llvm/Support/DataTypes.h"
 #include "llvm/Support/Streams.h"
 #include "llvm/ADT/GraphTraits.h"
-#include "llvm/ADT/iterator"
+#include "llvm/ADT/iterator.h"
 #include <string>
 #include <vector>
 
@@ -216,8 +216,9 @@ public:
   /// is a valid type for a Value.
   ///
   inline bool isFirstClassType() const {
-    return isSingleValueType() ||
-           ID == StructTyID || ID == ArrayTyID;
+    // 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
@@ -229,6 +230,15 @@ public:
             ID == IntegerTyID || ID == PointerTyID || ID == VectorTyID;
   }
 
+  /// isAggregateType - Return true if the type is an aggregate type. This
+  /// means it is valid as the first operand of an insertvalue or
+  /// extractvalue instruction. This includes struct and array types, but
+  /// does not include vector types.
+  ///
+  inline bool isAggregateType() const {
+    return ID == StructTyID || ID == ArrayTyID;
+  }
+
   /// isSized - Return true if it makes sense to take the size of this type.  To
   /// get the actual size for a particular target, it is reasonable to use the
   /// TargetData subsystem to do this.