diff options
author | Roger Sayle <roger@eyesopen.com> | 2005-02-03 06:44:35 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2005-02-03 06:44:35 +0000 |
commit | 762297d941e94600c6b81d5ccdd464872d9a9692 (patch) | |
tree | fb250b8935df7ba966a9aeae4f38b4eca4fc2969 /gcc/fold-const.c | |
parent | 666158b9cecdc55cc2f2cf0c77f571220b5a10c3 (diff) | |
download | gcc-762297d941e94600c6b81d5ccdd464872d9a9692.zip gcc-762297d941e94600c6b81d5ccdd464872d9a9692.tar.gz gcc-762297d941e94600c6b81d5ccdd464872d9a9692.tar.bz2 |
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
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 2285742..1d2efbd 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -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; |