8f201f6be14cd12d5c3b614d4a95ef4eb27b8c51
[platform/upstream/isl.git] / isl_band_private.h
1 #ifndef ISL_BAND_PRIVATE_H
2 #define ISL_BAND_PRIVATE_H
3
4 #include <isl/aff.h>
5 #include <isl/band.h>
6 #include <isl/list.h>
7 #include <isl/schedule.h>
8
9 /* Information about a band within a schedule.
10  *
11  * n is the number of scheduling dimensions within the band.
12  * zero is an array of length n, indicating whether a scheduling dimension
13  *      results in zero dependence distances for the proximity dependences.
14  * pma is the partial schedule corresponding to this band.
15  * schedule is the schedule that contains this band.
16  * parent is the parent of this band (or NULL if the band is a root).
17  * children are the children of this band (or NULL if the band is a leaf).
18  *
19  * To avoid circular dependences in the reference counting,
20  * the schedule and parent pointers are not reference counted.
21  * isl_band_copy increments the reference count of schedule to ensure
22  * that outside references to the band keep the schedule alive.
23  */
24 struct isl_band {
25         int ref;
26
27         int n;
28         int *zero;
29
30         isl_union_pw_multi_aff *pma;
31         isl_schedule *schedule;
32         isl_band *parent;
33         isl_band_list *children;
34 };
35
36 __isl_give isl_band *isl_band_alloc(isl_ctx *ctx);
37
38 __isl_give isl_union_map *isl_band_list_get_suffix_schedule(
39         __isl_keep isl_band_list *list);
40
41 #endif