aboutsummaryrefslogtreecommitdiff
path: root/gcc/graphite-poly.c
diff options
context:
space:
mode:
authorKonrad Trifunovic <konrad.trifunovic@gmail.com>2009-08-28 20:33:10 +0000
committerSebastian Pop <spop@gcc.gnu.org>2009-08-28 20:33:10 +0000
commitbaf4b88182bcc44247e664640fc01f6aabcd8ed8 (patch)
tree69ac627cca7315fe48e0749b297818c7abab1f12 /gcc/graphite-poly.c
parente6a83a8e9e211f45d862a81d22deb2aed8e66453 (diff)
downloadgcc-baf4b88182bcc44247e664640fc01f6aabcd8ed8.zip
gcc-baf4b88182bcc44247e664640fc01f6aabcd8ed8.tar.gz
gcc-baf4b88182bcc44247e664640fc01f6aabcd8ed8.tar.bz2
graphite-blocking.c (pbb_strip_mine_loop_depth): Renamed pbb_strip_mine_time_depth.
2009-08-28 Konrad Trifunovic <konrad.trifunovic@gmail.com> Sebastian Pop <sebastian.pop@amd.com> * graphite-blocking.c (pbb_strip_mine_loop_depth): Renamed pbb_strip_mine_time_depth. Changed the implementation so that transformation is expressed as a transformation on time (scatttering) dimensions. Also, ensures that the 2d+1 scheduling format is preserved. (pbb_strip_mine_profitable_p): Profitability is based on the iteration number of a given time (scattering) dimension, and not on a original loop depth dimension. (pbb_strip_mine): Call pbb_number_of_iterations_at_time. (pbb_do_strip_mine): Call psct_dynamic_dim. * graphite-poly.c (pbb_number_of_iterations_at_time): New. * graphite-poly.h (pbb_number_of_iterations_at_time): Declared. (pbb_nb_dynamic_scattering_transform): New. (psct_dynamic_dim): New. Co-Authored-By: Sebastian Pop <sebastian.pop@amd.com> From-SVN: r151186
Diffstat (limited to 'gcc/graphite-poly.c')
-rw-r--r--gcc/graphite-poly.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/gcc/graphite-poly.c b/gcc/graphite-poly.c
index 6184aae..4576a28 100644
--- a/gcc/graphite-poly.c
+++ b/gcc/graphite-poly.c
@@ -724,5 +724,46 @@ pbb_number_of_iterations (poly_bb_p pbb,
ppl_delete_Linear_Expression (le);
}
+/* Returns the number of iterations NITER of the loop around PBB at
+ time(scattering) dimension TIME_DEPTH. */
+
+void
+pbb_number_of_iterations_at_time (poly_bb_p pbb,
+ graphite_dim_t time_depth,
+ Value niter)
+{
+ ppl_Pointset_Powerset_C_Polyhedron_t ext_domain, sctr;
+ ppl_Linear_Expression_t le;
+ ppl_dimension_type dim;
+
+ value_set_si (niter, -1);
+
+ /* Takes together domain and scattering polyhedrons, and composes
+ them into the bigger polyhedron that has the following format:
+ t0..t_{n-1} | l0..l_{nlcl-1} | i0..i_{niter-1} | g0..g_{nparm-1}.
+ t0..t_{n-1} are time dimensions (scattering dimensions)
+ l0..l_{nclc-1} are local variables in scatterin function
+ i0..i_{niter-1} are original iteration variables
+ g0..g_{nparam-1} are global parameters. */
+
+ ppl_new_Pointset_Powerset_C_Polyhedron_from_Pointset_Powerset_C_Polyhedron
+ (&ext_domain, PBB_DOMAIN (pbb));
+ ppl_insert_dimensions_pointset (ext_domain, 0,
+ pbb_nb_scattering_transform (pbb)
+ + pbb_nb_local_vars (pbb));
+ ppl_new_Pointset_Powerset_C_Polyhedron_from_C_Polyhedron (&sctr,
+ PBB_TRANSFORMED_SCATTERING (pbb));
+ ppl_Pointset_Powerset_C_Polyhedron_intersection_assign (sctr, ext_domain);
+
+ ppl_Pointset_Powerset_C_Polyhedron_space_dimension (sctr, &dim);
+ ppl_new_Linear_Expression_with_dimension (&le, dim);
+ ppl_set_coef (le, time_depth, 1);
+ ppl_max_for_le_pointset (sctr, le, niter);
+
+ ppl_delete_Linear_Expression (le);
+ ppl_delete_Pointset_Powerset_C_Polyhedron (sctr);
+ ppl_delete_Pointset_Powerset_C_Polyhedron (ext_domain);
+}
+
#endif