summaryrefslogtreecommitdiff
path: root/gcc/graphite-scop-detection.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-02-06 11:18:33 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-02-06 11:18:33 +0000
commit124f4f57c463876ca5367834cfb7e36870cb39a1 (patch)
tree80c2564c887428fb97edbc5883ecd1644548ae39 /gcc/graphite-scop-detection.c
parentcfc30fd17588446c8c54c6e1e77dec2dc18ba0fb (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.c19
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);
}
}