diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2011-04-08 21:46:08 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2011-04-08 21:46:08 +0000 |
commit | 51a30b323dd59079cf039341d16e95c6136f31cb (patch) | |
tree | dead53cd1d4f1c204f3597d9701bfc77638335b5 /gcc/fortran/options.c | |
parent | 041e059f264744313dc38f2223098409f8d86c29 (diff) | |
download | gcc-51a30b323dd59079cf039341d16e95c6136f31cb.zip gcc-51a30b323dd59079cf039341d16e95c6136f31cb.tar.gz gcc-51a30b323dd59079cf039341d16e95c6136f31cb.tar.bz2 |
re PR fortran/48448 (Implement -f(no-)frontend-optimization)
2011-04-08 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/48448
* gfortran.h (gfc_option_t): Add warn_function_elimination and
flag_frontend_optimize.
* lang.opt (Wfunction-elimination): Add.
(ffrontend-optimize): Add.
* invoke.texi: Add documentation for -Wfunction-elimination
and -ffrontend-optimize. Add -faggressive-function-elimination
to list of code generation options.
* frontend-passes.c (gfc_run_passes): Run optimizations if
flag_frontend_optimize is set.
(warn_function_elimination): New function.
(cfe_expr_0): Call it if requested to do so.
* options.c (gfc_init_options): Initiate warn_function_elimination
and flag_frontend_optimize.
(gfc_post_options): Set flag_frontend_optimize if not specified
by user, depending on the optimization level.
(gfc_handle_option): Handle -Wfunction-elimination and
-ffrontend-optimize.
2011-04-08 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/48448
* gfortran.dg/function_optimize_5.f90: New test.
From-SVN: r172215
Diffstat (limited to 'gcc/fortran/options.c')
-rw-r--r-- | gcc/fortran/options.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index cb14c3a..0083460 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -99,6 +99,7 @@ gfc_init_options (unsigned int decoded_options_count, gfc_option.warn_array_temp = 0; gfc_option.gfc_warn_conversion = 0; gfc_option.warn_conversion_extra = 0; + gfc_option.warn_function_elimination = 0; gfc_option.warn_implicit_interface = 0; gfc_option.warn_line_truncation = 0; gfc_option.warn_surprising = 0; @@ -151,6 +152,7 @@ gfc_init_options (unsigned int decoded_options_count, gfc_option.flag_protect_parens = 1; gfc_option.flag_realloc_lhs = -1; gfc_option.flag_aggressive_function_elimination = 0; + gfc_option.flag_frontend_optimize = -1; gfc_option.fpe = 0; gfc_option.rtcheck = 0; @@ -418,6 +420,12 @@ gfc_post_options (const char **pfilename) if (pedantic && gfc_option.flag_whole_file) gfc_option.flag_whole_file = 2; + /* Optimization implies front end optimization, unless the user + specified it directly. */ + + if (gfc_option.flag_frontend_optimize == -1) + gfc_option.flag_frontend_optimize = optimize; + gfc_cpp_post_options (); /* FIXME: return gfc_cpp_preprocess_only (); @@ -610,6 +618,10 @@ gfc_handle_option (size_t scode, const char *arg, int value, gfc_option.warn_conversion_extra = value; break; + case OPT_Wfunction_elimination: + gfc_option.warn_function_elimination = value; + break; + case OPT_Wimplicit_interface: gfc_option.warn_implicit_interface = value; break; @@ -979,6 +991,10 @@ gfc_handle_option (size_t scode, const char *arg, int value, gfc_option.flag_aggressive_function_elimination = value; break; + case OPT_ffrontend_optimize: + gfc_option.flag_frontend_optimize = value; + break; + case OPT_fprotect_parens: gfc_option.flag_protect_parens = value; break; |