Commit c7463669 by Richard Henderson Committed by Richard Henderson

re PR middle-end/18902 (Naive (default) complex division algorithm)

        PR middle-end/18902
        * c-opts.c (c_common_post_options): Set flag_complex_method to 2
        for c99.
        * common.opt (fcx-limited-range): New.
        * opts.c (set_fast_math_flags): Set flag_cx_limited_range.
        * toplev.c (flag_complex_method): Initialize to 1.
        (process_options): Set flag_complex_method to 0 if
        flag_cx_limited_range.
        * doc/invoke.texi (-fcx-limited-range): New.

From-SVN: r95493
parent d962e37d
2005-02-24 Richard Henderson <rth@redhat.com>
PR middle-end/18902
* c-opts.c (c_common_post_options): Set flag_complex_method to 2
for c99.
* common.opt (fcx-limited-range): New.
* opts.c (set_fast_math_flags): Set flag_cx_limited_range.
* toplev.c (flag_complex_method): Initialize to 1.
(process_options): Set flag_complex_method to 0 if
flag_cx_limited_range.
* doc/invoke.texi (-fcx-limited-range): New.
2005-02-24 Kazu Hirata <kazu@cs.umass.edu> 2005-02-24 Kazu Hirata <kazu@cs.umass.edu>
* cse.c (delete_trivially_dead_insns): Speed up by using * cse.c (delete_trivially_dead_insns): Speed up by using
......
...@@ -978,6 +978,11 @@ c_common_post_options (const char **pfilename) ...@@ -978,6 +978,11 @@ c_common_post_options (const char **pfilename)
if (warn_missing_format_attribute && !warn_format) if (warn_missing_format_attribute && !warn_format)
warning ("-Wmissing-format-attribute ignored without -Wformat"); warning ("-Wmissing-format-attribute ignored without -Wformat");
/* C99 requires special handling of complex multiplication and division;
-ffast-math and -fcx-limited-range are handled in process_options. */
if (flag_isoc99)
flag_complex_method = 2;
if (flag_preprocess_only) if (flag_preprocess_only)
{ {
/* Open the output now. We must do so even if flag_no_output is /* Open the output now. We must do so even if flag_no_output is
......
...@@ -310,6 +310,10 @@ fcse-skip-blocks ...@@ -310,6 +310,10 @@ fcse-skip-blocks
Common Report Var(flag_cse_skip_blocks) Common Report Var(flag_cse_skip_blocks)
When running CSE, follow conditional jumps When running CSE, follow conditional jumps
fcx-limited-range
Common Report Var(flag_cx_limited_range)
Omit range reduction step when performing complex division
fdata-sections fdata-sections
Common Report Var(flag_data_sections) Common Report Var(flag_data_sections)
Place data items into their own section Place data items into their own section
......
...@@ -285,8 +285,8 @@ Objective-C and Objective-C++ Dialects}. ...@@ -285,8 +285,8 @@ Objective-C and Objective-C++ Dialects}.
-fbounds-check -fmudflap -fmudflapth -fmudflapir @gol -fbounds-check -fmudflap -fmudflapth -fmudflapir @gol
-fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol
-fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol -fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol
-fcaller-saves -fcprop-registers @gol -fcaller-saves -fcprop-registers -fcse-follow-jumps @gol
-fcse-follow-jumps -fcse-skip-blocks -fdata-sections @gol -fcse-follow-jumps -fcse-skip-blocks -fcx-limited-range -fdata-sections @gol
-fdelayed-branch -fdelete-null-pointer-checks @gol -fdelayed-branch -fdelete-null-pointer-checks @gol
-fexpensive-optimizations -ffast-math -ffloat-store @gol -fexpensive-optimizations -ffast-math -ffloat-store @gol
-fforce-addr -fforce-mem -ffunction-sections @gol -fforce-addr -fforce-mem -ffunction-sections @gol
...@@ -5072,7 +5072,8 @@ them to store all pertinent intermediate computations into variables. ...@@ -5072,7 +5072,8 @@ them to store all pertinent intermediate computations into variables.
@opindex ffast-math @opindex ffast-math
Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @* Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @*
@option{-fno-trapping-math}, @option{-ffinite-math-only}, @option{-fno-trapping-math}, @option{-ffinite-math-only},
@option{-fno-rounding-math} and @option{-fno-signaling-nans}. @option{-fno-rounding-math}, @option{-fno-signaling-nans}
and @option{fcx-limited-range}.
This option causes the preprocessor macro @code{__FAST_MATH__} to be defined. This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
...@@ -5176,6 +5177,17 @@ disable all GCC optimizations that affect signaling NaN behavior. ...@@ -5176,6 +5177,17 @@ disable all GCC optimizations that affect signaling NaN behavior.
Treat floating point constant as single precision constant instead of Treat floating point constant as single precision constant instead of
implicitly converting it to double precision constant. implicitly converting it to double precision constant.
@item -fcx-limited-range
@itemx -fno-cx-limited-range
@opindex fcx-limited-range
@opindex fno-cx-limited-range
When enabled, this option states that a range reduction step is not
needed when performing complex division. The default is
@option{-fno-cx-limited-range}, but is enabled by @option{-ffast-math}.
This option controls the default setting of the ISO C99
@code{CX_LIMITED_RANGE} pragma. Nevertheless, the option applies to
all languages.
@end table @end table
......
...@@ -1097,6 +1097,7 @@ set_fast_math_flags (int set) ...@@ -1097,6 +1097,7 @@ set_fast_math_flags (int set)
{ {
flag_signaling_nans = 0; flag_signaling_nans = 0;
flag_rounding_math = 0; flag_rounding_math = 0;
flag_cx_limited_range = 1;
} }
} }
......
...@@ -269,7 +269,7 @@ int flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN; ...@@ -269,7 +269,7 @@ int flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN;
1 means wide ranges of inputs must work for complex divide. 1 means wide ranges of inputs must work for complex divide.
2 means C99-like requirements for complex multiply and divide. */ 2 means C99-like requirements for complex multiply and divide. */
int flag_complex_method = 0; int flag_complex_method = 1;
/* Nonzero means that we don't want inlining by virtue of -fno-inline, /* Nonzero means that we don't want inlining by virtue of -fno-inline,
not just because the tree inliner turned us off. */ not just because the tree inliner turned us off. */
...@@ -1948,6 +1948,10 @@ process_options (void) ...@@ -1948,6 +1948,10 @@ process_options (void)
/* The presence of IEEE signaling NaNs, implies all math can trap. */ /* The presence of IEEE signaling NaNs, implies all math can trap. */
if (flag_signaling_nans) if (flag_signaling_nans)
flag_trapping_math = 1; flag_trapping_math = 1;
/* With -fcx-limited-range, we do cheap and quick complex arithmetic. */
if (flag_cx_limited_range)
flag_complex_method = 0;
} }
/* Initialize the compiler back end. */ /* Initialize the compiler back end. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment