diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 67b5df424b33..ed26c14f5023 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-03-21 Marc Glisse + Jakub Jelinek + + PR tree-optimization/70317 + * match.pd (cmp @0 @0): Pass @0 instead of TYPE_MODE (TREE_TYPE (@0)) + to HONOR_NANS. + 2016-03-21 Uros Bizjak PR target/70327 diff --git a/gcc/match.pd b/gcc/match.pd index 7245ff4bb2fa..ddb4b8a78859 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -1866,7 +1866,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (simplify (cmp @0 @0) (if (! FLOAT_TYPE_P (TREE_TYPE (@0)) - || ! HONOR_NANS (TYPE_MODE (TREE_TYPE (@0)))) + || ! HONOR_NANS (@0)) { constant_boolean_node (true, type); } (if (cmp != EQ_EXPR) (eq @0 @0))))) @@ -1875,7 +1875,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) (cmp @0 @0) (if (cmp != NE_EXPR || ! FLOAT_TYPE_P (TREE_TYPE (@0)) - || ! HONOR_NANS (TYPE_MODE (TREE_TYPE (@0)))) + || ! HONOR_NANS (@0)) { constant_boolean_node (false, type); }))) (for cmp (unle unge uneq) (simplify diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d91d999df76f..6e0ab0bc1249 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-03-21 Marc Glisse + Jakub Jelinek + + PR tree-optimization/70317 + * gcc.dg/pr70317.c: New test. + 2016-03-21 Uros Bizjak PR target/70327 diff --git a/gcc/testsuite/gcc.dg/pr70317.c b/gcc/testsuite/gcc.dg/pr70317.c new file mode 100644 index 000000000000..8f0864b76e09 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr70317.c @@ -0,0 +1,26 @@ +/* PR tree-optimization/70317 */ +/* { dg-do compile } */ +/* { dg-skip-if "No NaN support" { spu*-*-* vax*-*-* pdp11*-*-* } } */ +/* { dg-options "-O2 -fdump-tree-optimized" } */ + +typedef double V __attribute__((vector_size (256))); +typedef __typeof ((V) {} < (V) {}) T; +T a, b; + +__attribute__((noinline, noclone, optimize ("finite-math-only"))) void +foo (V *x) +{ + V z = *x; + a = z <= z; +} + +/* { dg-final { scan-tree-dump "a\[^\n\r]*= . -1, -1," "optimized" } } */ + +__attribute__((noinline, noclone, optimize ("no-finite-math-only"))) void +bar (V *x) +{ + V z = *x; + b = z <= z; +} + +/* { dg-final { scan-tree-dump-not "b\[^\n\r]*= . -1, -1," "optimized" } } */