The following fixes an ICE that happens because instantiate_scev doesn't really work as expected for SESE regions (a FIXME comment hints at this already). So instead of asserting all goes well just bail out (add_loop_constraints seems to add constraints not required for correctness?).
Bootstrap & regtest in progress (though the patch can at most turn an ICE into wrong-code). This fixes build of 445.gobmk with -floop-nest-optimize. Ok? Thanks, Richard 2017-01-31 Richard Biener <rguent...@suse.de> PR tree-optimization/71824 * graphite-sese-to-poly.c (add_loop_constraints): Bail out instead of asserting. * gcc.dg/graphite/pr71824.c: New testcase. Index: gcc/graphite-sese-to-poly.c =================================================================== --- gcc/graphite-sese-to-poly.c (revision 245058) +++ gcc/graphite-sese-to-poly.c (working copy) @@ -930,7 +931,11 @@ add_loop_constraints (scop_p scop, __isl /* loop_i <= expr_nb_iters */ gcc_assert (!chrec_contains_undetermined (nb_iters)); nb_iters = scalar_evolution_in_region (region, loop, nb_iters); - gcc_assert (!chrec_contains_undetermined (nb_iters)); + if (chrec_contains_undetermined (nb_iters)) + { + isl_space_free (space); + return domain; + } isl_pw_aff *aff_nb_iters = extract_affine (scop, nb_iters, isl_space_copy (space)); Index: gcc/testsuite/gcc.dg/graphite/pr71824.c =================================================================== --- gcc/testsuite/gcc.dg/graphite/pr71824.c (nonexistent) +++ gcc/testsuite/gcc.dg/graphite/pr71824.c (working copy) @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -floop-nest-optimize" } */ + +int a, b, d; +int **c; +int fn1() { + while (a) + if (d) { + int e = -d; + for (; b < e; b++) + c[b] = &a; + } else { + for (; b; b++) + c[b] = &b; + d = 0; + } +}