This patch uses REAL_VALUE_ISSIGNALING_NAN instead of REAL_VALUE_ISNAN to avoid the operation for sNaN.
Regards, Sujoy 2015-11-26 Sujoy Saraswati <sujoy.sarasw...@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. * simplify-rtx.c (simplify_const_binary_operation) Same. Index: gcc/fold-const.c =================================================================== --- gcc/fold-const.c (revision 230851) +++ gcc/fold-const.c (working copy) @@ -1150,9 +1150,10 @@ const_binop (enum tree_code code, tree arg1, tree 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 Index: gcc/simplify-rtx.c =================================================================== --- gcc/simplify-rtx.c (revision 230851) +++ gcc/simplify-rtx.c (working copy) @@ -3892,7 +3892,8 @@ simplify_const_binary_operation (enum rtx_code cod 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