| Index: src/IceTypes.h
 | 
| diff --git a/src/IceTypes.h b/src/IceTypes.h
 | 
| index a87cf8b9f46470d1cc58a1d6a0c6ffddc873fadc..1ef3df7f0b3c1b8973aef6cecae092b186bcdee8 100644
 | 
| --- a/src/IceTypes.h
 | 
| +++ b/src/IceTypes.h
 | 
| @@ -22,12 +22,30 @@
 | 
|  namespace Ice {
 | 
|  
 | 
|  enum Type {
 | 
| -#define X(tag, sizeLog2, align, elts, elty, str) IceType_##tag,
 | 
| +#define X(tag, sizeLog2, align, elts, elty, str, rcstr) IceType_##tag,
 | 
|    ICETYPE_TABLE
 | 
|  #undef X
 | 
|        IceType_NUM
 | 
|  };
 | 
|  
 | 
| +/// RegClass indicates the physical register class that a Variable may be
 | 
| +/// register-allocated from.  By default, a variable's register class is
 | 
| +/// directly associated with its type.  However, the target lowering may define
 | 
| +/// additional target-specific register classes by extending the set of enum
 | 
| +/// values.
 | 
| +enum RegClass : uint8_t {
 | 
| +// Define RC_void, RC_i1, RC_i8, etc.
 | 
| +#define X(tag, sizeLog2, align, elts, elty, str, rcstr)                        \
 | 
| +  RC_##tag = IceType_##tag,
 | 
| +  ICETYPE_TABLE
 | 
| +#undef X
 | 
| +      RC_Target,
 | 
| +  // Leave plenty of space for target-specific values.
 | 
| +  RC_Max = std::numeric_limits<uint8_t>::max()
 | 
| +};
 | 
| +static_assert(RC_Target == static_cast<RegClass>(IceType_NUM),
 | 
| +              "Expected RC_Target and IceType_NUM to be the same");
 | 
| +
 | 
|  enum TargetArch {
 | 
|  #define X(tag, str, is_elf64, e_machine, e_flags) tag,
 | 
|    TARGETARCH_TABLE
 | 
| @@ -64,6 +82,7 @@ size_t typeAlignInBytes(Type Ty);
 | 
|  size_t typeNumElements(Type Ty);
 | 
|  Type typeElementType(Type Ty);
 | 
|  const char *typeString(Type Ty);
 | 
| +const char *regClassString(RegClass C);
 | 
|  
 | 
|  inline Type getPointerType() { return IceType_i32; }
 | 
|  
 | 
| 
 |