From 99124c31f9afaa8e713f3e1335d8e53c2ee61bc1 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Wed, 27 Sep 2017 13:06:34 +0000 Subject: [PATCH] graphite.h (scop::max_alias_set): New member. 2017-09-27 Richard Biener * graphite.h (scop::max_alias_set): New member. * graphite-scop-detection.c: Remove references to non-existing --param in comments. (build_alias_sets): Record the maximum alias set used for drs. (build_scops): Support zero as unlimited for --param graphite-max-arrays-per-scop. * graphite-sese-to-poly.c (add_scalar_version_numbers): Remove and inline into ... (build_poly_sr_1): ... here. Compute alias set based on the maximum alias set used for drs rather than PARAM_GRAPHITE_MAX_ARRAYS_PER_SCOP From-SVN: r253229 --- gcc/ChangeLog | 14 ++++++++++++++ gcc/graphite-scop-detection.c | 16 ++++++---------- gcc/graphite-sese-to-poly.c | 35 ++++++++++++----------------------- gcc/graphite.h | 3 +++ 4 files changed, 35 insertions(+), 33 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6e7b5e3a8c0..d35c497b888 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2017-09-27 Richard Biener + + * graphite.h (scop::max_alias_set): New member. + * graphite-scop-detection.c: Remove references to non-existing + --param in comments. + (build_alias_sets): Record the maximum alias set used for drs. + (build_scops): Support zero as unlimited for + --param graphite-max-arrays-per-scop. + * graphite-sese-to-poly.c (add_scalar_version_numbers): Remove + and inline into ... + (build_poly_sr_1): ... here. Compute alias set based on the + maximum alias set used for drs rather than + PARAM_GRAPHITE_MAX_ARRAYS_PER_SCOP + 2017-09-27 Richard Biener * graphite-optimize-isl.c (get_schedule_for_node_st): Allow diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index 3b1492fbfa8..351e944e9c8 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -389,10 +389,7 @@ public: void remove_intersecting_scops (sese_l s1); - /* Return true when a statement in SCOP cannot be represented by Graphite. - The assumptions are that L1 dominates L2, and SCOP->entry dominates L1. - Limit the number of bbs between adjacent loops to - PARAM_SCOP_MAX_NUM_BBS_BETWEEN_LOOPS. */ + /* Return true when a statement in SCOP cannot be represented by Graphite. */ bool harmful_loop_in_region (sese_l scop) const; @@ -760,10 +757,7 @@ scop_detection::add_scop (sese_l s) DEBUG_PRINT (dp << "[scop-detection] Adding SCoP: "; print_sese (dump_file, s)); } -/* Return true when a statement in SCOP cannot be represented by Graphite. - The assumptions are that L1 dominates L2, and SCOP->entry dominates L1. - Limit the number of bbs between adjacent loops to - PARAM_SCOP_MAX_NUM_BBS_BETWEEN_LOOPS. */ +/* Return true when a statement in SCOP cannot be represented by Graphite. */ bool scop_detection::harmful_loop_in_region (sese_l scop) const @@ -1531,7 +1525,8 @@ build_alias_set (scop_p scop) for (i = 0; i < num_vertices; i++) all_vertices[i] = i; - graphds_dfs (g, all_vertices, num_vertices, NULL, true, NULL); + scop->max_alias_set + = graphds_dfs (g, all_vertices, num_vertices, NULL, true, NULL) + 1; free (all_vertices); for (i = 0; i < g->n_vertices; i++) @@ -1755,7 +1750,8 @@ build_scops (vec *scops) } unsigned max_arrays = PARAM_VALUE (PARAM_GRAPHITE_MAX_ARRAYS_PER_SCOP); - if (scop->drs.length () >= max_arrays) + if (max_arrays > 0 + && scop->drs.length () >= max_arrays) { DEBUG_PRINT (dp << "[scop-detection-fail] too many data references: " << scop->drs.length () diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index fc8cd89239c..087a44a891d 100644 --- a/gcc/graphite-sese-to-poly.c +++ b/gcc/graphite-sese-to-poly.c @@ -491,25 +491,6 @@ pdr_add_alias_set (isl_map *acc, dr_info &dri) return isl_map_add_constraint (acc, c); } -/* Add a constrain to the ACCESSES polyhedron for the alias set of - data reference DR. ACCESSP_NB_DIMS is the dimension of the - ACCESSES polyhedron, DOM_NB_DIMS is the dimension of the iteration - domain. */ - -static isl_map * -add_scalar_version_numbers (isl_map *acc, tree var) -{ - isl_constraint *c = isl_equality_alloc - (isl_local_space_from_space (isl_map_get_space (acc))); - int max_arrays = PARAM_VALUE (PARAM_GRAPHITE_MAX_ARRAYS_PER_SCOP); - /* Each scalar variables has a unique alias set number starting from - max_arrays. */ - c = isl_constraint_set_constant_si (c, -max_arrays - SSA_NAME_VERSION (var)); - c = isl_constraint_set_coefficient_si (c, isl_dim_out, 0, 1); - - return isl_map_add_constraint (acc, c); -} - /* Assign the affine expression INDEX to the output dimension POS of MAP and return the result. */ @@ -684,13 +665,21 @@ static void build_poly_sr_1 (poly_bb_p pbb, gimple *stmt, tree var, enum poly_dr_type kind, isl_map *acc, isl_set *subscript_sizes) { - int max_arrays = PARAM_VALUE (PARAM_GRAPHITE_MAX_ARRAYS_PER_SCOP); + scop_p scop = PBB_SCOP (pbb); /* Each scalar variables has a unique alias set number starting from - max_arrays. */ + the maximum alias set assigned to a dr. */ + int alias_set = scop->max_alias_set + SSA_NAME_VERSION (var); subscript_sizes = isl_set_fix_si (subscript_sizes, isl_dim_set, 0, - max_arrays + SSA_NAME_VERSION (var)); + alias_set); + + /* Add a constrain to the ACCESSES polyhedron for the alias set of + data reference DR. */ + isl_constraint *c + = isl_equality_alloc (isl_local_space_from_space (isl_map_get_space (acc))); + c = isl_constraint_set_constant_si (c, -alias_set); + c = isl_constraint_set_coefficient_si (c, isl_dim_out, 0, 1); - new_poly_dr (pbb, stmt, kind, add_scalar_version_numbers (acc, var), + new_poly_dr (pbb, stmt, kind, isl_map_add_constraint (acc, c), subscript_sizes); } diff --git a/gcc/graphite.h b/gcc/graphite.h index d22c4f2693f..79793ee15bb 100644 --- a/gcc/graphite.h +++ b/gcc/graphite.h @@ -379,6 +379,9 @@ struct scop /* Number of parameters in SCoP. */ graphite_dim_t nb_params; + /* The maximum alias set as assigned to drs by build_alias_sets. */ + unsigned max_alias_set; + /* All the basic blocks in this scop that contain memory references and that will be represented as statements in the polyhedral representation. */ -- 2.30.2