From 72bd130e66f28490198385ff62481a719a0103c0 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Sun, 21 Feb 2010 14:06:07 +0100 Subject: re PR fortran/35259 (-fassociative-math not enabled by default; No option to associate with PAREN_EXPRs) 2010-02-21 Tobias Burnus PR fortran/35259 * doc/invoke.texi (-fassociative-math): Document that this option is automatically enabled for Fortran. 2010-02-21 Tobias Burnus PR fortran/35259 * gfortran.h (gfc_option_t): New flag -fprotect-parens. * lang.opt: Ditto. * option.c (gfc_init_options,gfc_handle_option): Ditto. * trans-expr.c (gfc_conv_expr_op): Use the flag. * invoke.texi: Document new -fno-protect-parens flag. 2010-02-21 Tobias Burnus PR fortran/35259 * gfortran.dg/reassoc_5.f90: New test. From-SVN: r156937 --- gcc/ChangeLog | 6 ++++++ gcc/doc/invoke.texi | 4 +++- gcc/fortran/ChangeLog | 9 +++++++++ gcc/fortran/gfortran.h | 1 + gcc/fortran/invoke.texi | 13 ++++++++++++- gcc/fortran/lang.opt | 4 ++++ gcc/fortran/options.c | 5 +++++ gcc/fortran/trans-expr.c | 5 +++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/reassoc_5.f90 | 19 +++++++++++++++++++ 10 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/reassoc_5.f90 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8975aea..4334c21 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-02-21 Tobias Burnus + + PR fortran/35259 + * doc/invoke.texi (-fassociative-math): Document that this + option is automatically enabled for Fortran. + 2010-02-20 David S. Miller * configure.ac: Test if linker and assembler properly support diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index a7abd01..f661001 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -7541,7 +7541,9 @@ thus cannot be used on a code which relies on rounding behavior like and thus may not be used when ordered comparisons are required. This option requires that both @option{-fno-signed-zeros} and @option{-fno-trapping-math} be in effect. Moreover, it doesn't make -much sense with @option{-frounding-math}. +much sense with @option{-frounding-math}. For Fortran the option +is automatically enabled when both @option{-fno-signed-zeros} and +@option{-fno-trapping-math} are in effect. The default is @option{-fno-associative-math}. diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 9efaf38..fec057f 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2010-02-21 Tobias Burnus + + PR fortran/35259 + * gfortran.h (gfc_option_t): New flag -fprotect-parens. + * lang.opt: Ditto. + * option.c (gfc_init_options,gfc_handle_option): Ditto. + * trans-expr.c (gfc_conv_expr_op): Use the flag. + * invoke.texi: Document new -fno-protect-parens flag. + 2010-02-20 Paul Thomas PR fortran/36932 diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 71f3fe0..eeaf0af 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -2150,6 +2150,7 @@ typedef struct char flag_init_character_value; int flag_align_commons; int flag_whole_file; + int flag_protect_parens; int fpe; int rtcheck; diff --git a/gcc/fortran/invoke.texi b/gcc/fortran/invoke.texi index 9fe75d1..efcf5ef 100644 --- a/gcc/fortran/invoke.texi +++ b/gcc/fortran/invoke.texi @@ -171,7 +171,8 @@ and warnings}. -fpack-derived -frepack-arrays -fshort-enums -fexternal-blas @gol -fblas-matmul-limit=@var{n} -frecursive -finit-local-zero @gol -finit-integer=@var{n} -finit-real=@var{} @gol --finit-logical=@var{} -finit-character=@var{n} -fno-align-commons} +-finit-logical=@var{} -finit-character=@var{n} @gol +-fno-align-commons -fno-protect-parens} @end table @menu @@ -1410,6 +1411,16 @@ consistent data types everywhere, this padding can cause trouble, and same form of this option should be used for all files that share a COMMON block. To avoid potential alignment issues in COMMON blocks, it is recommended to order objects from largests to smallest. + +@item -fno-protect-parens +@opindex @code{fno-protect-parens} +@cindex re-association of parenthesed expressions +By default the parentheses in expression are honored for all optimization +levels such that the compiler does not do any re-association. Using +@option{-fno-protect-parens} allows the compiler to reorder REAL and +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. @end table @xref{Code Gen Options,,Options for Code Generation Conventions, diff --git a/gcc/fortran/lang.opt b/gcc/fortran/lang.opt index b64dbc7..a52e643 100644 --- a/gcc/fortran/lang.opt +++ b/gcc/fortran/lang.opt @@ -324,6 +324,10 @@ fpreprocessed Fortran ; Documented in C +fprotect-parens +Fortran +Protect parentheses in expressions + frange-check Fortran Enable range checking during compilation diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c index a9ce560..bcde573 100644 --- a/gcc/fortran/options.c +++ b/gcc/fortran/options.c @@ -125,6 +125,7 @@ gfc_init_options (unsigned int argc, const char **argv) 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.fpe = 0; gfc_option.rtcheck = 0; @@ -921,6 +922,10 @@ gfc_handle_option (size_t scode, const char *arg, int value) gfc_option.flag_align_commons = value; break; + case OPT_fprotect_parens: + gfc_option.flag_protect_parens = value; + break; + case OPT_fcheck_: gfc_handle_runtime_check_option (arg); break; diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 276e645..d712148 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -1222,8 +1222,9 @@ gfc_conv_expr_op (gfc_se * se, gfc_expr * expr) switch (expr->value.op.op) { case INTRINSIC_PARENTHESES: - if (expr->ts.type == BT_REAL - || expr->ts.type == BT_COMPLEX) + if ((expr->ts.type == BT_REAL + || expr->ts.type == BT_COMPLEX) + && gfc_option.flag_protect_parens) { gfc_conv_unary_op (PAREN_EXPR, se, expr); gcc_assert (FLOAT_TYPE_P (TREE_TYPE (se->expr))); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a010e8f..682a7e8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-02-21 Tobias Burnus + + PR fortran/35259 + * gfortran.dg/reassoc_5.f90: New test. + 2010-02-20 Uros Bizjak PR target/43067 diff --git a/gcc/testsuite/gfortran.dg/reassoc_5.f90 b/gcc/testsuite/gfortran.dg/reassoc_5.f90 new file mode 100644 index 0000000..8d3086a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/reassoc_5.f90 @@ -0,0 +1,19 @@ +! { dg-do compile } +! { dg-options "-O3 -ffast-math -fdump-tree-optimized -fno-protect-parens" } +! +! PR fortran/35259 +! Test for -fno-protect-parens +! +function test(b) + real a + a = (b + 5.) - 5. + test = a +end + +! Test copied from reassoc_1.f90 which checked for -fprotect-parens (default), +! and thus for the occurance of "5 - 5". +! +! We need an explicit +5 and -5, and an intermediate ((bla)) expression +! (the reassoc barrier). Make use of "." matching lineends. +! { dg-final { scan-tree-dump-times "\\\+ 5.*\\\)\\\).* - 5" 0 "optimized" } } +! { dg-final { cleanup-tree-dump "optimized" } } -- cgit v1.1