summaryrefslogtreecommitdiff
path: root/gcc/config/mcore
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/mcore')
-rw-r--r--gcc/config/mcore/mcore.c49
1 files changed, 19 insertions, 30 deletions
diff --git a/gcc/config/mcore/mcore.c b/gcc/config/mcore/mcore.c
index 152c343964b..9bacc5caee0 100644
--- a/gcc/config/mcore/mcore.c
+++ b/gcc/config/mcore/mcore.c
@@ -145,7 +145,6 @@ static int mcore_arg_partial_bytes (CUMULATIVE_ARGS *,
static void mcore_asm_trampoline_template (FILE *);
static void mcore_trampoline_init (rtx, tree, rtx);
static void mcore_option_override (void);
-static void mcore_option_optimization (int, int);
/* MCore specific attributes. */
@@ -157,6 +156,23 @@ static const struct attribute_spec mcore_attribute_table[] =
{ "naked", 0, 0, true, false, false, mcore_handle_naked_attribute },
{ NULL, 0, 0, false, false, false, NULL }
};
+
+/* What options are we going to default to specific settings when
+ -O* happens; the user can subsequently override these settings.
+
+ Omitting the frame pointer is a very good idea on the MCore.
+ Scheduling isn't worth anything on the current MCore implementation. */
+
+static const struct default_options mcore_option_optimization_table[] =
+ {
+ { OPT_LEVELS_1_PLUS, OPT_ffunction_cse, NULL, 0 },
+ { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 },
+ { OPT_LEVELS_ALL, OPT_fcaller_saves, NULL, 0 },
+ { OPT_LEVELS_ALL, OPT_fschedule_insns, NULL, 0 },
+ { OPT_LEVELS_ALL, OPT_fschedule_insns2, NULL, 0 },
+ { OPT_LEVELS_SIZE, OPT_mhardlit, NULL, 0 },
+ { OPT_LEVELS_NONE, 0, NULL, 0 }
+ };
/* Initialize the GCC target structure. */
#undef TARGET_ASM_EXTERNAL_LIBCALL
@@ -224,8 +240,8 @@ static const struct attribute_spec mcore_attribute_table[] =
#undef TARGET_OPTION_OVERRIDE
#define TARGET_OPTION_OVERRIDE mcore_option_override
-#undef TARGET_OPTION_OPTIMIZATION
-#define TARGET_OPTION_OPTIMIZATION mcore_option_optimization
+#undef TARGET_OPTION_OPTIMIZATION_TABLE
+#define TARGET_OPTION_OPTIMIZATION_TABLE mcore_option_optimization_table
#undef TARGET_EXCEPT_UNWIND_INFO
#define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info
@@ -2692,33 +2708,6 @@ mcore_option_override (void)
target_flags |= MASK_M340;
}
-/* What options are we going to default to specific settings when
- -O* happens; the user can subsequently override these settings.
-
- Omitting the frame pointer is a very good idea on the MCore.
- Scheduling isn't worth anything on the current MCore implementation. */
-
-static void
-mcore_option_optimization (int level, int size)
-{
- if (level)
- {
- flag_no_function_cse = 1;
- flag_omit_frame_pointer = 1;
-
- if (level >= 2)
- {
- flag_caller_saves = 0;
- flag_schedule_insns = 0;
- flag_schedule_insns_after_reload = 0;
- }
- }
- if (size)
- {
- target_flags &= ~MASK_HARDLIT;
- }
-}
-
/* Compute the number of word sized registers needed to
hold a function argument of mode MODE and type TYPE. */