diff options
author | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-02-15 12:17:05 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-02-15 12:17:05 +0100 |
commit | 3eb1eecf29e1e28982b297e565ee291be8636532 (patch) | |
tree | eb1440321b077086e6d4ec1064117f8c5cbfc6d4 | |
parent | 8fa4bd81cb7cefa30212d79664963c1b6bbb9667 (diff) | |
download | gcc-3eb1eecf29e1e28982b297e565ee291be8636532.zip gcc-3eb1eecf29e1e28982b297e565ee291be8636532.tar.gz gcc-3eb1eecf29e1e28982b297e565ee291be8636532.tar.bz2 |
re PR tree-optimization/84334 (Stack overflow with -Ofast -frounding-math)
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
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/match.pd | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr84334.c | 12 |
4 files changed, 33 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7c30a1e..05b7710 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 @@ -2336,6 +2342,7 @@ * 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 diff --git a/gcc/match.pd b/gcc/match.pd index f759711..4452b58 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 431af1a..2ac6e7b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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. @@ -1558,6 +1564,7 @@ * 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. @@ -3617,7 +3624,7 @@ 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 index 0000000..8cfde69 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr84334.c @@ -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; +} |