Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Unified Diff: src/IceTypes.cpp

Issue 1234803007: Introduction of improved switch lowering. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Safer check for 0 size type Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceTypes.h ('k') | src/IceTypes.def » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceTypes.cpp
diff --git a/src/IceTypes.cpp b/src/IceTypes.cpp
index 2099cb904de76ccc74fa8df0c8047d0c9043169e..dd06b1e975156e2e78bbfed065ac268ed97de692 100644
--- a/src/IceTypes.cpp
+++ b/src/IceTypes.cpp
@@ -30,7 +30,7 @@ const char *TargetArchName[] = {
// Define a temporary set of enum values based on ICETYPE_TABLE
enum {
-#define X(tag, size, align, elts, elty, str) _table_tag_##tag,
+#define X(tag, sizeLog2, align, elts, elty, str) _table_tag_##tag,
ICETYPE_TABLE
#undef X
_enum_table_tag_Names
@@ -44,7 +44,7 @@ enum {
_enum_props_table_tag_Names
};
// Assert that tags in ICETYPE_TABLE are also in ICETYPE_PROPS_TABLE.
-#define X(tag, size, align, elts, elty, str) \
+#define X(tag, sizeLog2, align, elts, elty, str) \
static_assert( \
(unsigned)_table_tag_##tag == (unsigned)_props_table_tag_##tag, \
"Inconsistency between ICETYPE_PROPS_TABLE and ICETYPE_TABLE");
@@ -63,7 +63,7 @@ ICETYPE_PROPS_TABLE
// Define constants for each element size in ICETYPE_TABLE.
enum {
-#define X(tag, size, align, elts, elty, str) _table_elts_##tag = elts,
+#define X(tag, sizeLog2, align, elts, elty, str) _table_elts_##tag = elts,
ICETYPE_TABLE
#undef X
_enum_table_elts_Elements = 0
@@ -83,7 +83,7 @@ ICETYPE_PROPS_TABLE
#undef X
struct TypeAttributeFields {
- size_t TypeWidthInBytes;
+ int8_t TypeWidthInBytesLog2;
size_t TypeAlignInBytes;
size_t TypeNumElements;
Type TypeElementType;
@@ -91,8 +91,8 @@ struct TypeAttributeFields {
};
const struct TypeAttributeFields TypeAttributes[] = {
-#define X(tag, size, align, elts, elty, str) \
- { size, align, elts, elty, str } \
+#define X(tag, sizeLog2, align, elts, elty, str) \
+ { sizeLog2, align, elts, elty, str } \
,
ICETYPE_TABLE
#undef X
@@ -133,10 +133,15 @@ const char *targetArchString(const TargetArch Arch) {
}
size_t typeWidthInBytes(Type Ty) {
+ int8_t Shift = typeWidthInBytesLog2(Ty);
+ return (Shift < 0) ? 0 : 1 << Shift;
+}
+
+int8_t typeWidthInBytesLog2(Type Ty) {
size_t Index = static_cast<size_t>(Ty);
if (Index < IceType_NUM)
- return TypeAttributes[Index].TypeWidthInBytes;
- llvm_unreachable("Invalid type for typeWidthInBytes()");
+ return TypeAttributes[Index].TypeWidthInBytesLog2;
+ llvm_unreachable("Invalid type for typeWidthInBytesLog2()");
return 0;
}
« no previous file with comments | « src/IceTypes.h ('k') | src/IceTypes.def » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698