Patchwork [Fortran+gcc/doc/invoke.texi] PR48864: -Ofast implies -fno-protect parens

login
register
mail settings
Submitter Tobias Burnus
Date May 4, 2011, noon
Message ID <4DC13FD7.10402@net-b.de>
Download mbox | patch
Permalink /patch/94011/
State New
Headers show

Comments

Tobias Burnus - May 4, 2011, noon
As the example in the PR shows, using -fno-protect parens can make a 
huge difference. As -fno-protect is in the spirit of -Ofast, enable it 
with that option.

Build on x86-64-linux.
OK for the trunk?

Tobias
Thomas Koenig - May 4, 2011, 4:43 p.m.
Hi Tobias,

> As the example in the PR shows, using -fno-protect parens can make a
> huge difference. As -fno-protect is in the spirit of -Ofast, enable it
> with that option.
>
> Build on x86-64-linux.
> OK for the trunk?

OK.

Out of curiosity: Why do you do

gfc_option.flag_protect_parens = optimize_fast ? 0 : 1;

instead of

gfc_option.flag_protect_parens = optimize_fast;

?

Thanks for the patch!

	Thomas
Tobias Burnus - May 4, 2011, 5:10 p.m.
On 05/04/2011 06:43 PM, Thomas Koenig wrote:
> Out of curiosity: Why do you do
>    gfc_option.flag_protect_parens = optimize_fast ? 0 : 1;
> instead of
>   gfc_option.flag_protect_parens = optimize_fast;

I found it more clearer than  = !optimize_fast (note the "!"), but 
that's seemingly not the case. I thus changed it to the latter.

Committed as Rev. 173385.

Thanks for the review!

Tobias
Toon Moene - May 4, 2011, 6:39 p.m.
On 05/04/2011 02:00 PM, Tobias Burnus wrote:

> As the example in the PR shows, using -fno-protect parens can make a
> huge difference. As -fno-protect is in the spirit of -Ofast, enable it
> with that option.

As long as -Ofast -fprotect-parens still works, I don't think this would 
be objectionable.

Patch

gcc/
2011-05-04  Tobias Burnus  <burnus@net-b.de>

	PR fortran/48864
	* doc/invoke.texi (Ofast): Document that it
	enables Fortran's -fno-protect-parens.

gcc/fortran
2011-05-04  Tobias Burnus  <burnus@net-b.de>

	PR fortran/48864
	* invoke.texi (fno-protect-parens): Document
	that -Ofast implies -fno-protect-parens.
	* options.c (gfc_init_options, gfc_post_options):
	Make -Ofast imply -fno-protect-parens.

diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 8602923..9e27653 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -5999,7 +5999,8 @@  optimizations designed to reduce code size.
 Disregard strict standards compliance.  @option{-Ofast} enables all
 @option{-O3} optimizations.  It also enables optimizations that are not
 valid for all standard compliant programs.
-It turns on @option{-ffast-math}.
+It turns on @option{-ffast-math} and the Fortran-specific
+@option{-fno-protect-parens}.
 
 If you use multiple @option{-O} options, with or without level numbers,
 the last such option is the one that is effective.
diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi
index 0874e5c..d24c2f2 100644
--- a/gcc/fortran/invoke.texi
+++ b/gcc/fortran/invoke.texi
@@ -1488,7 +1488,8 @@  levels such that the compiler does not do any re-association. Using
 @option{-fno-protect-parens} allows the compiler to reorder @code{REAL} and
 @code{COMPLEX} expressions to produce faster code. Note that for the re-association
 optimization @option{-fno-signed-zeros} and @option{-fno-trapping-math}
-need to be in effect.
+need to be in effect. The parentheses protection is enabled by default, unless
+@option{-Ofast} is given.
 
 @item -frealloc-lhs
 @opindex @code{frealloc-lhs}
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index f56fad7..52422b1 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -151,7 +151,7 @@  gfc_init_options (unsigned int decoded_options_count,
   gfc_option.flag_init_character = GFC_INIT_CHARACTER_OFF;
   gfc_option.flag_init_character_value = (char)0;
   gfc_option.flag_align_commons = 1;
-  gfc_option.flag_protect_parens = 1;
+  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;
@@ -272,6 +272,9 @@  gfc_post_options (const char **pfilename)
   if (flag_associative_math == -1)
     flag_associative_math = (!flag_trapping_math && !flag_signed_zeros);
 
+  if (gfc_option.flag_protect_parens == -1)
+    gfc_option.flag_protect_parens = optimize_fast ? 0 : 1;
+
   /* By default, disable (re)allocation during assignment for -std=f95,
      and enable it for F2003/F2008/GNU/Legacy. */
   if (gfc_option.flag_realloc_lhs == -1)