diff options
author | Richard Henderson <rth@redhat.com> | 2005-02-24 01:24:17 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2005-02-24 01:24:17 -0800 |
commit | c74636694956af8e2fe74bbeddf72891b9b5cfb1 (patch) | |
tree | 42cf31816d33415d61bb35885b0514d50dcdc5b0 | |
parent | d962e37d43ae054bc723d1940f77118eeb168ac3 (diff) | |
download | gcc-c74636694956af8e2fe74bbeddf72891b9b5cfb1.zip gcc-c74636694956af8e2fe74bbeddf72891b9b5cfb1.tar.gz gcc-c74636694956af8e2fe74bbeddf72891b9b5cfb1.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/c-opts.c | 5 | ||||
-rw-r--r-- | gcc/common.opt | 4 | ||||
-rw-r--r-- | gcc/doc/invoke.texi | 18 | ||||
-rw-r--r-- | gcc/opts.c | 1 | ||||
-rw-r--r-- | gcc/toplev.c | 6 |
6 files changed, 42 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 99c91c2..d154fe0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +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> * cse.c (delete_trivially_dead_insns): Speed up by using diff --git a/gcc/c-opts.c b/gcc/c-opts.c index 36c3f5b..575ff4d 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -978,6 +978,11 @@ c_common_post_options (const char **pfilename) if (warn_missing_format_attribute && !warn_format) 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) { /* Open the output now. We must do so even if flag_no_output is diff --git a/gcc/common.opt b/gcc/common.opt index 10d157e..f94643d 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -310,6 +310,10 @@ fcse-skip-blocks Common Report Var(flag_cse_skip_blocks) 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 Common Report Var(flag_data_sections) Place data items into their own section diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 6f13eca..8cf5ed9 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -285,8 +285,8 @@ Objective-C and Objective-C++ Dialects}. -fbounds-check -fmudflap -fmudflapth -fmudflapir @gol -fbranch-probabilities -fprofile-values -fvpt -fbranch-target-load-optimize @gol -fbranch-target-load-optimize2 -fbtr-bb-exclusive @gol --fcaller-saves -fcprop-registers @gol --fcse-follow-jumps -fcse-skip-blocks -fdata-sections @gol +-fcaller-saves -fcprop-registers -fcse-follow-jumps @gol +-fcse-follow-jumps -fcse-skip-blocks -fcx-limited-range -fdata-sections @gol -fdelayed-branch -fdelete-null-pointer-checks @gol -fexpensive-optimizations -ffast-math -ffloat-store @gol -fforce-addr -fforce-mem -ffunction-sections @gol @@ -5072,7 +5072,8 @@ them to store all pertinent intermediate computations into variables. @opindex ffast-math Sets @option{-fno-math-errno}, @option{-funsafe-math-optimizations}, @* @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. @@ -5176,6 +5177,17 @@ disable all GCC optimizations that affect signaling NaN behavior. Treat floating point constant as single precision constant instead of 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 @@ -1097,6 +1097,7 @@ set_fast_math_flags (int set) { flag_signaling_nans = 0; flag_rounding_math = 0; + flag_cx_limited_range = 1; } } diff --git a/gcc/toplev.c b/gcc/toplev.c index ae564f0..e7947eb 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -269,7 +269,7 @@ int flag_pcc_struct_return = DEFAULT_PCC_STRUCT_RETURN; 1 means wide ranges of inputs must work for complex 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, not just because the tree inliner turned us off. */ @@ -1948,6 +1948,10 @@ process_options (void) /* The presence of IEEE signaling NaNs, implies all math can trap. */ if (flag_signaling_nans) 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. */ |