graphite.h (scop::max_alias_set): New member.
authorRichard Biener <rguenther@suse.de>
Wed, 27 Sep 2017 13:06:34 +0000 (13:06 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 27 Sep 2017 13:06:34 +0000 (13:06 +0000)
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

gcc/ChangeLog
gcc/graphite-scop-detection.c
gcc/graphite-sese-to-poly.c
gcc/graphite.h

index 6e7b5e3a8c0cafac1fb2b3c4c8f69547d7448876..d35c497b888946a7b1db899f309c011d855add4b 100644 (file)
@@ -1,3 +1,17 @@
+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
index 3b1492fbfa8b167d324e495752f778931019da8c..351e944e9c8b199ba8c57afbb45ab570756d9135 100644 (file)
@@ -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<scop_p> *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 ()
index fc8cd89239c665446bcf8b2a77f4a5ad6bafaec1..087a44a891d80ac74f0c7184f13f3f3da825558e 100644 (file)
@@ -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);
 }
 
index d22c4f2693f5233023e0cea76899ce2086da09a8..79793ee15bbf7b06d66bfa87c7b494bc221f9ce6 100644 (file)
@@ -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.  */