* common.opt (excess_precision): Tag as SetByCombined.
* opts.c (set_fast_math_flags): Also set
flag_excess_precision_cmdline.
(fast_math_flags_set_p): Also check flag_excess_precision_cmdline.
* doc/invoke.texi (-fexcess-precision): Drop text saying the
option has no effect under -ffast-math, make it clear that
-ffast-math will cause -fexcess-precision=fast by default even for
standards compliant modes.
(-ffast-math): Document that this sets -fexcess-precision=fast.
From-SVN: r243824
+2016-12-20 James Greenhalgh <james.greenhalghj@arm.com>
+
+ * common.opt (excess_precision): Tag as SetByCombined.
+ * opts.c (set_fast_math_flags): Also set
+ flag_excess_precision_cmdline.
+ (fast_math_flags_set_p): Also check flag_excess_precision_cmdline.
+ * doc/invoke.texi (-fexcess-precision): Drop text saying the
+ option has no effect under -ffast-math, make it clear that
+ -ffast-math will cause -fexcess-precision=fast by default even for
+ standards compliant modes.
+ (-ffast-math): Document that this sets -fexcess-precision=fast.
+
2016-12-20 Richard Biener <rguenther@suse.de>
* passes.c (execute_one_pass): Handle going out of SSA w/o
Perform a number of minor, expensive optimizations.
fexcess-precision=
-Common Joined RejectNegative Enum(excess_precision) Var(flag_excess_precision_cmdline) Init(EXCESS_PRECISION_DEFAULT)
+Common Joined RejectNegative Enum(excess_precision) Var(flag_excess_precision_cmdline) Init(EXCESS_PRECISION_DEFAULT) SetByCombined
-fexcess-precision=[fast|standard] Specify handling of excess floating-point precision.
Enum
semantic types (whereas @option{-ffloat-store} only affects
assignments). This option is enabled by default for C if a strict
conformance option such as @option{-std=c99} is used.
+@option{-ffast-math} enables @option{-fexcess-precision=fast} by default
+regardless of whether a strict conformance option is used.
@opindex mfpmath
@option{-fexcess-precision=standard} is not implemented for languages
-other than C, and has no effect if
-@option{-funsafe-math-optimizations} or @option{-ffast-math} is
-specified. On the x86, it also has no effect if @option{-mfpmath=sse}
+other than C. On the x86, it has no effect if @option{-mfpmath=sse}
or @option{-mfpmath=sse+387} is specified; in the former case, IEEE
semantics apply without excess precision, and in the latter, rounding
is unpredictable.
@opindex ffast-math
Sets the options @option{-fno-math-errno}, @option{-funsafe-math-optimizations},
@option{-ffinite-math-only}, @option{-fno-rounding-math},
-@option{-fno-signaling-nans} and @option{-fcx-limited-range}.
+@option{-fno-signaling-nans}, @option{-fcx-limited-range} and
+@option{-fexcess-precision=fast}.
This option causes the preprocessor macro @code{__FAST_MATH__} to be defined.
opts->x_flag_errno_math = !set;
if (set)
{
+ if (opts->frontend_set_flag_excess_precision_cmdline
+ == EXCESS_PRECISION_DEFAULT)
+ opts->x_flag_excess_precision_cmdline
+ = set ? EXCESS_PRECISION_FAST : EXCESS_PRECISION_DEFAULT;
if (!opts->frontend_set_flag_signaling_nans)
opts->x_flag_signaling_nans = 0;
if (!opts->frontend_set_flag_rounding_math)
&& opts->x_flag_unsafe_math_optimizations
&& opts->x_flag_finite_math_only
&& !opts->x_flag_signed_zeros
- && !opts->x_flag_errno_math);
+ && !opts->x_flag_errno_math
+ && opts->x_flag_excess_precision_cmdline
+ == EXCESS_PRECISION_FAST);
}
/* Return true iff flags are set as if -ffast-math but using the flags stored