summaryrefslogtreecommitdiff
path: root/gcc/graphite-sese-to-poly.c
diff options
context:
space:
mode:
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>2015-11-11 20:43:51 +0000
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>2015-11-11 20:43:51 +0000
commitdf24635342323b3a01896d4866e2be6151174f2a (patch)
treea7750363fe6a9434a56d232430833e3216b9b9b5 /gcc/graphite-sese-to-poly.c
parenta600501506506cb4d98f9eef71d3fe325549d50d (diff)
downloadgcc-df24635342323b3a01896d4866e2be6151174f2a.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230191 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/graphite-sese-to-poly.c')
-rw-r--r--gcc/graphite-sese-to-poly.c27
1 files changed, 11 insertions, 16 deletions
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;
}