[preliminary unsubmitted patch for attribute((optimize(2))) ICE on m68k ] gcc/ 2011-03-02 Mikael Pettersson PR target/47908 * config/m68k/m68k.c (m68k_override_options_after_change): New function. Disable instruction scheduling for non-ColdFire targets. (TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Define. --- gcc-4.6-20110226/gcc/config/m68k/m68k.c.~1~ 2010-12-12 15:03:55.000000000 +0100 +++ gcc-4.6-20110226/gcc/config/m68k/m68k.c 2011-03-02 00:07:03.000000000 +0100 @@ -136,6 +136,7 @@ static void m68k_conditional_register_us static bool m68k_legitimate_address_p (enum machine_mode, rtx, bool); static bool m68k_handle_option (size_t, const char *, int); static void m68k_option_override (void); +static void m68k_override_options_after_change (void); static rtx find_addr_reg (rtx); static const char *singlemove_string (rtx *); static void m68k_output_mi_thunk (FILE *, tree, HOST_WIDE_INT, @@ -241,6 +242,9 @@ const char *m68k_library_id_string = "_c #undef TARGET_OPTION_OVERRIDE #define TARGET_OPTION_OVERRIDE m68k_option_override +#undef TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE +#define TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE m68k_override_options_after_change + #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS m68k_rtx_costs @@ -756,6 +760,17 @@ m68k_option_override (void) } } +static void +m68k_override_options_after_change (void) +{ + if (m68k_sched_cpu == CPU_UNKNOWN) + { + flag_schedule_insns = 0; + flag_schedule_insns_after_reload = 0; + flag_modulo_sched = 0; + } +} + /* Generate a macro of the form __mPREFIX_cpu_NAME, where PREFIX is the given argument and NAME is the argument passed to -mcpu. Return NULL if -mcpu was not passed. */