Selectively invert ICMP operands for better address optimization
Results in lower code size and more loads folded into cmp instructions.
BUG=none
R=eholk@chromium.org, jpp@chromium.org, stichnot@chromium.org
Review URL: https://codereview.chromium.org/2124973005 .
diff --git a/src/IceTargetLoweringARM32.cpp b/src/IceTargetLoweringARM32.cpp
index 237d085..20536d2 100644
--- a/src/IceTargetLoweringARM32.cpp
+++ b/src/IceTargetLoweringARM32.cpp
@@ -170,7 +170,8 @@
_num
};
// Define a set of constants based on high-level table entries.
-#define X(tag, str) static constexpr int _icmp_hl_##tag = InstIcmp::tag;
+#define X(tag, reverse, str) \
+ static constexpr int _icmp_hl_##tag = InstIcmp::tag;
ICEINSTICMP_TABLE
#undef X
// Define a set of constants based on low-level table entries, and ensure the
@@ -183,7 +184,7 @@
#undef X
// Repeat the static asserts with respect to the high-level table entries in
// case the high-level table has extra entries.
-#define X(tag, str) \
+#define X(tag, reverse, str) \
static_assert( \
_icmp_hl_##tag == _icmp_ll_##tag, \
"Inconsistency between ICMPARM32_TABLE and ICEINSTICMP_TABLE: " #tag);