re PR middle-end/19405 (18_support/numeric_limits.cc fails on ppc-darwin (long doubles))

PR middle-end/19405
	* real.h (REAL_MODE_FORMAT_COMPOSITE_P): New macro.
	* fold-const.c (const_binop): Avoid constant folding floating
	point operations in modes that use composite representations.
	* simplify-rtx.c (simplify_binary_operation): Likewise.

From-SVN: r94653
This commit is contained in:
Roger Sayle 2005-02-03 06:44:35 +00:00 committed by Roger Sayle
parent 666158b9ce
commit 762297d941
4 changed files with 25 additions and 4 deletions

View File

@ -1,3 +1,11 @@
2005-02-02 Roger Sayle <roger@eyesopen.com>
PR middle-end/19405
* real.h (REAL_MODE_FORMAT_COMPOSITE_P): New macro.
* fold-const.c (const_binop): Avoid constant folding floating
point operations in modes that use composite representations.
* simplify-rtx.c (simplify_binary_operation): Likewise.
2005-02-02 Geoffrey Keating <geoffk@apple.com>
* config/rs6000/altivec.md (altivec_dst): Make the first operand

View File

@ -1517,9 +1517,12 @@ const_binop (enum tree_code code, tree arg1, tree arg2, int notrunc)
/* Don't constant fold this floating point operation if the
result may dependent upon the run-time rounding mode and
flag_rounding_math is set. */
flag_rounding_math is set, or if GCC's software emulation
is unable to accurately represent the result. */
if (flag_rounding_math
if ((flag_rounding_math
|| (REAL_MODE_FORMAT_COMPOSITE_P (mode)
&& !flag_unsafe_math_optimizations))
&& (inexact || !real_identical (&result, &value)))
return NULL_TREE;

View File

@ -157,6 +157,12 @@ extern const struct real_format *
#define REAL_MODE_FORMAT(MODE) (real_format_for_mode[(MODE) - MIN_MODE_FLOAT])
/* The following macro determines whether the floating point format is
composite, i.e. may contain non-consecutive mantissa bits, in which
case compile-time FP overflow may not model run-time overflow. */
#define REAL_MODE_FORMAT_COMPOSITE_P(MODE) \
((REAL_MODE_FORMAT(MODE))->pnan < (REAL_MODE_FORMAT (MODE))->p)
/* Declare functions in real.c. */
/* Binary or unary arithmetic on tree_code. */

View File

@ -1346,8 +1346,12 @@ simplify_binary_operation (enum rtx_code code, enum machine_mode mode,
/* Don't constant fold this floating point operation if the
result may dependent upon the run-time rounding mode and
flag_rounding_math is set. */
if (flag_rounding_math
flag_rounding_math is set, or if GCC's software emulation
is unable to accurately represent the result. */
if ((flag_rounding_math
|| (REAL_MODE_FORMAT_COMPOSITE_P (mode)
&& !flag_unsafe_math_optimizations))
&& (inexact || !real_identical (&result, &value)))
return NULL_RTX;