improve construction of the original schedule
authorAbderrazek Zaafrani <a.zaafrani@samsung.com>
Wed, 11 Nov 2015 20:43:51 +0000 (20:43 +0000)
committerSebastian Pop <spop@gcc.gnu.org>
Wed, 11 Nov 2015 20:43:51 +0000 (20:43 +0000)
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
gcc/graphite-sese-to-poly.c

index 08fae9e73f8123b65c6304a7a5415c755f7a57a4..efbd38f272fbb757389bb68b22cae49b755f07cd 100644 (file)
@@ -1,3 +1,8 @@
+2015-11-11  Abderrazek Zaafrani  <a.zaafrani@samsung.com>
+
+       * 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  <tom@codesourcery.com>
 
        * tree-parloops.c (create_parallel_loop): Return void.
index ba45199a02a932fa444689fafa5b82eb96b2c9e6..3c245125fa77bf00124cd61efbe8f452cc8ce90d 100644 (file)
@@ -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;
 }