aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSujoy Saraswati <sujoy.saraswati@hpe.com>2015-12-20 09:13:51 +0000
committerSujoy Saraswati <ssaraswati@gcc.gnu.org>2015-12-20 09:13:51 +0000
commit683aa9290bad382f137c9f205a91b3d8c78aecd6 (patch)
tree62f0bdc62d4027b4d465778be408d23f54f86398 /gcc
parente4dbb0d449e778bc810d0d627a5aaefd0d7847b1 (diff)
downloadgcc-683aa9290bad382f137c9f205a91b3d8c78aecd6.zip
gcc-683aa9290bad382f137c9f205a91b3d8c78aecd6.tar.gz
gcc-683aa9290bad382f137c9f205a91b3d8c78aecd6.tar.bz2
This series of patches are for fixing PR61441.
This series of patches are for fixing PR61441. This patch modifies code to use REAL_VALUE_ISSIGNALING_NAN instead of REAL_VALUE_ISNAN to avoid the operatins only for sNaN operands. Bootstrapped & regression-tested on x86_64-linux-gnu. gcc/ * fold-const.c (const_binop): Use REAL_VALUE_ISSIGNALING_NAN instead of REAL_VALUE_ISNAN to avoid the operation for sNaN operands. * simplify-rtx.c (simplify_const_binary_operation): Same. From-SVN: r231857
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/fold-const.c5
-rw-r--r--gcc/simplify-rtx.c3
3 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5baddef..b7a1469 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2015-12-20 Sujoy Saraswati <sujoy.saraswati@hpe.com>
+
+ PR tree-optimization/61441
+ * fold-const.c (const_binop): Use REAL_VALUE_ISSIGNALING_NAN instead
+ of REAL_VALUE_ISNAN to avoid the operation for sNaN operands.
+ * simplify-rtx.c (simplify_const_binary_operation): Same.
+
2015-12-19 Jan Hubicka <hubicka@ucw.cz>
PR middle-end/65337
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 553a9c3..fff0285 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -1150,9 +1150,10 @@ const_binop (enum tree_code code, tree arg1, tree arg2)
mode = TYPE_MODE (type);
/* Don't perform operation if we honor signaling NaNs and
- either operand is a NaN. */
+ either operand is a signaling NaN. */
if (HONOR_SNANS (mode)
- && (REAL_VALUE_ISNAN (d1) || REAL_VALUE_ISNAN (d2)))
+ && (REAL_VALUE_ISSIGNALING_NAN (d1)
+ || REAL_VALUE_ISSIGNALING_NAN (d2)))
return NULL_TREE;
/* Don't perform operation if it would raise a division
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index 413d61b..225742e 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -3892,7 +3892,8 @@ simplify_const_binary_operation (enum rtx_code code, machine_mode mode,
real_convert (&f1, mode, CONST_DOUBLE_REAL_VALUE (op1));
if (HONOR_SNANS (mode)
- && (REAL_VALUE_ISNAN (f0) || REAL_VALUE_ISNAN (f1)))
+ && (REAL_VALUE_ISSIGNALING_NAN (f0)
+ || REAL_VALUE_ISSIGNALING_NAN (f1)))
return 0;
if (code == DIV