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).
+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.
int isl_band_n_member(__isl_keep isl_band *band);
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);
+
__isl_give isl_printer *isl_printer_print_band(__isl_take isl_printer *p,
__isl_keep isl_band *band);
void isl_band_dump(__isl_keep isl_band *band);
return isl_union_map_from_union_pw_multi_aff(suffix);
}
+/* Call "fn" on each band (recursively) in the list
+ * in depth-first post-order.
+ */
+int isl_band_list_foreach_band(__isl_keep isl_band_list *list,
+ int (*fn)(__isl_keep isl_band *band, void *user), void *user)
+{
+ int i, n;
+
+ if (!list)
+ return -1;
+
+ n = isl_band_list_n_band(list);
+ for (i = 0; i < n; ++i) {
+ isl_band *band;
+ int r = 0;
+
+ band = isl_band_list_get_band(list, i);
+ if (isl_band_has_children(band)) {
+ isl_band_list *children;
+
+ children = isl_band_get_children(band);
+ r = isl_band_list_foreach_band(children, fn, user);
+ isl_band_list_free(children);
+ }
+
+ if (!band)
+ r = -1;
+ if (r == 0)
+ r = fn(band, user);
+
+ isl_band_free(band);
+ if (r)
+ return r;
+ }
+
+ return 0;
+}
+
/* Internal data used during the construction of the schedule
* for the tile loops.
*