I have tested the following patch to revert the fix for PR84204.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk and branch. Richard. 2018-10-18 Richard Biener <rguent...@suse.de> PR middle-end/87087 Revert 2018-02-07 Richard Biener <rguent...@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. Index: gcc/testsuite/gcc.dg/graphite/pr84204.c =================================================================== --- gcc/testsuite/gcc.dg/graphite/pr84204.c (revision 265234) +++ gcc/testsuite/gcc.dg/graphite/pr84204.c (working copy) @@ -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; Index: gcc/testsuite/gcc.dg/graphite/pr85935.c =================================================================== --- gcc/testsuite/gcc.dg/graphite/pr85935.c (revision 265234) +++ gcc/testsuite/gcc.dg/graphite/pr85935.c (working copy) @@ -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; Index: gcc/testsuite/gcc.dg/torture/pr87087.c =================================================================== --- gcc/testsuite/gcc.dg/torture/pr87087.c (nonexistent) +++ gcc/testsuite/gcc.dg/torture/pr87087.c (working copy) @@ -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; + } +} Index: gcc/tree-chrec.c =================================================================== --- gcc/tree-chrec.c (revision 265234) +++ gcc/tree-chrec.c (working copy) @@ -375,10 +375,12 @@ chrec_fold_plus_1 (enum tree_code code, 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), @@ -388,6 +390,8 @@ chrec_fold_plus_1 (enum tree_code code, fold_convert (type, op0), fold_convert (type, op1)); } + else + return chrec_dont_know; } } }