diff options
author | Richard Biener <rguenther@suse.de> | 2017-10-02 07:32:52 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-10-02 07:32:52 +0000 |
commit | 0389d86c4e252df643f9c3539e5a114add56ec7f (patch) | |
tree | 83af0087c3c1be8a0a44f85b0ac7b545e5279af2 /gcc/graphite-scop-detection.c | |
parent | 623c6df543b5cb025815e6a79ded86f889f4a4b1 (diff) |
re PR tree-optimization/82355 (ICE in outermost_loop_in_sese, at sese.c:301)
2017-10-02 Richard Biener <rguenther@suse.de>
PR tree-optimization/82355
* graphite-isl-ast-to-gimple.c (build_iv_mapping): Also build
a mapping for the enclosing loop but avoid generating one for
the loop tree root.
(copy_bb_and_scalar_dependences): Remove premature codegen
error on PHIs in blocks duplicated into multiple places.
* graphite-scop-detection.c
(scop_detection::stmt_has_simple_data_refs_p): For a loop not
in the region use it as loop and nest to analyze the DR in.
(try_generate_gimple_bb): Likewise.
* graphite-sese-to-poly.c (extract_affine_chrec): Adjust.
(add_loop_constraints): For blocks in a loop not in the region
create a dimension with a single iteration.
* sese.h (gbb_loop_at_index): Remove assert.
* gcc.dg/graphite/fuse-1.c: Adjust.
* gcc.dg/graphite/fuse-2.c: Likewise.
* gcc.dg/graphite/pr82355.c: New testcase.
From-SVN: r253336
Diffstat (limited to 'gcc/graphite-scop-detection.c')
-rw-r--r-- | gcc/graphite-scop-detection.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index b374ee1a4e1..eed4efa3e05 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -1055,10 +1055,12 @@ scop_detection::graphite_can_represent_expr (sese_l scop, loop_p loop, bool scop_detection::stmt_has_simple_data_refs_p (sese_l scop, gimple *stmt) { - loop_p nest = outermost_loop_in_sese (scop, gimple_bb (stmt)); + loop_p nest; loop_p loop = loop_containing_stmt (stmt); if (!loop_in_sese_p (loop, scop)) - loop = nest; + nest = loop; + else + nest = outermost_loop_in_sese (scop, gimple_bb (stmt)); auto_vec<data_reference_p> drs; if (! graphite_find_data_references_in_stmt (nest, loop, stmt, &drs)) @@ -1450,11 +1452,12 @@ try_generate_gimple_bb (scop_p scop, basic_block bb) vec<scalar_use> reads = vNULL; sese_l region = scop->scop_info->region; - loop_p nest = outermost_loop_in_sese (region, bb); - + loop_p nest; loop_p loop = bb->loop_father; if (!loop_in_sese_p (loop, region)) - loop = nest; + nest = loop; + else + nest = outermost_loop_in_sese (region, bb); for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) |