re PR fortran/29549 (matmul slow for complex matrices)

2008-02-25  Janne Blomqvist  <jb@gcc.gnu.org>

	PR fortran/29549
	* doc/invoke.texi (-fcx-limited-range): Document new option.
	* toplev.c (process_options): Handle -fcx-fortran-rules.
        * common.opt: Add documentation for -fcx-fortran-rules.

From-SVN: r132636
This commit is contained in:
Janne Blomqvist 2008-02-25 21:20:48 +02:00
parent 8cc6d3e030
commit 35085f7688
3 changed files with 18 additions and 1 deletions

View file

@ -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

View file

@ -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

View file

@ -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)