From efeee67f4c9fd021d2594e0271c84b7e90e63d3d Mon Sep 17 00:00:00 2001 From: Wilco Dijkstra Date: Thu, 16 Nov 2017 11:44:30 +0000 Subject: [PATCH] Set default to -fomit-frame-pointer Almost all targets add an explict -fomit-frame-pointer in the target specific options. Rather than doing this in a target-specific way, do this in the generic options so it works identically across all targets. In many cases the target no longer needs to define TARGET_OPTION_OPTIMIZATION_TABLE, reducing the amount of target code. gcc/ * opts.c (default_options_table): Add OPT_fomit_frame_pointer entry. * common/config/alpha/alpha-common.c (TARGET_OPTION_OPTIMIZATION_TABLE): Remove OPT_fomit_frame_pointer entry. * common/config/arc/arc-common.c: Likewise. * common/config/arm/arm-common.c: Likewise. * common/config/avr/avr-common.c: Likewise. * common/config/c6x/c6x-common.c: Likewise. * common/config/cr16/cr16-common.c: Likewise. * common/config/cris/cris-common.c: Likewise. * common/config/epiphany/epiphany-common.c: Likewise. * common/config/fr30/fr30-common.c: Likewise. * common/config/frv/frv-common.c: Likewise. * common/config/ia64/ia64-common.c: Likewise. * common/config/iq2000/iq2000-common.c: Likewise. * common/config/lm32/lm32-common.c: Likewise. * common/config/m32r/m32r-common.c: Likewise. * common/config/mcore/mcore-common.c: Likewise. * common/config/microblaze/microblaze-common.c: Likewise. * common/config/mips/mips-common.c: Likewise. * common/config/mmix/mmix-common.c: Likewise. * common/config/mn10300/mn10300-common.c: Likewise. * common/config/nios2/nios2-common.c: Likewise. * common/config/pa/pa-common.c: Likewise. * common/config/pdp11/pdp11-common.c: Likewise. * common/config/powerpcspe/powerpcspe-common.c: Likewise. * common/config/riscv/riscv-common.c: Likewise. * common/config/rs6000/rs6000-common.c: Likewise. * common/config/rx/rx-common.c: Likewise. * common/config/s390/s390-common.c: Likewise. * common/config/sh/sh-common.c: Likewise. * common/config/sparc/sparc-common.c: Likewise. * common/config/tilegx/tilegx-common.c: Likewise. * common/config/tilepro/tilepro-common.c: Likewise. * common/config/v850/v850-common.c: Likewise. * common/config/visium/visium-common.c: Likewise. * common/config/xstormy16/xstormy16-common.c: Likewise. * common/config/xtensa/xtensa-common.c: Likewise. doc/ * invoke.texi (-fomit-frame-pointer): Update documentation. From-SVN: r254815 --- gcc/ChangeLog | 41 +++++++++++++++++++ gcc/common/config/alpha/alpha-common.c | 1 - gcc/common/config/arc/arc-common.c | 1 - gcc/common/config/arm/arm-common.c | 1 - gcc/common/config/avr/avr-common.c | 1 - gcc/common/config/c6x/c6x-common.c | 1 - gcc/common/config/cr16/cr16-common.c | 10 ----- gcc/common/config/cris/cris-common.c | 10 ----- gcc/common/config/epiphany/epiphany-common.c | 1 - gcc/common/config/fr30/fr30-common.c | 10 ----- gcc/common/config/frv/frv-common.c | 9 ---- gcc/common/config/ia64/ia64-common.c | 1 - gcc/common/config/iq2000/iq2000-common.c | 10 ----- gcc/common/config/lm32/lm32-common.c | 10 ----- gcc/common/config/m32r/m32r-common.c | 8 ---- gcc/common/config/mcore/mcore-common.c | 1 - .../config/microblaze/microblaze-common.c | 10 ----- gcc/common/config/mips/mips-common.c | 10 ----- gcc/common/config/mmix/mmix-common.c | 11 ----- gcc/common/config/mn10300/mn10300-common.c | 1 - gcc/common/config/nios2/nios2-common.c | 1 - gcc/common/config/pa/pa-common.c | 9 ---- gcc/common/config/pdp11/pdp11-common.c | 10 ----- .../config/powerpcspe/powerpcspe-common.c | 1 - gcc/common/config/riscv/riscv-common.c | 1 - gcc/common/config/rs6000/rs6000-common.c | 1 - gcc/common/config/rx/rx-common.c | 10 ----- gcc/common/config/s390/s390-common.c | 2 - gcc/common/config/sh/sh-common.c | 1 - gcc/common/config/sparc/sparc-common.c | 1 - gcc/common/config/tilegx/tilegx-common.c | 1 - gcc/common/config/tilepro/tilepro-common.c | 1 - gcc/common/config/v850/v850-common.c | 1 - gcc/common/config/visium/visium-common.c | 10 ----- .../config/xstormy16/xstormy16-common.c | 10 ----- gcc/common/config/xtensa/xtensa-common.c | 1 - gcc/doc/invoke.texi | 41 ++++++------------- gcc/opts.c | 1 + 38 files changed, 55 insertions(+), 196 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index eaf4c8e97892..f9a429369d6a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,44 @@ +2017-11-16 Wilco Dijkstra + + * opts.c (default_options_table): Add OPT_fomit_frame_pointer entry. + * common/config/alpha/alpha-common.c (TARGET_OPTION_OPTIMIZATION_TABLE): + Remove OPT_fomit_frame_pointer entry. + * common/config/arc/arc-common.c: Likewise. + * common/config/arm/arm-common.c: Likewise. + * common/config/avr/avr-common.c: Likewise. + * common/config/c6x/c6x-common.c: Likewise. + * common/config/cr16/cr16-common.c: Likewise. + * common/config/cris/cris-common.c: Likewise. + * common/config/epiphany/epiphany-common.c: Likewise. + * common/config/fr30/fr30-common.c: Likewise. + * common/config/frv/frv-common.c: Likewise. + * common/config/ia64/ia64-common.c: Likewise. + * common/config/iq2000/iq2000-common.c: Likewise. + * common/config/lm32/lm32-common.c: Likewise. + * common/config/m32r/m32r-common.c: Likewise. + * common/config/mcore/mcore-common.c: Likewise. + * common/config/microblaze/microblaze-common.c: Likewise. + * common/config/mips/mips-common.c: Likewise. + * common/config/mmix/mmix-common.c: Likewise. + * common/config/mn10300/mn10300-common.c: Likewise. + * common/config/nios2/nios2-common.c: Likewise. + * common/config/pa/pa-common.c: Likewise. + * common/config/pdp11/pdp11-common.c: Likewise. + * common/config/powerpcspe/powerpcspe-common.c: Likewise. + * common/config/riscv/riscv-common.c: Likewise. + * common/config/rs6000/rs6000-common.c: Likewise. + * common/config/rx/rx-common.c: Likewise. + * common/config/s390/s390-common.c: Likewise. + * common/config/sh/sh-common.c: Likewise. + * common/config/sparc/sparc-common.c: Likewise. + * common/config/tilegx/tilegx-common.c: Likewise. + * common/config/tilepro/tilepro-common.c: Likewise. + * common/config/v850/v850-common.c: Likewise. + * common/config/visium/visium-common.c: Likewise. + * common/config/xstormy16/xstormy16-common.c: Likewise. + * common/config/xtensa/xtensa-common.c: Likewise. + * invoke.texi (-fomit-frame-pointer): Update documentation. + 2017-11-16 Jan Hubicka * tree-cfg.c (gimple_find_sub_bbs): Do not compute freq. diff --git a/gcc/common/config/alpha/alpha-common.c b/gcc/common/config/alpha/alpha-common.c index be42282270bb..3a7d28d16225 100644 --- a/gcc/common/config/alpha/alpha-common.c +++ b/gcc/common/config/alpha/alpha-common.c @@ -30,7 +30,6 @@ along with GCC; see the file COPYING3. If not see /* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ static const struct default_options alpha_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, /* Enable redundant extension instructions removal at -O2 and higher. */ { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } diff --git a/gcc/common/config/arc/arc-common.c b/gcc/common/config/arc/arc-common.c index 82e0dd383c9d..c437313ba419 100644 --- a/gcc/common/config/arc/arc-common.c +++ b/gcc/common/config/arc/arc-common.c @@ -47,7 +47,6 @@ arc_option_init_struct (struct gcc_options *opts) static const struct default_options arc_option_optimization_table[] = { { OPT_LEVELS_SIZE, OPT_fsection_anchors, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, { OPT_LEVELS_ALL, OPT_mRcq, NULL, 1 }, { OPT_LEVELS_ALL, OPT_mRcw, NULL, 1 }, { OPT_LEVELS_ALL, OPT_msize_level_, NULL, 1 }, diff --git a/gcc/common/config/arm/arm-common.c b/gcc/common/config/arm/arm-common.c index 1588ca86e9b0..5ae20fea916a 100644 --- a/gcc/common/config/arm/arm-common.c +++ b/gcc/common/config/arm/arm-common.c @@ -36,7 +36,6 @@ static const struct default_options arm_option_optimization_table[] = { /* Enable section anchors by default at -O1 or higher. */ { OPT_LEVELS_1_PLUS, OPT_fsection_anchors, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, { OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } }; diff --git a/gcc/common/config/avr/avr-common.c b/gcc/common/config/avr/avr-common.c index 4bee9d670d95..9bf0e0d0932b 100644 --- a/gcc/common/config/avr/avr-common.c +++ b/gcc/common/config/avr/avr-common.c @@ -27,7 +27,6 @@ /* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ static const struct default_options avr_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, // The only effect of -fcaller-saves might be that it triggers // a frame without need when it tries to be smart around calls. { OPT_LEVELS_ALL, OPT_fcaller_saves, NULL, 0 }, diff --git a/gcc/common/config/c6x/c6x-common.c b/gcc/common/config/c6x/c6x-common.c index 3de96a034f09..ec698a82e18e 100644 --- a/gcc/common/config/c6x/c6x-common.c +++ b/gcc/common/config/c6x/c6x-common.c @@ -32,7 +32,6 @@ along with GCC; see the file COPYING3. If not see /* Implement overriding of the optimization options. */ static const struct default_options c6x_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, { OPT_LEVELS_1_PLUS, OPT_frename_registers, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_fmodulo_sched, NULL, 1 }, { OPT_LEVELS_ALL, OPT_freciprocal_math, NULL, 1 }, diff --git a/gcc/common/config/cr16/cr16-common.c b/gcc/common/config/cr16/cr16-common.c index 620a812eacf3..a106fcbfde0c 100644 --- a/gcc/common/config/cr16/cr16-common.c +++ b/gcc/common/config/cr16/cr16-common.c @@ -24,14 +24,4 @@ #include "common/common-target.h" #include "common/common-target-def.h" -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ -static const struct default_options cr16_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE cr16_option_optimization_table - struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; diff --git a/gcc/common/config/cris/cris-common.c b/gcc/common/config/cris/cris-common.c index 94a3fcf87928..79f976d07210 100644 --- a/gcc/common/config/cris/cris-common.c +++ b/gcc/common/config/cris/cris-common.c @@ -26,14 +26,6 @@ along with GCC; see the file COPYING3. If not see #include "opts.h" #include "flags.h" -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ - -static const struct default_options cris_option_optimization_table[] = - { - { OPT_LEVELS_2_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - /* TARGET_HANDLE_OPTION worker. We just store the values into local variables here. Checks for correct semantics are in cris_option_override. */ @@ -98,7 +90,5 @@ cris_handle_option (struct gcc_options *opts, #define TARGET_DEFAULT_TARGET_FLAGS (TARGET_DEFAULT | CRIS_SUBTARGET_DEFAULT) #undef TARGET_HANDLE_OPTION #define TARGET_HANDLE_OPTION cris_handle_option -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE cris_option_optimization_table struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; diff --git a/gcc/common/config/epiphany/epiphany-common.c b/gcc/common/config/epiphany/epiphany-common.c index ced64cd4e5ad..f837a6293b3d 100644 --- a/gcc/common/config/epiphany/epiphany-common.c +++ b/gcc/common/config/epiphany/epiphany-common.c @@ -38,7 +38,6 @@ along with GCC; see the file COPYING3. If not see /* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ static const struct default_options epiphany_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, /* Enable section anchors by default at -O1 or higher. */ { OPT_LEVELS_1_PLUS, OPT_fsection_anchors, NULL, 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } diff --git a/gcc/common/config/fr30/fr30-common.c b/gcc/common/config/fr30/fr30-common.c index 9388cca1a7c5..1dd001ecf7e4 100644 --- a/gcc/common/config/fr30/fr30-common.c +++ b/gcc/common/config/fr30/fr30-common.c @@ -24,17 +24,7 @@ #include "common/common-target.h" #include "common/common-target-def.h" -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ -static const struct default_options fr30_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - #undef TARGET_EXCEPT_UNWIND_INFO #define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE fr30_option_optimization_table - struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; diff --git a/gcc/common/config/frv/frv-common.c b/gcc/common/config/frv/frv-common.c index 9c2399ba6834..77062bbf2f4b 100644 --- a/gcc/common/config/frv/frv-common.c +++ b/gcc/common/config/frv/frv-common.c @@ -32,13 +32,6 @@ along with GCC; see the file COPYING3. If not see #define MASK_DEFAULT_ALLOC_CC 0 #endif -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ -static const struct default_options frv_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - #undef TARGET_DEFAULT_TARGET_FLAGS #define TARGET_DEFAULT_TARGET_FLAGS \ (MASK_DEFAULT_ALLOC_CC \ @@ -48,7 +41,5 @@ static const struct default_options frv_option_optimization_table[] = | MASK_VLIW_BRANCH \ | MASK_MULTI_CE \ | MASK_NESTED_CE) -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE frv_option_optimization_table struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; diff --git a/gcc/common/config/ia64/ia64-common.c b/gcc/common/config/ia64/ia64-common.c index 86e54e392ba8..ab8c33b577ff 100644 --- a/gcc/common/config/ia64/ia64-common.c +++ b/gcc/common/config/ia64/ia64-common.c @@ -33,7 +33,6 @@ along with GCC; see the file COPYING3. If not see /* Implement overriding of the optimization options. */ static const struct default_options ia64_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, #ifdef SUBTARGET_OPTIMIZATION_OPTIONS SUBTARGET_OPTIMIZATION_OPTIONS, #endif diff --git a/gcc/common/config/iq2000/iq2000-common.c b/gcc/common/config/iq2000/iq2000-common.c index 9f36ddcbbb52..04f9f670133c 100644 --- a/gcc/common/config/iq2000/iq2000-common.c +++ b/gcc/common/config/iq2000/iq2000-common.c @@ -24,14 +24,4 @@ along with GCC; see the file COPYING3. If not see #include "common/common-target.h" #include "common/common-target-def.h" -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ -static const struct default_options iq2000_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE iq2000_option_optimization_table - struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; diff --git a/gcc/common/config/lm32/lm32-common.c b/gcc/common/config/lm32/lm32-common.c index 969fce25841e..7bd0ab072ddb 100644 --- a/gcc/common/config/lm32/lm32-common.c +++ b/gcc/common/config/lm32/lm32-common.c @@ -25,16 +25,6 @@ #include "common/common-target.h" #include "common/common-target-def.h" -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ -static const struct default_options lm32_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE lm32_option_optimization_table - #undef TARGET_EXCEPT_UNWIND_INFO #define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info diff --git a/gcc/common/config/m32r/m32r-common.c b/gcc/common/config/m32r/m32r-common.c index d2add8dd5e56..b56dbb8311c6 100644 --- a/gcc/common/config/m32r/m32r-common.c +++ b/gcc/common/config/m32r/m32r-common.c @@ -26,12 +26,6 @@ #include "opts.h" #include "flags.h" -static const struct default_options m32r_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - /* Implement TARGET_HANDLE_OPTION. */ static bool @@ -65,8 +59,6 @@ m32r_handle_option (struct gcc_options *opts, #define TARGET_DEFAULT_TARGET_FLAGS TARGET_CPU_DEFAULT #undef TARGET_HANDLE_OPTION #define TARGET_HANDLE_OPTION m32r_handle_option -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE m32r_option_optimization_table #undef TARGET_EXCEPT_UNWIND_INFO #define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info diff --git a/gcc/common/config/mcore/mcore-common.c b/gcc/common/config/mcore/mcore-common.c index 03f70a95d31b..77958bb88ed6 100644 --- a/gcc/common/config/mcore/mcore-common.c +++ b/gcc/common/config/mcore/mcore-common.c @@ -33,7 +33,6 @@ 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 }, diff --git a/gcc/common/config/microblaze/microblaze-common.c b/gcc/common/config/microblaze/microblaze-common.c index 49756633056f..448a7acd539a 100644 --- a/gcc/common/config/microblaze/microblaze-common.c +++ b/gcc/common/config/microblaze/microblaze-common.c @@ -24,17 +24,7 @@ #include "common/common-target.h" #include "common/common-target-def.h" -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ -static const struct default_options microblaze_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - #undef TARGET_DEFAULT_TARGET_FLAGS #define TARGET_DEFAULT_TARGET_FLAGS TARGET_DEFAULT -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE microblaze_option_optimization_table - struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; diff --git a/gcc/common/config/mips/mips-common.c b/gcc/common/config/mips/mips-common.c index 525af741d58c..07ba06049cb4 100644 --- a/gcc/common/config/mips/mips-common.c +++ b/gcc/common/config/mips/mips-common.c @@ -56,16 +56,6 @@ mips_handle_option (struct gcc_options *opts, } } -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ -static const struct default_options mips_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE mips_option_optimization_table - #undef TARGET_DEFAULT_TARGET_FLAGS #define TARGET_DEFAULT_TARGET_FLAGS \ (TARGET_DEFAULT \ diff --git a/gcc/common/config/mmix/mmix-common.c b/gcc/common/config/mmix/mmix-common.c index dd281394c0b4..f73ad980cd36 100644 --- a/gcc/common/config/mmix/mmix-common.c +++ b/gcc/common/config/mmix/mmix-common.c @@ -24,18 +24,7 @@ along with GCC; see the file COPYING3. If not see #include "common/common-target.h" #include "common/common-target-def.h" -/* TARGET_OPTION_OPTIMIZATION_TABLE. */ - -static const struct default_options mmix_option_optimization_table[] = - { - { OPT_LEVELS_2_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - #undef TARGET_DEFAULT_TARGET_FLAGS #define TARGET_DEFAULT_TARGET_FLAGS TARGET_DEFAULT -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE mmix_option_optimization_table - struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; diff --git a/gcc/common/config/mn10300/mn10300-common.c b/gcc/common/config/mn10300/mn10300-common.c index e2df672ef665..74fa463d8d01 100644 --- a/gcc/common/config/mn10300/mn10300-common.c +++ b/gcc/common/config/mn10300/mn10300-common.c @@ -29,7 +29,6 @@ /* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ static const struct default_options mn10300_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, /* The STC algorithm produces the smallest code at -Os. */ { OPT_LEVELS_2_PLUS, OPT_freorder_blocks_algorithm_, NULL, REORDER_BLOCKS_ALGORITHM_STC }, diff --git a/gcc/common/config/nios2/nios2-common.c b/gcc/common/config/nios2/nios2-common.c index 1366b1fffeaf..36750ad1d3b9 100644 --- a/gcc/common/config/nios2/nios2-common.c +++ b/gcc/common/config/nios2/nios2-common.c @@ -30,7 +30,6 @@ along with GCC; see the file COPYING3. If not see /* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ static const struct default_options nios2_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, { OPT_LEVELS_3_PLUS, OPT_mfast_sw_div, NULL, 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } }; diff --git a/gcc/common/config/pa/pa-common.c b/gcc/common/config/pa/pa-common.c index 13cc32b20c51..ea943b9e0478 100644 --- a/gcc/common/config/pa/pa-common.c +++ b/gcc/common/config/pa/pa-common.c @@ -26,13 +26,6 @@ along with GCC; see the file COPYING3. If not see #include "opts.h" #include "flags.h" -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ -static const struct default_options pa_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - /* Implement TARGET_HANDLE_OPTION. */ static bool @@ -68,8 +61,6 @@ pa_handle_option (struct gcc_options *opts, } } -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE pa_option_optimization_table #undef TARGET_DEFAULT_TARGET_FLAGS #define TARGET_DEFAULT_TARGET_FLAGS (TARGET_DEFAULT | TARGET_CPU_DEFAULT) #undef TARGET_HANDLE_OPTION diff --git a/gcc/common/config/pdp11/pdp11-common.c b/gcc/common/config/pdp11/pdp11-common.c index 47512ef0071d..6c3044f042c5 100644 --- a/gcc/common/config/pdp11/pdp11-common.c +++ b/gcc/common/config/pdp11/pdp11-common.c @@ -26,14 +26,6 @@ along with GCC; see the file COPYING3. If not see #include "opts.h" #include "flags.h" -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ - -static const struct default_options pdp11_option_optimization_table[] = - { - { OPT_LEVELS_3_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - /* Implement TARGET_HANDLE_OPTION. */ static bool @@ -70,8 +62,6 @@ pdp11_option_init_struct (struct gcc_options *opts) (MASK_FPU | MASK_45 | TARGET_UNIX_ASM_DEFAULT) #undef TARGET_HANDLE_OPTION #define TARGET_HANDLE_OPTION pdp11_handle_option -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE pdp11_option_optimization_table #undef TARGET_OPTION_INIT_STRUCT #define TARGET_OPTION_INIT_STRUCT pdp11_option_init_struct diff --git a/gcc/common/config/powerpcspe/powerpcspe-common.c b/gcc/common/config/powerpcspe/powerpcspe-common.c index 3c0106ae555d..0458c4070861 100644 --- a/gcc/common/config/powerpcspe/powerpcspe-common.c +++ b/gcc/common/config/powerpcspe/powerpcspe-common.c @@ -31,7 +31,6 @@ /* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ static const struct default_options rs6000_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, /* Enable -fsched-pressure for first pass instruction scheduling. */ { OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } diff --git a/gcc/common/config/riscv/riscv-common.c b/gcc/common/config/riscv/riscv-common.c index 50f1485f87a4..0408cb384cd8 100644 --- a/gcc/common/config/riscv/riscv-common.c +++ b/gcc/common/config/riscv/riscv-common.c @@ -117,7 +117,6 @@ riscv_handle_option (struct gcc_options *opts, static const struct default_options riscv_option_optimization_table[] = { { OPT_LEVELS_1_PLUS, OPT_fsection_anchors, NULL, 1 }, - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } }; diff --git a/gcc/common/config/rs6000/rs6000-common.c b/gcc/common/config/rs6000/rs6000-common.c index 07537543ddcc..915c4694fe51 100644 --- a/gcc/common/config/rs6000/rs6000-common.c +++ b/gcc/common/config/rs6000/rs6000-common.c @@ -31,7 +31,6 @@ /* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ static const struct default_options rs6000_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, /* Enable -fsched-pressure for first pass instruction scheduling. */ { OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } diff --git a/gcc/common/config/rx/rx-common.c b/gcc/common/config/rx/rx-common.c index 961d05af1e3b..ef6f82302a3c 100644 --- a/gcc/common/config/rx/rx-common.c +++ b/gcc/common/config/rx/rx-common.c @@ -70,19 +70,9 @@ rx_handle_option (struct gcc_options *opts, return true; } -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ -static const struct default_options rx_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - #undef TARGET_HANDLE_OPTION #define TARGET_HANDLE_OPTION rx_handle_option -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE rx_option_optimization_table - #undef TARGET_EXCEPT_UNWIND_INFO #define TARGET_EXCEPT_UNWIND_INFO sjlj_except_unwind_info diff --git a/gcc/common/config/s390/s390-common.c b/gcc/common/config/s390/s390-common.c index 10418a36c20b..b53ea6e30a96 100644 --- a/gcc/common/config/s390/s390-common.c +++ b/gcc/common/config/s390/s390-common.c @@ -56,8 +56,6 @@ EXPORTED_CONST int processor_flags_table[] = static const struct default_options s390_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - /* Enable -fsched-pressure by default when optimizing. */ { OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 }, diff --git a/gcc/common/config/sh/sh-common.c b/gcc/common/config/sh/sh-common.c index e9903cc9c4e9..395da07bd7d3 100644 --- a/gcc/common/config/sh/sh-common.c +++ b/gcc/common/config/sh/sh-common.c @@ -30,7 +30,6 @@ along with GCC; see the file COPYING3. If not see /* Set default optimization options. */ static const struct default_options sh_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, { OPT_LEVELS_SIZE, OPT_mdiv_, SH_DIV_STR_FOR_SIZE, 1 }, { OPT_LEVELS_0_ONLY, OPT_mdiv_, "", 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } diff --git a/gcc/common/config/sparc/sparc-common.c b/gcc/common/config/sparc/sparc-common.c index 0d196697cc28..87fcac49486d 100644 --- a/gcc/common/config/sparc/sparc-common.c +++ b/gcc/common/config/sparc/sparc-common.c @@ -27,7 +27,6 @@ along with GCC; see the file COPYING3. If not see /* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ static const struct default_options sparc_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, /* Enable redundant extension instructions removal at -O2 and higher. */ { OPT_LEVELS_2_PLUS, OPT_free, NULL, 1 }, { OPT_LEVELS_NONE, 0, NULL, 0 } diff --git a/gcc/common/config/tilegx/tilegx-common.c b/gcc/common/config/tilegx/tilegx-common.c index 96d5b25464f6..7fca8bb08f12 100644 --- a/gcc/common/config/tilegx/tilegx-common.c +++ b/gcc/common/config/tilegx/tilegx-common.c @@ -29,7 +29,6 @@ #include "flags.h" static const struct default_options tilegx_option_optimization_table[] = { - {OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1}, /* Scheduling and bundling are super important for our architecture, so enable them at -O1. */ {OPT_LEVELS_1_PLUS, OPT_fschedule_insns, NULL, 1}, diff --git a/gcc/common/config/tilepro/tilepro-common.c b/gcc/common/config/tilepro/tilepro-common.c index 50ac7a9404b0..9dddf6528e56 100644 --- a/gcc/common/config/tilepro/tilepro-common.c +++ b/gcc/common/config/tilepro/tilepro-common.c @@ -29,7 +29,6 @@ #include "flags.h" static const struct default_options tilepro_option_optimization_table[] = { - {OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1}, /* Scheduling and bundling are super important for our architecture, so enable them at -O1. */ {OPT_LEVELS_1_PLUS, OPT_fschedule_insns, NULL, 1}, diff --git a/gcc/common/config/v850/v850-common.c b/gcc/common/config/v850/v850-common.c index 032ef888966e..b30f9cb0b673 100644 --- a/gcc/common/config/v850/v850-common.c +++ b/gcc/common/config/v850/v850-common.c @@ -111,7 +111,6 @@ v850_handle_option (struct gcc_options *opts, static const struct default_options v850_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, /* Note - we no longer enable MASK_EP when optimizing. This is because of a hardware bug which stops the SLD and SST instructions from correctly detecting some hazards. If the user is sure that diff --git a/gcc/common/config/visium/visium-common.c b/gcc/common/config/visium/visium-common.c index 6a29a243b325..7d7c647c03b0 100644 --- a/gcc/common/config/visium/visium-common.c +++ b/gcc/common/config/visium/visium-common.c @@ -25,14 +25,4 @@ along with GCC; see the file COPYING3. If not see #include "common/common-target.h" #include "common/common-target-def.h" -/* Set default optimization options. */ -static const struct default_options visium_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE visium_option_optimization_table - struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; diff --git a/gcc/common/config/xstormy16/xstormy16-common.c b/gcc/common/config/xstormy16/xstormy16-common.c index 6e70d94cf735..eb24c6fbdd57 100644 --- a/gcc/common/config/xstormy16/xstormy16-common.c +++ b/gcc/common/config/xstormy16/xstormy16-common.c @@ -24,14 +24,4 @@ #include "common/common-target.h" #include "common/common-target-def.h" -/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */ -static const struct default_options xstorym16_option_optimization_table[] = - { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, - { OPT_LEVELS_NONE, 0, NULL, 0 } - }; - -#undef TARGET_OPTION_OPTIMIZATION_TABLE -#define TARGET_OPTION_OPTIMIZATION_TABLE xstorym16_option_optimization_table - struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER; diff --git a/gcc/common/config/xtensa/xtensa-common.c b/gcc/common/config/xtensa/xtensa-common.c index 24521ec9787a..53ad976b5000 100644 --- a/gcc/common/config/xtensa/xtensa-common.c +++ b/gcc/common/config/xtensa/xtensa-common.c @@ -28,7 +28,6 @@ along with GCC; see the file COPYING3. If not see static const struct default_options xtensa_option_optimization_table[] = { - { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, /* Reordering blocks for Xtensa is not a good idea unless the compiler understands the range of conditional branches. Currently all branch relaxation for Xtensa is handled in the diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 85c980bdfc9c..6384bc62a131 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -7322,6 +7322,7 @@ compilation time. -fipa-reference @gol -fmerge-constants @gol -fmove-loop-invariants @gol +-fomit-frame-pointer @gol -freorder-blocks @gol -fshrink-wrap @gol -fshrink-wrap-separate @gol @@ -7346,9 +7347,6 @@ compilation time. -ftree-ter @gol -funit-at-a-time} -@option{-O} also turns on @option{-fomit-frame-pointer} on machines -where doing so does not interfere with debugging. - @item -O2 @opindex O2 Optimize even more. GCC performs nearly all supported optimizations @@ -7500,29 +7498,18 @@ The default is @option{-ffp-contract=fast}. @item -fomit-frame-pointer @opindex fomit-frame-pointer -Don't keep the frame pointer in a register for functions that -don't need one. This avoids the instructions to save, set up and -restore frame pointers; it also makes an extra register available -in many functions. @strong{It also makes debugging impossible on -some machines.} - -On some machines, such as the VAX, this flag has no effect, because -the standard calling sequence automatically handles the frame pointer -and nothing is saved by pretending it doesn't exist. The -machine-description macro @code{FRAME_POINTER_REQUIRED} controls -whether a target machine supports this flag. @xref{Registers,,Register -Usage, gccint, GNU Compiler Collection (GCC) Internals}. - -The default setting (when not optimizing for -size) for 32-bit GNU/Linux x86 and 32-bit Darwin x86 targets is -@option{-fomit-frame-pointer}. You can configure GCC with the -@option{--enable-frame-pointer} configure option to change the default. - -Note that @option{-fno-omit-frame-pointer} doesn't force a new stack -frame for all functions if it isn't otherwise needed, and hence doesn't -guarantee a new frame pointer for all functions. +Omit the frame pointer in functions that don't need one. This avoids the +instructions to save, set up and restore the frame pointer; on many targets +it also makes an extra register available. -Enabled at levels @option{-O}, @option{-O2}, @option{-O3}, @option{-Os}. +On some targets this flag has no effect because the standard calling sequence +always uses a frame pointer, so it cannot be omitted. + +Note that @option{-fno-omit-frame-pointer} doesn't guarantee the frame pointer +is used in all functions. Several targets always omit the frame pointer in +leaf functions. + +Enabled by default at @option{-O} and higher. @item -foptimize-sibling-calls @opindex foptimize-sibling-calls @@ -16817,9 +16804,7 @@ Certain other options, such as @option{-mid-shared-library} and @opindex momit-leaf-frame-pointer Don't keep the frame pointer in a register for leaf functions. This avoids the instructions to save, set up and restore frame pointers and -makes an extra register available in leaf functions. The option -@option{-fomit-frame-pointer} removes the frame pointer for all functions, -which might make debugging harder. +makes an extra register available in leaf functions. @item -mspecld-anomaly @opindex mspecld-anomaly diff --git a/gcc/opts.c b/gcc/opts.c index ac383d48ec18..ab3f4aefed32 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -476,6 +476,7 @@ static const struct default_options default_options_table[] = { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_ftree_pta, NULL, 1 }, { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fssa_phiopt, NULL, 1 }, { OPT_LEVELS_1_PLUS, OPT_ftree_builtin_call_dce, NULL, 1 }, + { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 }, /* -O2 optimizations. */ { OPT_LEVELS_2_PLUS, OPT_finline_small_functions, NULL, 1 }, -- 2.39.2