1 | #ifndef ISL_SCHEDULE_BAND_H |
2 | #define ISL_SCHEDULE_BAND_H |
3 | |
4 | #include <isl/aff.h> |
5 | #include <isl/ast_type.h> |
6 | #include <isl/union_map.h> |
7 | |
8 | /* Information about a band within a schedule. |
9 | * |
10 | * n is the number of scheduling dimensions within the band. |
11 | * coincident is an array of length n, indicating whether a scheduling dimension |
12 | * satisfies the coincidence constraints in the sense that |
13 | * the corresponding dependence distances are zero. |
14 | * permutable is set if the band is permutable. |
15 | * mupa is the partial schedule corresponding to this band. The dimension |
16 | * of mupa is equal to n. |
17 | * loop_type contains the loop AST generation types for the members |
18 | * in the band. It may be NULL, if all members are |
19 | * of type isl_ast_loop_default. |
20 | * isolate_loop_type contains the loop AST generation types for the members |
21 | * in the band for the isolated part. It may be NULL, if all members are |
22 | * of type isl_ast_loop_default. |
23 | * ast_build_options are the remaining AST build options associated |
24 | * to the band. |
25 | * anchored is set if the node depends on its position in the schedule tree. |
26 | * In particular, it is set if the AST build options include |
27 | * an isolate option. |
28 | */ |
29 | struct isl_schedule_band { |
30 | int ref; |
31 | |
32 | int n; |
33 | int *coincident; |
34 | int permutable; |
35 | |
36 | isl_multi_union_pw_aff *mupa; |
37 | |
38 | int anchored; |
39 | isl_union_set *ast_build_options; |
40 | enum isl_ast_loop_type *loop_type; |
41 | enum isl_ast_loop_type *isolate_loop_type; |
42 | }; |
43 | typedef struct isl_schedule_band isl_schedule_band; |
44 | |
45 | __isl_give isl_schedule_band *isl_schedule_band_from_multi_union_pw_aff( |
46 | __isl_take isl_multi_union_pw_aff *mupa); |
47 | __isl_give isl_schedule_band *isl_schedule_band_copy( |
48 | __isl_keep isl_schedule_band *band); |
49 | __isl_null isl_schedule_band *isl_schedule_band_free( |
50 | __isl_take isl_schedule_band *band); |
51 | |
52 | isl_ctx *isl_schedule_band_get_ctx(__isl_keep isl_schedule_band *band); |
53 | |
54 | isl_bool isl_schedule_band_plain_is_equal(__isl_keep isl_schedule_band *band1, |
55 | __isl_keep isl_schedule_band *band2); |
56 | |
57 | int isl_schedule_band_is_anchored(__isl_keep isl_schedule_band *band); |
58 | |
59 | __isl_give isl_space *isl_schedule_band_get_space( |
60 | __isl_keep isl_schedule_band *band); |
61 | __isl_give isl_schedule_band *isl_schedule_band_intersect_domain( |
62 | __isl_take isl_schedule_band *band, __isl_take isl_union_set *domain); |
63 | __isl_give isl_multi_union_pw_aff *isl_schedule_band_get_partial_schedule( |
64 | __isl_keep isl_schedule_band *band); |
65 | __isl_give isl_schedule_band *isl_schedule_band_set_partial_schedule( |
66 | __isl_take isl_schedule_band *band, |
67 | __isl_take isl_multi_union_pw_aff *schedule); |
68 | enum isl_ast_loop_type isl_schedule_band_member_get_ast_loop_type( |
69 | __isl_keep isl_schedule_band *band, int pos); |
70 | __isl_give isl_schedule_band *isl_schedule_band_member_set_ast_loop_type( |
71 | __isl_take isl_schedule_band *band, int pos, |
72 | enum isl_ast_loop_type type); |
73 | enum isl_ast_loop_type isl_schedule_band_member_get_isolate_ast_loop_type( |
74 | __isl_keep isl_schedule_band *band, int pos); |
75 | __isl_give isl_schedule_band * |
76 | isl_schedule_band_member_set_isolate_ast_loop_type( |
77 | __isl_take isl_schedule_band *band, int pos, |
78 | enum isl_ast_loop_type type); |
79 | __isl_give isl_union_set *isl_schedule_band_get_ast_build_options( |
80 | __isl_keep isl_schedule_band *band); |
81 | __isl_give isl_schedule_band *isl_schedule_band_set_ast_build_options( |
82 | __isl_take isl_schedule_band *band, __isl_take isl_union_set *options); |
83 | __isl_give isl_set *isl_schedule_band_get_ast_isolate_option( |
84 | __isl_keep isl_schedule_band *band, int depth); |
85 | __isl_give isl_schedule_band *isl_schedule_band_replace_ast_build_option( |
86 | __isl_take isl_schedule_band *band, __isl_take isl_set *drop, |
87 | __isl_take isl_set *add); |
88 | |
89 | isl_size isl_schedule_band_n_member(__isl_keep isl_schedule_band *band); |
90 | isl_bool isl_schedule_band_member_get_coincident( |
91 | __isl_keep isl_schedule_band *band, int pos); |
92 | __isl_give isl_schedule_band *isl_schedule_band_member_set_coincident( |
93 | __isl_take isl_schedule_band *band, int pos, int coincident); |
94 | isl_bool isl_schedule_band_get_permutable(__isl_keep isl_schedule_band *band); |
95 | __isl_give isl_schedule_band *isl_schedule_band_set_permutable( |
96 | __isl_take isl_schedule_band *band, int permutable); |
97 | |
98 | __isl_give isl_schedule_band *isl_schedule_band_scale( |
99 | __isl_take isl_schedule_band *band, __isl_take isl_multi_val *mv); |
100 | __isl_give isl_schedule_band *isl_schedule_band_scale_down( |
101 | __isl_take isl_schedule_band *band, __isl_take isl_multi_val *mv); |
102 | __isl_give isl_schedule_band *isl_schedule_band_mod( |
103 | __isl_take isl_schedule_band *band, __isl_take isl_multi_val *mv); |
104 | __isl_give isl_schedule_band *isl_schedule_band_tile( |
105 | __isl_take isl_schedule_band *band, __isl_take isl_multi_val *sizes); |
106 | __isl_give isl_schedule_band *isl_schedule_band_point( |
107 | __isl_take isl_schedule_band *band, __isl_keep isl_schedule_band *tile, |
108 | __isl_take isl_multi_val *sizes); |
109 | __isl_give isl_schedule_band *isl_schedule_band_shift( |
110 | __isl_take isl_schedule_band *band, |
111 | __isl_take isl_multi_union_pw_aff *shift); |
112 | __isl_give isl_schedule_band *isl_schedule_band_drop( |
113 | __isl_take isl_schedule_band *band, int pos, int n); |
114 | __isl_give isl_schedule_band *isl_schedule_band_gist( |
115 | __isl_take isl_schedule_band *band, __isl_take isl_union_set *context); |
116 | |
117 | __isl_give isl_schedule_band *isl_schedule_band_reset_user( |
118 | __isl_take isl_schedule_band *band); |
119 | __isl_give isl_schedule_band *isl_schedule_band_align_params( |
120 | __isl_take isl_schedule_band *band, __isl_take isl_space *space); |
121 | __isl_give isl_schedule_band *isl_schedule_band_pullback_union_pw_multi_aff( |
122 | __isl_take isl_schedule_band *band, |
123 | __isl_take isl_union_pw_multi_aff *upma); |
124 | |
125 | #endif |
126 | |