#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>
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;
}