scheduling: introduce band forest interface
[platform/upstream/isl.git] / isl_band_private.h
1 #ifndef ISL_BAND_PRIVATE_H
2 #define ISL_BAND_PRIVATE_H
3
4 #include <isl/band.h>
5 #include <isl/list.h>
6 #include <isl/schedule.h>
7 #include <isl/union_map.h>
8
9 /* Information about a band within a schedule.
10  *
11  * n is the number of scheduling dimensions within the band.
12  * parallel is an array of length n, indicating whether a scheduling dimension
13  *      is parallel.
14  * map is the partial map 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 *parallel;
29
30         isl_union_map *map;
31         isl_schedule *schedule;
32         isl_band *parent;
33         isl_band_list *children;
34 };
35
36 #endif