From eefa4bafa54ec60b108a8132598fc60a25480644 Mon Sep 17 00:00:00 2001 From: Abderrazek Zaafrani Date: Wed, 11 Nov 2015 20:43:51 +0000 Subject: [PATCH] improve construction of the original schedule 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. From-SVN: r230191 --- gcc/ChangeLog | 5 +++++ gcc/graphite-sese-to-poly.c | 27 +++++++++++---------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 08fae9e73f8..efbd38f272f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-11-11 Abderrazek Zaafrani + + * graphite-sese-to-poly.c (build_scop_original_schedule): Call + isl_union_map_add_map on every pbb->schedule. + 2015-11-11 Tom de Vries * tree-parloops.c (create_parallel_loop): Return void. diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c index ba45199a02a..3c245125fa7 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; } -- 2.30.2