diff options
author | Richard Biener <rguenther@suse.de> | 2018-10-18 08:40:54 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-10-18 08:40:54 +0000 |
commit | de0edf87351456822f4961e15aaeda2c3d5dbc12 (patch) | |
tree | 2ae67bff1bcb8773f1c602f05e66383bac0ffded /gcc | |
parent | 294973a49751a7fc2d6a7a9f2749ce851a368c04 (diff) | |
download | gcc-de0edf87351456822f4961e15aaeda2c3d5dbc12.zip gcc-de0edf87351456822f4961e15aaeda2c3d5dbc12.tar.gz gcc-de0edf87351456822f4961e15aaeda2c3d5dbc12.tar.bz2 |
re PR tree-optimization/87087 (Optimization hangs up and consumes over 15Gb of memory)
2018-10-18 Richard Biener <rguenther@suse.de>
PR middle-end/87087
Revert
2018-02-07 Richard Biener <rguenther@suse.de>
PR tree-optimization/84204
* tree-chrec.c (chrec_fold_plus_1): Remove size limiting in
this place.
* gcc.dg/torture/pr87087.c: New testcase.
* gcc.dg/graphite/pr84204.c: XFAIL.
* gcc.dg/graphite/pr85935.c: Likewise.
From-SVN: r265261
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/pr84204.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/pr85935.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr87087.c | 25 | ||||
-rw-r--r-- | gcc/tree-chrec.c | 10 |
6 files changed, 53 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 41a1dd1..1177676 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2018-10-18 Richard Biener <rguenther@suse.de> + + PR middle-end/87087 + Revert + 2018-02-07 Richard Biener <rguenther@suse.de> + + PR tree-optimization/84204 + * tree-chrec.c (chrec_fold_plus_1): Remove size limiting in + this place. + 2018-10-18 H.J. Lu <hongjiu.lu@intel.com> PR target/87537 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5e1ad06..9cf4cbc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2018-10-18 Richard Biener <rguenther@suse.de> + + PR middle-end/87087 + * gcc.dg/torture/pr87087.c: New testcase. + * gcc.dg/graphite/pr84204.c: XFAIL. + * gcc.dg/graphite/pr85935.c: Likewise. + 2018-10-18 H.J. Lu <hongjiu.lu@intel.com> PR target/87537 diff --git a/gcc/testsuite/gcc.dg/graphite/pr84204.c b/gcc/testsuite/gcc.dg/graphite/pr84204.c index 91401df..9e2d39ed 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr84204.c +++ b/gcc/testsuite/gcc.dg/graphite/pr84204.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O -floop-parallelize-all -fno-tree-loop-im --param scev-max-expr-size=3" } */ +/* The fix for PR84204 was reverted. */ +/* { dg-additional-options "--param graphite-allow-codegen-errors=1" } */ int oc; diff --git a/gcc/testsuite/gcc.dg/graphite/pr85935.c b/gcc/testsuite/gcc.dg/graphite/pr85935.c index 8c63ea9..4c05f54 100644 --- a/gcc/testsuite/gcc.dg/graphite/pr85935.c +++ b/gcc/testsuite/gcc.dg/graphite/pr85935.c @@ -1,5 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O -floop-parallelize-all -fno-tree-loop-im --param scev-max-expr-size=3" } */ +/* The fix for PR84204 was reverted. */ +/* { dg-additional-options "--param graphite-allow-codegen-errors=1" } */ typedef int dq; diff --git a/gcc/testsuite/gcc.dg/torture/pr87087.c b/gcc/testsuite/gcc.dg/torture/pr87087.c new file mode 100644 index 0000000..2a07620 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr87087.c @@ -0,0 +1,25 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target int32plus } */ + +int b; +int d; +void e() +{ + unsigned f; + unsigned g; + int h; + long i = 901380; + for (;;) { + d = 0; + for (; d; d++) { + h = 143366620; + f = 0; + for (; f < 15; f += 3) { + g = 0; + for (; g < 9; g++) + b = h = i - (h << 5) + h; + } + } + i = 0; + } +} diff --git a/gcc/tree-chrec.c b/gcc/tree-chrec.c index 2717b40..a218327 100644 --- a/gcc/tree-chrec.c +++ b/gcc/tree-chrec.c @@ -328,10 +328,12 @@ chrec_fold_plus_1 (enum tree_code code, tree type, default: { - if (tree_contains_chrecs (op0, NULL) - || tree_contains_chrecs (op1, NULL)) + int size = 0; + if ((tree_contains_chrecs (op0, &size) + || tree_contains_chrecs (op1, &size)) + && size < PARAM_VALUE (PARAM_SCEV_MAX_EXPR_SIZE)) return build2 (code, type, op0, op1); - else + else if (size < PARAM_VALUE (PARAM_SCEV_MAX_EXPR_SIZE)) { if (code == POINTER_PLUS_EXPR) return fold_build_pointer_plus (fold_convert (type, op0), @@ -341,6 +343,8 @@ chrec_fold_plus_1 (enum tree_code code, tree type, fold_convert (type, op0), fold_convert (type, op1)); } + else + return chrec_dont_know; } } } |