#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>
/// 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
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.