aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/options.c
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2011-04-08 21:46:08 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2011-04-08 21:46:08 +0000
commit51a30b323dd59079cf039341d16e95c6136f31cb (patch)
treedead53cd1d4f1c204f3597d9701bfc77638335b5 /gcc/fortran/options.c
parent041e059f264744313dc38f2223098409f8d86c29 (diff)
downloadgcc-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.c16
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;