re PR tree-optimization/84334 (Stack overflow with -Ofast -frounding-math)
authorJakub Jelinek <jakub@gcc.gnu.org>
Thu, 15 Feb 2018 11:17:05 +0000 (12:17 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 15 Feb 2018 11:17:05 +0000 (12:17 +0100)
PR tree-optimization/84334
* match.pd ((A +- CST1) +- CST2 -> A + CST3): If A is
also a CONSTANT_CLASS_P, punt.

* gcc.dg/pr84334.c: New test.

From-SVN: r257683

gcc/ChangeLog
gcc/match.pd
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr84334.c [new file with mode: 0644]

index 7c30a1ed0db63a761b0805d9247b5c4dd0532638..05b77100138a1242b88c9c1273ccc0252cbbdbb7 100644 (file)
@@ -1,3 +1,9 @@
+2018-02-15  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/84334
+       * match.pd ((A +- CST1) +- CST2 -> A + CST3): If A is
+       also a CONSTANT_CLASS_P, punt.
+
 2018-02-14  Jim Wilson  <jimw@sifive.com>
 
        * config/riscv/riscv.c (riscv_first_stack_step): Move locals after
        * config/aarch64/predicates.md (Uti): Add new constraint.
 
 2018-01-17 Carl Love  <cel@us.ibm.com>
+
        * config/rs6000/vsx.md (define_expand xl_len_r,
        define_expand stxvl, define_expand *stxvl): Add match_dup argument.
        (define_insn): Add, match_dup 1 argument to define_insn stxvll and
index f7597110c4bbd2fe4cd0b0e45dae8d83284750fb..4452b58caed55bff196ad43d1169cba4159de260 100644 (file)
@@ -1733,9 +1733,12 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
               CONSTANT_CLASS_P@2)
      /* If one of the types wraps, use that one.  */
      (if (!ANY_INTEGRAL_TYPE_P (type) || TYPE_OVERFLOW_WRAPS (type))
-      (if (outer_op == PLUS_EXPR)
-       (plus (view_convert @0) (inner_op @2 (view_convert @1)))
-       (minus (view_convert @0) (neg_inner_op @2 (view_convert @1))))
+      /* If all 3 captures are CONSTANT_CLASS_P, punt, as we might recurse
+        forever if something doesn't simplify into a constant.  */
+      (if (!CONSTANT_CLASS_P (@0))
+       (if (outer_op == PLUS_EXPR)
+       (plus (view_convert @0) (inner_op @2 (view_convert @1)))
+       (minus (view_convert @0) (neg_inner_op @2 (view_convert @1)))))
       (if (!ANY_INTEGRAL_TYPE_P (TREE_TYPE (@0))
           || TYPE_OVERFLOW_WRAPS (TREE_TYPE (@0)))
        (if (outer_op == PLUS_EXPR)
index 431af1a900845be323c986af57962171c40a52b9..2ac6e7b0dfa5665d8a880f4786a3b11fa8319e7f 100644 (file)
@@ -1,4 +1,10 @@
+2018-02-15  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/84334
+       * gcc.dg/pr84334.c: New test.
+
 2018-02-14  Carl Love  <cel@us.ibm.com>
+
         * gcc.target/powerpc/builtins-4-int128-runnable.c
        (dg-require-effective-target): Change vsx_hw to p8vector_hw.
        (dg-options): Change -maltivec -mvsx to -mpower8-vector.
        * gcc.target/powerpc/pr83862.c: New test.
 
 2018-01-22  Carl Love  <cel@us.ibm.com>
+
        * gcc.target/powerpc/powerpc.exp: Add torture tests for
        builtins-4-runnable.c, builtins-6-runnable.c,
        builtins-5-p9-runnable.c, builtins-6-p9-runnable.c.
        PR c++/83734
        * g++.dg/cpp0x/pr83734.C: New test.
 
-2018-01-09 Carl Love  <cel@us.ibm.com>
+2018-01-09  Carl Love  <cel@us.ibm.com>
 
        * gcc.target/powerpc/builtins-1.c (main): Add tests for vec_mergee and
        vec_mergeo builtins with float, double, long long, unsigned long long,
diff --git a/gcc/testsuite/gcc.dg/pr84334.c b/gcc/testsuite/gcc.dg/pr84334.c
new file mode 100644 (file)
index 0000000..8cfde69
--- /dev/null
@@ -0,0 +1,12 @@
+/* PR tree-optimization/84334 */
+/* { dg-do compile } */
+/* { dg-options "-Ofast -frounding-math" } */
+
+float
+foo (void)
+{
+  float a = 9.999999974752427078783512115478515625e-7f;
+  float b = 1.999999994950485415756702423095703125e-6f;
+  float c = 4.999999873689375817775726318359375e-6f;
+  return a + b + c;
+}