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