[PATCH] Fix PR61441 introduced regression (PR tree-optimization/69070)
Richard Biener
rguenther@suse.de
Fri Jan 1 10:39:00 GMT 2016
On December 31, 2015 10:29:19 AM GMT+01:00, Jakub Jelinek <jakub@redhat.com> wrote:
>Hi!
>
>The PR61441 change added REAL_VALUE_ISSIGNALING_NAN checks for both
>operands, but only arg1 is guaranteed to be a REAL_CST at this point.
>If arg0 is not a REAL_CST, I think we can allow all the opts the
>function
>does, as all transformations replace the pow with some other expression
>that uses the argument some way (sqrt, cbrt, cbrt of sqrt,
>multiplication by
>itself, ...), so sNaN exteptions should be preserved.
>
>Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
OK.
Richard.
>2015-12-31 Jakub Jelinek <jakub@redhat.com>
>
> PR tree-optimization/69070
> * tree-ssa-math-opts.c (gimple_expand_builtin_pow): Only test
> REAL_VALUE_ISSIGNALING_NAN on arg0 if arg0 is a REAL_CST.
>
> * gcc.dg/pr69070.c: New test.
>
>--- gcc/tree-ssa-math-opts.c.jj 2015-12-22 19:18:51.000000000 +0100
>+++ gcc/tree-ssa-math-opts.c 2015-12-29 14:15:49.587126962 +0100
>@@ -1538,7 +1538,8 @@ gimple_expand_builtin_pow (gimple_stmt_i
> /* Don't perform the operation if flag_signaling_nans is on
> and the operand is a signaling NaN. */
> if (HONOR_SNANS (TYPE_MODE (TREE_TYPE (arg1)))
>- && (REAL_VALUE_ISSIGNALING_NAN (TREE_REAL_CST (arg0))
>+ && ((TREE_CODE (arg0) == REAL_CST
>+ && REAL_VALUE_ISSIGNALING_NAN (TREE_REAL_CST (arg0)))
> || REAL_VALUE_ISSIGNALING_NAN (TREE_REAL_CST (arg1))))
> return NULL_TREE;
>
>--- gcc/testsuite/gcc.dg/pr69070.c.jj 2015-12-29 14:22:38.313434143
>+0100
>+++ gcc/testsuite/gcc.dg/pr69070.c 2015-12-29 14:22:24.000000000 +0100
>@@ -0,0 +1,9 @@
>+/* PR tree-optimization/69070 */
>+/* { dg-do compile } */
>+/* { dg-options "-O2 -fsignaling-nans" } */
>+
>+double
>+foo (double d)
>+{
>+ return __builtin_pow (d, 2);
>+}
>
> Jakub
More information about the Gcc-patches
mailing list