diff options
author | Richard Biener <rguenther@suse.de> | 2019-02-06 11:18:33 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-02-06 11:18:33 +0000 |
commit | 124f4f57c463876ca5367834cfb7e36870cb39a1 (patch) | |
tree | 80c2564c887428fb97edbc5883ecd1644548ae39 /gcc/graphite-scop-detection.c | |
parent | cfc30fd17588446c8c54c6e1e77dec2dc18ba0fb (diff) |
re PR tree-optimization/89182 ([graphite] ICE in extract_affine, at graphite-sese-to-poly.c:280)
2019-02-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/89182
* graphite.h (cached_scalar_evolution_in_region): Declare.
* graphite.c (struct seir_cache_key): New.
(struct sese_scev_hash): Likewise.
(seir_cache): New global.
(cached_scalar_evolution_in_region): New function.
(graphite_transform_loops): Allocate and release seir_cache.
* graphite-isl-ast-to-gimple.c (get_rename_from_scev): Use
cached_scalar_evolution_in_region.
* graphite-scop-detection.c (scop_detection::can_represent_loop):
Simplify.
(scop_detection::graphite_can_represent_expr: Use
cached_scalar_evolution_in_region.
(scop_detection::stmt_simple_for_scop_p): Likewise.
(find_params_in_bb): Likewise.
(gather_bbs::before_dom_children): Likewise.
* graphite-sese-to-poly.c (create_pw_aff_from_tree): Likewise.
(add_loop_constraints): Likewise.
* gfortran.dg/graphite/pr89182.f90: New testcase.
From-SVN: r268575
Diffstat (limited to 'gcc/graphite-scop-detection.c')
-rw-r--r-- | gcc/graphite-scop-detection.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index 7e8d42cab0d..45f459a3b78 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -568,8 +568,6 @@ scop_detection::can_represent_loop (loop_p loop, sese_l scop) && niter_desc.control.no_overflow && (niter = number_of_latch_executions (loop)) && !chrec_contains_undetermined (niter) - && !chrec_contains_undetermined (scalar_evolution_in_region (scop, - loop, niter)) && graphite_can_represent_expr (scop, loop, niter); } @@ -924,7 +922,7 @@ bool scop_detection::graphite_can_represent_expr (sese_l scop, loop_p loop, tree expr) { - tree scev = scalar_evolution_in_region (scop, loop, expr); + tree scev = cached_scalar_evolution_in_region (scop, loop, expr); return graphite_can_represent_scev (scop, scev); } @@ -1061,7 +1059,8 @@ scop_detection::stmt_simple_for_scop_p (sese_l scop, gimple *stmt, FOR_EACH_SSA_TREE_OPERAND (op, stmt, i, SSA_OP_USE) if (scev_analyzable_p (op, scop) && chrec_contains_undetermined - (scalar_evolution_in_region (scop, bb->loop_father, op))) + (cached_scalar_evolution_in_region (scop, + bb->loop_father, op))) { DEBUG_PRINT (dp << "[scop-detection-fail] " << "Graphite cannot code-gen stmt:\n"; @@ -1190,10 +1189,10 @@ find_params_in_bb (sese_info_p region, gimple_poly_bb_p gbb) FOR_EACH_VEC_ELT (GBB_CONDITIONS (gbb), i, stmt) { loop_p loop = gimple_bb (stmt)->loop_father; - tree lhs = scalar_evolution_in_region (region->region, loop, - gimple_cond_lhs (stmt)); - tree rhs = scalar_evolution_in_region (region->region, loop, - gimple_cond_rhs (stmt)); + tree lhs = cached_scalar_evolution_in_region (region->region, loop, + gimple_cond_lhs (stmt)); + tree rhs = cached_scalar_evolution_in_region (region->region, loop, + gimple_cond_rhs (stmt)); gcc_assert (!chrec_contains_undetermined (lhs) && !chrec_contains_undetermined (rhs)); @@ -1492,8 +1491,8 @@ gather_bbs::before_dom_children (basic_block bb) tree nb_iters = number_of_latch_executions (loop); if (chrec_contains_symbols (nb_iters)) { - nb_iters = scalar_evolution_in_region (region->region, - loop, nb_iters); + nb_iters = cached_scalar_evolution_in_region (region->region, + loop, nb_iters); scan_tree_for_params (region, nb_iters); } } |