Commit 5affe17f by Abderrazek Zaafrani Committed by Sebastian Pop

isl schedule tree

Use isl_schedule_node instead of isl_band_list for isl-0.15.
Passes regtest and bootstrap for isl-0.15 and isl-0.12.2 on x86_64-linux.

gcc/ChangeLog:

        * graphite-optimize-isl.c (get_schedule_for_node_st): New callback
          function to schedule based on isl_schedule_node.
        (get_schedule_map_st): New schedule optimizer based on isl_schedule_node.
        (scop_get_domains): New. Return the isl_union_set containing the domains of all the pbbs.
        (optimize_isl): Call the new function get_schedule_map_st for isl-0.15

gcc/testsuite/ChangeLog:

        * gcc.dg/graphite/block-0.c: Changed to match pattern.
        * gcc.dg/graphite/interchange-1.c: Same.
        * gcc.dg/graphite/interchange-10.c: Same.
        * gcc.dg/graphite/interchange-11.c: Same.
        * gcc.dg/graphite/interchange-13.c: Same.
        * gcc.dg/graphite/interchange-3.c: Same.
        * gcc.dg/graphite/interchange-4.c: Same.
        * gcc.dg/graphite/interchange-7.c: Same.
        * gcc.dg/graphite/interchange-9.c: Same.
        * gcc.dg/graphite/uns-interchange-9.c: Same.
        * gfortran.dg/graphite/interchange-3.f90: Same.

Co-Authored-By: Aditya Kumar <aditya.k7@samsung.com>

From-SVN: r229445
parent 55015e59
2015-10-27 Abderrazek Zaafrani <a.zaafrani@samsung.com>
Aditya Kumar <aditya.k7@samsung.com>
* graphite-optimize-isl.c (get_schedule_for_node_st): New callback
function to schedule based on isl_schedule_node.
(get_schedule_map_st): New schedule optimizer based on isl_schedule_node.
(scop_get_domains): New. Return the isl_union_set containing the domains of all the pbbs.
(optimize_isl): Call the new function get_schedule_map_st for isl-0.15
2015-10-27 H.J. Lu <hongjiu.lu@intel.com> 2015-10-27 H.J. Lu <hongjiu.lu@intel.com>
PR target/67215 PR target/67215
...@@ -34,6 +34,9 @@ along with GCC; see the file COPYING3. If not see ...@@ -34,6 +34,9 @@ along with GCC; see the file COPYING3. If not see
#include <isl/aff.h> #include <isl/aff.h>
#include <isl/options.h> #include <isl/options.h>
#include <isl/ctx.h> #include <isl/ctx.h>
#ifdef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
#include <isl/schedule_node.h>
#endif
#include "system.h" #include "system.h"
#include "coretypes.h" #include "coretypes.h"
...@@ -50,20 +53,78 @@ along with GCC; see the file COPYING3. If not see ...@@ -50,20 +53,78 @@ along with GCC; see the file COPYING3. If not see
#include "params.h" #include "params.h"
#include "dumpfile.h" #include "dumpfile.h"
static isl_union_set * #ifdef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
scop_get_domains (scop_p scop ATTRIBUTE_UNUSED)
/* get_schedule_for_node_st - Improve schedule for the schedule node.
Only Simple loop tiling is considered. */
static __isl_give isl_schedule_node *
get_schedule_for_node_st (__isl_take isl_schedule_node *node, void *user)
{ {
int i; if (user)
poly_bb_p pbb; return node;
isl_space *space = isl_set_get_space (scop->param_context);
isl_union_set *res = isl_union_set_empty (space);
FOR_EACH_VEC_ELT (scop->pbbs, i, pbb) if (isl_schedule_node_get_type (node) != isl_schedule_node_band
res = isl_union_set_add_set (res, isl_set_copy (pbb->domain)); || isl_schedule_node_n_children (node) != 1)
return node;
isl_space *space = isl_schedule_node_band_get_space (node);
unsigned dims = isl_space_dim (space, isl_dim_set);
isl_schedule_node *child = isl_schedule_node_get_child (node, 0);
isl_schedule_node_type type = isl_schedule_node_get_type (child);
isl_space_free (space);
isl_schedule_node_free (child);
if (type != isl_schedule_node_leaf)
return node;
if (dims <= 1 || !isl_schedule_node_band_get_permutable (node))
{
if (dump_file && dump_flags)
fprintf (dump_file, "not tiled\n");
return node;
}
/* Tile loops. */
space = isl_schedule_node_band_get_space (node);
isl_multi_val *sizes = isl_multi_val_zero (space);
long tile_size = PARAM_VALUE (PARAM_LOOP_BLOCK_TILE_SIZE);
isl_ctx *ctx = isl_schedule_node_get_ctx (node);
for (unsigned i = 0; i < dims; i++)
{
sizes = isl_multi_val_set_val (sizes, i,
isl_val_int_from_si (ctx, tile_size));
if (dump_file && dump_flags)
fprintf (dump_file, "tiled by %ld\n", tile_size);
}
node = isl_schedule_node_band_tile (node, sizes);
node = isl_schedule_node_child (node, 0);
return res; return node;
} }
/* get_schedule_map_st - Improve the schedule by performing other loop
optimizations. _st ending is for schedule tree version of this
function (see get_schedule_map below for the band forest version).
Do a depth-first post-order traversal of the nodes in a schedule
tree and apply get_schedule_for_node_st on them to improve the schedule.
*/
static __isl_give isl_union_map *
get_schedule_map_st (__isl_keep isl_schedule *schedule)
{
schedule = isl_schedule_map_schedule_node_bottom_up (schedule,
get_schedule_for_node_st,
NULL);
isl_union_map *schedule_map = isl_schedule_get_map (schedule);
return schedule_map;
}
#else
/* get_tile_map - Create a map that describes a n-dimensonal tiling. /* get_tile_map - Create a map that describes a n-dimensonal tiling.
get_tile_map creates a map from a n-dimensional scattering space into an get_tile_map creates a map from a n-dimensional scattering space into an
...@@ -255,6 +316,7 @@ get_schedule_map (isl_schedule *schedule) ...@@ -255,6 +316,7 @@ get_schedule_map (isl_schedule *schedule)
isl_band_list_free (bandList); isl_band_list_free (bandList);
return schedule_map; return schedule_map;
} }
#endif
static isl_stat static isl_stat
get_single_map (__isl_take isl_map *map, void *user) get_single_map (__isl_take isl_map *map, void *user)
...@@ -285,6 +347,20 @@ apply_schedule_map_to_scop (scop_p scop, isl_union_map *schedule_map) ...@@ -285,6 +347,20 @@ apply_schedule_map_to_scop (scop_p scop, isl_union_map *schedule_map)
} }
} }
static isl_union_set *
scop_get_domains (scop_p scop ATTRIBUTE_UNUSED)
{
int i;
poly_bb_p pbb;
isl_space *space = isl_set_get_space (scop->param_context);
isl_union_set *res = isl_union_set_empty (space);
FOR_EACH_VEC_ELT (scop->pbbs, i, pbb)
res = isl_union_set_add_set (res, isl_set_copy (pbb->domain));
return res;
}
static const int CONSTANT_BOUND = 20; static const int CONSTANT_BOUND = 20;
/* Compute the schedule for SCOP based on its parameters, domain and set of /* Compute the schedule for SCOP based on its parameters, domain and set of
...@@ -360,7 +436,11 @@ optimize_isl (scop_p scop) ...@@ -360,7 +436,11 @@ optimize_isl (scop_p scop)
return false; return false;
#endif #endif
#ifdef HAVE_ISL_OPTIONS_SET_SCHEDULE_SERIALIZE_SCCS
isl_union_map *schedule_map = get_schedule_map_st (schedule);
#else
isl_union_map *schedule_map = get_schedule_map (schedule); isl_union_map *schedule_map = get_schedule_map (schedule);
#endif
apply_schedule_map_to_scop (scop, schedule_map); apply_schedule_map_to_scop (scop, schedule_map);
isl_schedule_free (schedule); isl_schedule_free (schedule);
......
2015-10-27 Abderrazek Zaafrani <a.zaafrani@samsung.com>
Aditya Kumar <aditya.k7@samsung.com>
* gcc.dg/graphite/block-0.c: Changed to match pattern.
* gcc.dg/graphite/interchange-1.c: Same.
* gcc.dg/graphite/interchange-10.c: Same.
* gcc.dg/graphite/interchange-11.c: Same.
* gcc.dg/graphite/interchange-13.c: Same.
* gcc.dg/graphite/interchange-3.c: Same.
* gcc.dg/graphite/interchange-4.c: Same.
* gcc.dg/graphite/interchange-7.c: Same.
* gcc.dg/graphite/interchange-9.c: Same.
* gcc.dg/graphite/uns-interchange-9.c: Same.
* gfortran.dg/graphite/interchange-3.f90: Same.
2015-10-27 H.J. Lu <hongjiu.lu@intel.com> 2015-10-27 H.J. Lu <hongjiu.lu@intel.com>
PR target/67215 PR target/67215
......
...@@ -42,4 +42,4 @@ main (void) ...@@ -42,4 +42,4 @@ main (void)
return 0; return 0;
} }
/* { dg-final { scan-tree-dump-times "not tiled" 2 "graphite" } } */ /* { dg-final { scan-tree-dump "not tiled" "graphite" } } */
...@@ -49,4 +49,9 @@ main (void) ...@@ -49,4 +49,9 @@ main (void)
return 0; return 0;
} }
/* { dg-final { scan-tree-dump "tiled by" "graphite" } } */ /*FIXME: Between ISL-0.12 and ISL-0.15 the schedule optimizer needs to print
something canonical so that it can be checked in the test. The final code
generated by both are same in this case but the messaged printed are
not consistent. */
/* { dg-final { scan-tree-dump "tiled" "graphite" } } */
...@@ -46,4 +46,4 @@ main (void) ...@@ -46,4 +46,4 @@ main (void)
return 0; return 0;
} }
/* { dg-final { scan-tree-dump "tiled by" "graphite" } } */ /* { dg-final { scan-tree-dump "tiled" "graphite" } } */
...@@ -46,4 +46,4 @@ main (void) ...@@ -46,4 +46,4 @@ main (void)
return 0; return 0;
} }
/* { dg-final { scan-tree-dump "tiled by" "graphite" } } */ /* { dg-final { scan-tree-dump "tiled" "graphite" } } */
...@@ -49,5 +49,4 @@ main (void) ...@@ -49,5 +49,4 @@ main (void)
return 0; return 0;
} }
/* { dg-final { scan-tree-dump "tiled" "graphite" } } */
/* { dg-final { scan-tree-dump "tiled by" "graphite" } } */
...@@ -47,4 +47,4 @@ main (void) ...@@ -47,4 +47,4 @@ main (void)
return 0; return 0;
} }
/* { dg-final { scan-tree-dump "tiled by" "graphite" } } */ /* { dg-final { scan-tree-dump "tiled" "graphite" } } */
...@@ -46,4 +46,4 @@ main (void) ...@@ -46,4 +46,4 @@ main (void)
return 0; return 0;
} }
/* { dg-final { scan-tree-dump "tiled by" "graphite" } } */ /* { dg-final { scan-tree-dump "tiled" "graphite" } } */
...@@ -46,4 +46,4 @@ main (void) ...@@ -46,4 +46,4 @@ main (void)
return 0; return 0;
} }
/* { dg-final { scan-tree-dump "tiled by" "graphite" } } */ /* { dg-final { scan-tree-dump "tiled" "graphite" } } */
...@@ -44,4 +44,4 @@ main (void) ...@@ -44,4 +44,4 @@ main (void)
return 0; return 0;
} }
/* { dg-final { scan-tree-dump "tiled by" "graphite" } } */ /* { dg-final { scan-tree-dump "tiled" "graphite" } } */
...@@ -45,4 +45,4 @@ main (void) ...@@ -45,4 +45,4 @@ main (void)
return 0; return 0;
} }
/* { dg-final { scan-tree-dump "tiled by" "graphite" } } */ /* { dg-final { scan-tree-dump "tiled" "graphite" } } */
...@@ -24,4 +24,4 @@ Program FOO ...@@ -24,4 +24,4 @@ Program FOO
end Program FOO end Program FOO
! { dg-final { scan-tree-dump "tiled by" "graphite" } } ! { dg-final { scan-tree-dump "tiled" "graphite" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment