diff options
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/fortran/gfortran.h | 1 | ||||
-rw-r--r-- | gcc/fortran/invoke.texi | 13 | ||||
-rw-r--r-- | gcc/fortran/lang.opt | 4 | ||||
-rw-r--r-- | gcc/fortran/options.c | 5 | ||||
-rw-r--r-- | gcc/fortran/trans-expr.c | 5 |
6 files changed, 34 insertions, 3 deletions
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 <burnus@net-b.de> + + 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 <pault@gcc.gnu.org> 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{<zero|inf|-inf|nan|snan>} @gol --finit-logical=@var{<true|false>} -finit-character=@var{n} -fno-align-commons} +-finit-logical=@var{<true|false>} -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))); |