Commit 99124c31 by Richard Biener Committed by Richard Biener

graphite.h (scop::max_alias_set): New member.

2017-09-27  Richard Biener  <rguenther@suse.de>

	* 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
parent 84c8627c
2017-09-27 Richard Biener <rguenther@suse.de> 2017-09-27 Richard Biener <rguenther@suse.de>
* 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 <rguenther@suse.de>
* graphite-optimize-isl.c (get_schedule_for_node_st): Allow * graphite-optimize-isl.c (get_schedule_for_node_st): Allow
--param loop-block-tile-size=0 to disable tiling. --param loop-block-tile-size=0 to disable tiling.
...@@ -389,10 +389,7 @@ public: ...@@ -389,10 +389,7 @@ public:
void remove_intersecting_scops (sese_l s1); void remove_intersecting_scops (sese_l s1);
/* Return true when a statement in SCOP cannot be represented by Graphite. /* 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. */
bool harmful_loop_in_region (sese_l scop) const; bool harmful_loop_in_region (sese_l scop) const;
...@@ -760,10 +757,7 @@ scop_detection::add_scop (sese_l s) ...@@ -760,10 +757,7 @@ scop_detection::add_scop (sese_l s)
DEBUG_PRINT (dp << "[scop-detection] Adding SCoP: "; print_sese (dump_file, 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. /* 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. */
bool bool
scop_detection::harmful_loop_in_region (sese_l scop) const scop_detection::harmful_loop_in_region (sese_l scop) const
...@@ -1531,7 +1525,8 @@ build_alias_set (scop_p scop) ...@@ -1531,7 +1525,8 @@ build_alias_set (scop_p scop)
for (i = 0; i < num_vertices; i++) for (i = 0; i < num_vertices; i++)
all_vertices[i] = 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); free (all_vertices);
for (i = 0; i < g->n_vertices; i++) for (i = 0; i < g->n_vertices; i++)
...@@ -1755,7 +1750,8 @@ build_scops (vec<scop_p> *scops) ...@@ -1755,7 +1750,8 @@ build_scops (vec<scop_p> *scops)
} }
unsigned max_arrays = PARAM_VALUE (PARAM_GRAPHITE_MAX_ARRAYS_PER_SCOP); 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: " DEBUG_PRINT (dp << "[scop-detection-fail] too many data references: "
<< scop->drs.length () << scop->drs.length ()
......
...@@ -491,25 +491,6 @@ pdr_add_alias_set (isl_map *acc, dr_info &dri) ...@@ -491,25 +491,6 @@ pdr_add_alias_set (isl_map *acc, dr_info &dri)
return isl_map_add_constraint (acc, c); 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 /* Assign the affine expression INDEX to the output dimension POS of
MAP and return the result. */ MAP and return the result. */
...@@ -684,13 +665,21 @@ static void ...@@ -684,13 +665,21 @@ static void
build_poly_sr_1 (poly_bb_p pbb, gimple *stmt, tree var, enum poly_dr_type kind, build_poly_sr_1 (poly_bb_p pbb, gimple *stmt, tree var, enum poly_dr_type kind,
isl_map *acc, isl_set *subscript_sizes) 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 /* 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, 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); subscript_sizes);
} }
......
...@@ -379,6 +379,9 @@ struct scop ...@@ -379,6 +379,9 @@ struct scop
/* Number of parameters in SCoP. */ /* Number of parameters in SCoP. */
graphite_dim_t nb_params; 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 /* All the basic blocks in this scop that contain memory references
and that will be represented as statements in the polyhedral and that will be represented as statements in the polyhedral
representation. */ representation. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment