diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/common.opt | 4 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 11 | ||||
-rw-r--r-- | gcc/toplev.c | 4 |
3 files changed, 18 insertions, 1 deletions
diff --git a/gcc/common.opt b/gcc/common.opt index 3a64d2a..670466b 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -405,6 +405,10 @@ fcx-limited-range Common Report Var(flag_cx_limited_range) Optimization Omit range reduction step when performing complex division +fcx-fortran-rules +Common Report Var(flag_cx_fortran_rules) Optimization +Complex multiplication and division follow Fortran rules + fdata-sections Common Report Var(flag_data_sections) Optimization Place data items into their own section diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index ab0bc2b..693f30d 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -321,7 +321,7 @@ Objective-C and Objective-C++ Dialects}. -fauto-inc-dec -fbranch-probabilities -fbranch-target-load-optimize @gol -fbranch-target-load-optimize2 -fbtr-bb-exclusive -fcaller-saves @gol -fcheck-data-deps -fcprop-registers -fcrossjumping -fcse-follow-jumps @gol --fcse-skip-blocks -fcx-limited-range @gol +-fcse-skip-blocks -fcx-fortran-rules -fcx-limited-range @gol -fdata-sections -fdce -fdce @gol -fdelayed-branch -fdelete-null-pointer-checks -fdse -fdse @gol -fearly-inlining -fexpensive-optimizations -ffast-math @gol @@ -6557,6 +6557,15 @@ This option controls the default setting of the ISO C99 @code{CX_LIMITED_RANGE} pragma. Nevertheless, the option applies to all languages. +@item -fcx-fortran-rules +@opindex fcx-fortran-rules +Complex multiplication and division follow Fortran rules. Range +reduction is done as part of complex division, but there is no checking +whether the result of a complex multiplication or division is @code{NaN ++ I*NaN}, with an attempt to rescue the situation in that case. + +The default is @option{-fno-cx-fortran-rules}. + @end table The following options control optimizations that may improve diff --git a/gcc/toplev.c b/gcc/toplev.c index 512e0fb..7a6be49 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -2001,6 +2001,10 @@ process_options (void) if (flag_cx_limited_range) flag_complex_method = 0; + /* With -fcx-fortran-rules, we do something in-between cheap and C99. */ + if (flag_cx_fortran_rules) + flag_complex_method = 1; + /* Targets must be able to place spill slots at lower addresses. If the target already uses a soft frame pointer, the transition is trivial. */ if (!FRAME_GROWS_DOWNWARD && flag_stack_protect) |