aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/m32c/m32c.c15
2 files changed, 22 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index beed454..7a67b09 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2010-10-20 DJ Delorie <dj@redhat.com>
+
+ * config/m32c/m32c.c (m32c_option_override): Always disable
+ function-cse in 16-bit mode. Indirect calls are always worse than
+ direct calls as there is no 16-bit indirect call opcode.
+ (m32c_override_options_after_change): New, likewise.
+
2010-10-20 Nathan Froyd <froydnj@codesourcery.com>
* ifcvt.c (noce_emit_cmove): If both of the values are SUBREGs, try
diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c
index d62b4f2..39b3393 100644
--- a/gcc/config/m32c/m32c.c
+++ b/gcc/config/m32c/m32c.c
@@ -429,6 +429,21 @@ m32c_option_override (void)
/* This target defaults to strict volatile bitfields. */
if (flag_strict_volatile_bitfields < 0)
flag_strict_volatile_bitfields = 1;
+
+ /* r8c/m16c have no 16-bit indirect call, so thunks are involved.
+ This is always worse than an absolute call. */
+ if (TARGET_A16)
+ flag_no_function_cse = 1;
+}
+
+#undef TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE
+#define TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE m32c_override_options_after_change
+
+static void
+m32c_override_options_after_change (void)
+{
+ if (TARGET_A16)
+ flag_no_function_cse = 1;
}
/* Defining data structures for per-function information */