This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 2/2] [graphite] improve construction of the original schedule
- From: Sebastian Pop <s dot pop at samsung dot com>
- To: sebpop at gmail dot com
- Cc: gcc-patches at gcc dot gnu dot org, hiraditya at msn dot com, Sebastian Pop <s dot pop at samsung dot com>
- Date: Wed, 11 Nov 2015 13:40:26 -0600
- Subject: [PATCH 2/2] [graphite] improve construction of the original schedule
- Authentication-results: sourceware.org; auth=none
- References: <1447270826-6634-1-git-send-email-s dot pop at samsung dot com>
The patch builds the original schedule based on the now optimized scattering
dimension instead of building one based on the loop index only.
The implementation is simpler and catches more cases where the original schedule
and the transformed schedule are the same, such as the one below:
for (i = 0; i < 1000; i++)
{
Temp = F[i];
for (j = 0; j < 1000; j++)
{
D[j] = E[j] * Temp;
A[i][j] = A[i][j] + B[i][j] * C[i][j] - D[j] ;
}
D[i] = E[i] * F[i];
}
* graphite-sese-to-poly.c (build_scop_original_schedule): Call
isl_union_map_add_map on every pbb->schedule.
---
gcc/graphite-sese-to-poly.c | 27 +++++++++++----------------
1 file changed, 11 insertions(+), 16 deletions(-)
diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index ba45199..3c24512 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -446,31 +446,26 @@ build_scop_minimal_scattering (scop_p scop)
}
Static schedules for A to D expressed in a union map:
-
- { S_A[i0, i1] -> [i0, i1]; S_B[i0] -> [i0]; S_C[] -> []; S_9[i0] -> [i0] }
-
+ {
+ S_A[i0, i1] -> [0, i0, 0, i1];
+ S_B[i0] -> [0, i0, 1];
+ S_C[] -> [1];
+ S_D[i0] -> [2, i0, 0]
+ }
*/
static void
build_scop_original_schedule (scop_p scop)
{
+ int i;
+ poly_bb_p pbb;
+
isl_space *space = isl_set_get_space (scop->param_context);
isl_union_map *res = isl_union_map_empty (space);
- int i;
- poly_bb_p pbb;
FOR_EACH_VEC_ELT (scop->pbbs, i, pbb)
- {
- int nb_dimensions = isl_set_dim (pbb->domain, isl_dim_set);
- isl_space *dc = isl_set_get_space (pbb->domain);
- isl_space *dm = isl_space_add_dims (isl_space_from_domain (dc),
- isl_dim_out, nb_dimensions);
- isl_map *mp = isl_map_universe (dm);
- for (int i = 0; i < nb_dimensions; i++)
- mp = isl_map_equate (mp, isl_dim_in, i, isl_dim_out, i);
-
- res = isl_union_map_add_map (res, mp);
- }
+ res = isl_union_map_add_map (res, isl_map_copy (pbb->schedule));
+
scop->original_schedule = res;
}
--
1.9.1