add isl_schedule_foreach_band
[platform/upstream/isl.git] / doc / user.pod
index 9c09f4f..7869890 100644 (file)
@@ -1675,6 +1675,8 @@ is already known to be empty.
 
 =item * Single-valuedness
 
+       int isl_basic_map_is_single_valued(
+               __isl_keep isl_basic_map *bmap);
        int isl_map_plain_is_single_valued(
                __isl_keep isl_map *map);
        int isl_map_is_single_valued(__isl_keep isl_map *map);
@@ -1949,6 +1951,10 @@ dimension has a value bounded by the fixed given value.
        __isl_give isl_set *isl_set_equate(__isl_take isl_set *set,
                enum isl_dim_type type1, int pos1,
                enum isl_dim_type type2, int pos2);
+       __isl_give isl_basic_map *isl_basic_map_equate(
+               __isl_take isl_basic_map *bmap,
+               enum isl_dim_type type1, int pos1,
+               enum isl_dim_type type2, int pos2);
        __isl_give isl_map *isl_map_equate(__isl_take isl_map *map,
                enum isl_dim_type type1, int pos1,
                enum isl_dim_type type2, int pos2);
@@ -4411,6 +4417,15 @@ using the following function.
        __isl_give isl_band_list *isl_schedule_get_band_forest(
                __isl_keep isl_schedule *schedule);
 
+The individual bands can be visited in depth-first post-order
+using the following function.
+
+       #include <isl/schedule.h>
+       int isl_schedule_foreach_band(
+               __isl_keep isl_schedule *sched,
+               int (*fn)(__isl_keep isl_band *band, void *user),
+               void *user);
+
 The list can be manipulated as explained in L<"Lists">.
 The bands inside the list can be copied and freed using the following
 functions.
@@ -4451,12 +4466,37 @@ The properties of a band can be inspected using the following functions.
        int isl_band_member_is_zero_distance(
                __isl_keep isl_band *band, int pos);
 
+       int isl_band_list_foreach_band(
+               __isl_keep isl_band_list *list,
+               int (*fn)(__isl_keep isl_band *band, void *user),
+               void *user);
+
 Note that a scheduling dimension is considered to be ``zero
 distance'' if it does not carry any proximity dependences
 within its band.
 That is, if the dependence distances of the proximity
 dependences are all zero in that direction (for fixed
 iterations of outer bands).
+Like C<isl_schedule_foreach_band>,
+the function C<isl_band_list_foreach_band> calls C<fn> on the bands
+in depth-first post-order.
+
+A band can be tiled using the following function.
+
+       #include <isl/band.h>
+       int isl_band_tile(__isl_keep isl_band *band,
+               __isl_take isl_vec *sizes);
+
+       int isl_options_set_tile_scale_tile_loops(isl_ctx *ctx,
+               int val);
+       int isl_options_get_tile_scale_tile_loops(isl_ctx *ctx);
+
+The C<isl_band_tile> function tiles the band using the given tile sizes
+inside its schedule.
+A new child band is created to represent the point loops and it is
+inserted between the modified band and its children.
+The C<tile_scale_tile_loops> option specifies whether the tile
+loops iterators should be scaled by the tile sizes.
 
 A representation of the band can be printed using