Index: src/IceTypes.cpp |
diff --git a/src/IceTypes.cpp b/src/IceTypes.cpp |
index 21157d09dbc8b9676b42ca846c8816fc60ce7251..3a5b80a50083e303b8d2e2b4b6cbac1e07843409 100644 |
--- a/src/IceTypes.cpp |
+++ b/src/IceTypes.cpp |
@@ -33,7 +33,8 @@ void __attribute__((unused)) xIceTypeMacroIntegrityCheck() { |
}; |
// Define a temporary set of enum values based on ICETYPE_PROPS_TABLE |
enum { |
-#define X(tag, IsVec, IsInt, IsFloat, IsIntArith) _props_table_tag_##tag, |
+#define X(tag, IsVec, IsInt, IsFloat, IsIntArith, CompareResult) \ |
+ _props_table_tag_##tag, |
ICETYPE_PROPS_TABLE |
#undef X |
_enum_props_table_tag_Names |
@@ -44,7 +45,7 @@ void __attribute__((unused)) xIceTypeMacroIntegrityCheck() { |
ICETYPE_TABLE; |
#undef X |
// Assert that tags in ICETYPE_PROPS_TABLE is in ICETYPE_TABLE. |
-#define X(tag, IsVec, IsInt, IsFloat, IsIntArith) \ |
+#define X(tag, IsVec, IsInt, IsFloat, IsIntArith, CompareResult) \ |
STATIC_ASSERT((unsigned)_table_tag_##tag == (unsigned)_props_table_tag_##tag); |
ICETYPE_PROPS_TABLE; |
#undef X |
@@ -61,13 +62,13 @@ void __attribute__((unused)) xIceTypeMacroIntegrityCheck() { |
}; |
// Define constants for boolean flag if vector in ICETYPE_PROPS_TABLE. |
enum { |
-#define X(tag, IsVec, IsInt, IsFloat, IsIntArith) \ |
- _props_table_IsVec_##tag = IsVec, |
+#define X(tag, IsVec, IsInt, IsFloat, IsIntArith, CompareResult) \ |
+ _props_table_IsVec_##tag = IsVec, |
ICETYPE_PROPS_TABLE |
#undef X |
}; |
// Verify that the number of vector elements is consistent with IsVec. |
-#define X(tag, IsVec, IsInt, IsFloat, IsIntArith) \ |
+#define X(tag, IsVec, IsInt, IsFloat, IsIntArith, CompareResult) \ |
STATIC_ASSERT((_table_elts_##tag > 1) == _props_table_IsVec_##tag); |
ICETYPE_PROPS_TABLE; |
#undef X |
@@ -98,13 +99,14 @@ struct TypePropertyFields { |
bool TypeIsFloatingType; |
bool TypeIsScalarFloatingType; |
bool TypeIsVectorFloatingType; |
+ Type CompareResultType; |
}; |
const TypePropertyFields TypePropertiesTable[] = { |
-#define X(tag, IsVec, IsInt, IsFloat, IsIntArith) \ |
+#define X(tag, IsVec, IsInt, IsFloat, IsIntArith, CompareResult) \ |
{ \ |
IsVec, IsInt, IsInt && !IsVec, IsInt && IsVec, IsIntArith, IsFloat, \ |
- IsFloat && !IsVec, IsFloat && IsVec \ |
+ IsFloat && !IsVec, IsFloat && IsVec, CompareResult \ |
} \ |
, |
ICETYPE_PROPS_TABLE |
@@ -209,6 +211,14 @@ bool isVectorFloatingType(Type Ty) { |
return false; |
} |
+Type getCompareResultType(Type Ty) { |
+ size_t Index = static_cast<size_t>(Ty); |
+ if (Index < IceType_NUM) |
+ return TypePropertiesTable[Index].CompareResultType; |
+ llvm_unreachable("Invalid type for getCompareResultType"); |
+ return IceType_void; |
+} |
+ |
// ======================== Dump routines ======================== // |
const char *typeString(Type Ty) { |