1 | #ifndef ISL_AFF_PRIVATE_H |
2 | #define ISL_AFF_PRIVATE_H |
3 | |
4 | #include <isl/aff.h> |
5 | #include <isl/vec.h> |
6 | #include <isl/mat.h> |
7 | #include <isl/local_space.h> |
8 | #include <isl_int.h> |
9 | #include <isl_reordering.h> |
10 | #include <isl/stream.h> |
11 | |
12 | /* ls represents the domain space. |
13 | * |
14 | * If the first two elements of "v" (the denominator and the constant term) |
15 | * are zero, then the isl_aff represents NaN. |
16 | */ |
17 | struct isl_aff { |
18 | int ref; |
19 | |
20 | isl_local_space *ls; |
21 | isl_vec *v; |
22 | }; |
23 | |
24 | #undef EL |
25 | #define EL isl_aff |
26 | |
27 | #include <isl_list_templ.h> |
28 | |
29 | struct isl_pw_aff_piece { |
30 | struct isl_set *set; |
31 | struct isl_aff *aff; |
32 | }; |
33 | |
34 | struct isl_pw_aff { |
35 | int ref; |
36 | |
37 | isl_space *dim; |
38 | |
39 | int n; |
40 | |
41 | size_t size; |
42 | struct isl_pw_aff_piece p[1]; |
43 | }; |
44 | |
45 | #undef PW |
46 | #define PW isl_pw_aff |
47 | |
48 | #include <isl_pw_templ.h> |
49 | |
50 | #undef EL |
51 | #define EL isl_pw_aff |
52 | |
53 | #include <isl_list_templ.h> |
54 | |
55 | struct isl_pw_multi_aff_piece { |
56 | isl_set *set; |
57 | isl_multi_aff *maff; |
58 | }; |
59 | |
60 | struct isl_pw_multi_aff { |
61 | int ref; |
62 | |
63 | isl_space *dim; |
64 | |
65 | int n; |
66 | |
67 | size_t size; |
68 | struct isl_pw_multi_aff_piece p[1]; |
69 | }; |
70 | |
71 | #undef PW |
72 | #define PW isl_pw_multi_aff |
73 | |
74 | #include <isl_pw_templ.h> |
75 | |
76 | __isl_give isl_aff *isl_aff_alloc_vec(__isl_take isl_local_space *ls, |
77 | __isl_take isl_vec *v); |
78 | __isl_give isl_aff *isl_aff_alloc(__isl_take isl_local_space *ls); |
79 | |
80 | isl_size isl_aff_domain_dim(__isl_keep isl_aff *aff, enum isl_dim_type type); |
81 | isl_size isl_aff_domain_offset(__isl_keep isl_aff *aff, enum isl_dim_type type); |
82 | |
83 | __isl_give isl_aff *isl_aff_reset_space_and_domain(__isl_take isl_aff *aff, |
84 | __isl_take isl_space *space, __isl_take isl_space *domain); |
85 | __isl_give isl_aff *isl_aff_reset_domain_space(__isl_take isl_aff *aff, |
86 | __isl_take isl_space *space); |
87 | __isl_give isl_aff *isl_aff_realign_domain(__isl_take isl_aff *aff, |
88 | __isl_take isl_reordering *r); |
89 | |
90 | __isl_give isl_aff *isl_aff_set_constant(__isl_take isl_aff *aff, isl_int v); |
91 | __isl_give isl_aff *isl_aff_set_coefficient(__isl_take isl_aff *aff, |
92 | enum isl_dim_type type, int pos, isl_int v); |
93 | __isl_give isl_aff *isl_aff_add_constant(__isl_take isl_aff *aff, isl_int v); |
94 | |
95 | __isl_give isl_aff *isl_aff_domain_factor_domain(__isl_take isl_aff *aff); |
96 | |
97 | int isl_aff_plain_cmp(__isl_keep isl_aff *aff1, __isl_keep isl_aff *aff2); |
98 | |
99 | __isl_give isl_aff *isl_aff_remove_unused_divs(__isl_take isl_aff *aff); |
100 | __isl_give isl_aff *isl_aff_normalize(__isl_take isl_aff *aff); |
101 | |
102 | __isl_give isl_aff *isl_aff_expand_divs( __isl_take isl_aff *aff, |
103 | __isl_take isl_mat *div, int *exp); |
104 | |
105 | __isl_give isl_aff *isl_stream_read_aff(__isl_keep isl_stream *s); |
106 | |
107 | __isl_give isl_pw_aff *isl_pw_aff_alloc_size(__isl_take isl_space *space, |
108 | int n); |
109 | __isl_give isl_pw_aff *isl_pw_aff_reset_space(__isl_take isl_pw_aff *pwaff, |
110 | __isl_take isl_space *space); |
111 | __isl_give isl_pw_aff *isl_pw_aff_reset_domain_space( |
112 | __isl_take isl_pw_aff *pwaff, __isl_take isl_space *space); |
113 | __isl_give isl_pw_aff *isl_pw_aff_add_disjoint( |
114 | __isl_take isl_pw_aff *pwaff1, __isl_take isl_pw_aff *pwaff2); |
115 | |
116 | __isl_keep isl_aff *isl_pw_aff_peek_base_at(__isl_keep isl_pw_aff *pa, int pos); |
117 | |
118 | __isl_give isl_pw_aff *isl_pw_aff_domain_factor_domain( |
119 | __isl_take isl_pw_aff *pa); |
120 | |
121 | __isl_give isl_pw_aff *isl_pw_aff_union_opt(__isl_take isl_pw_aff *pwaff1, |
122 | __isl_take isl_pw_aff *pwaff2, int max); |
123 | |
124 | __isl_give isl_pw_aff *isl_pw_aff_set_rational(__isl_take isl_pw_aff *pwaff); |
125 | __isl_give isl_pw_aff_list *isl_pw_aff_list_set_rational( |
126 | __isl_take isl_pw_aff_list *list); |
127 | |
128 | __isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, isl_int f); |
129 | __isl_give isl_pw_aff *isl_pw_aff_scale(__isl_take isl_pw_aff *pwaff, |
130 | isl_int f); |
131 | __isl_give isl_pw_aff *isl_pw_aff_scale_down(__isl_take isl_pw_aff *pwaff, |
132 | isl_int f); |
133 | |
134 | __isl_give isl_pw_aff *isl_stream_read_pw_aff(__isl_keep isl_stream *s); |
135 | |
136 | isl_bool isl_aff_matching_params(__isl_keep isl_aff *aff, |
137 | __isl_keep isl_space *space); |
138 | isl_stat isl_aff_check_match_domain_space(__isl_keep isl_aff *aff, |
139 | __isl_keep isl_space *space); |
140 | |
141 | #undef BASE |
142 | #define BASE aff |
143 | |
144 | #include <isl_multi_templ.h> |
145 | |
146 | __isl_give isl_multi_aff *isl_multi_aff_dup(__isl_keep isl_multi_aff *multi); |
147 | |
148 | __isl_give isl_multi_aff *isl_multi_aff_align_divs( |
149 | __isl_take isl_multi_aff *maff); |
150 | |
151 | __isl_give isl_multi_aff *isl_multi_aff_from_basic_set_equalities( |
152 | __isl_take isl_basic_set *bset); |
153 | |
154 | __isl_give isl_multi_aff *isl_multi_aff_from_aff_mat( |
155 | __isl_take isl_space *space, __isl_take isl_mat *mat); |
156 | |
157 | #undef EL |
158 | #define EL isl_pw_multi_aff |
159 | |
160 | #include <isl_list_templ.h> |
161 | |
162 | __isl_keep isl_multi_aff *isl_pw_multi_aff_peek_base_at( |
163 | __isl_keep isl_pw_multi_aff *pma, int pos); |
164 | |
165 | __isl_give isl_pw_multi_aff *isl_pw_multi_aff_move_dims( |
166 | __isl_take isl_pw_multi_aff *pma, |
167 | enum isl_dim_type dst_type, unsigned dst_pos, |
168 | enum isl_dim_type src_type, unsigned src_pos, unsigned n); |
169 | |
170 | __isl_give isl_pw_multi_aff *isl_pw_multi_aff_reset_domain_space( |
171 | __isl_take isl_pw_multi_aff *pwmaff, __isl_take isl_space *space); |
172 | __isl_give isl_pw_multi_aff *isl_pw_multi_aff_reset_space( |
173 | __isl_take isl_pw_multi_aff *pwmaff, __isl_take isl_space *space); |
174 | __isl_give isl_pw_multi_aff *isl_pw_multi_aff_add_disjoint( |
175 | __isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2); |
176 | |
177 | __isl_give isl_pw_multi_aff *isl_pw_multi_aff_project_out( |
178 | __isl_take isl_pw_multi_aff *pma, |
179 | enum isl_dim_type type, unsigned first, unsigned n); |
180 | |
181 | isl_stat isl_seq_preimage(isl_int *dst, isl_int *src, |
182 | __isl_keep isl_multi_aff *ma, int n_before, int n_after, |
183 | int n_div_ma, int n_div_bmap, |
184 | isl_int f, isl_int c1, isl_int c2, isl_int g, int has_denom); |
185 | |
186 | __isl_give isl_aff *isl_aff_substitute_equalities(__isl_take isl_aff *aff, |
187 | __isl_take isl_basic_set *eq); |
188 | __isl_give isl_pw_multi_aff *isl_pw_multi_aff_substitute( |
189 | __isl_take isl_pw_multi_aff *pma, unsigned pos, |
190 | __isl_keep isl_pw_aff *subs); |
191 | |
192 | __isl_give isl_pw_multi_aff *isl_stream_read_pw_multi_aff( |
193 | __isl_keep isl_stream *s); |
194 | |
195 | __isl_give isl_union_pw_aff *isl_stream_read_union_pw_aff( |
196 | __isl_keep isl_stream *s); |
197 | |
198 | isl_stat isl_pw_aff_check_named_params(__isl_keep isl_pw_aff *pa); |
199 | isl_stat isl_multi_aff_check_named_params(__isl_keep isl_multi_aff *ma); |
200 | isl_stat isl_pw_multi_aff_check_named_params(__isl_keep isl_pw_multi_aff *pma); |
201 | |
202 | isl_bool isl_pw_aff_matching_params(__isl_keep isl_pw_aff *pa, |
203 | __isl_keep isl_space *space); |
204 | isl_stat isl_pw_aff_check_match_domain_space(__isl_keep isl_pw_aff *pa, |
205 | __isl_keep isl_space *space); |
206 | |
207 | __isl_give isl_basic_set *isl_aff_pos_basic_set(__isl_take isl_aff *aff); |
208 | |
209 | #undef BASE |
210 | #define BASE pw_aff |
211 | #undef DOMBASE |
212 | #define DOMBASE set |
213 | #define EXPLICIT_DOMAIN |
214 | |
215 | #include <isl_multi_templ.h> |
216 | |
217 | #undef EXPLICIT_DOMAIN |
218 | |
219 | __isl_give isl_map *isl_map_intersect_multi_pw_aff_explicit_domain( |
220 | __isl_take isl_map *map, __isl_keep isl_multi_pw_aff *mpa); |
221 | |
222 | #undef EL |
223 | #define EL isl_union_pw_aff |
224 | |
225 | #include <isl_list_templ.h> |
226 | |
227 | #undef BASE |
228 | #define BASE union_pw_aff |
229 | #undef DOMBASE |
230 | #define DOMBASE union_set |
231 | #define EXPLICIT_DOMAIN |
232 | |
233 | #include <isl_multi_templ.h> |
234 | |
235 | #undef EXPLICIT_DOMAIN |
236 | |
237 | #undef EL |
238 | #define EL isl_union_pw_multi_aff |
239 | |
240 | #include <isl_list_templ.h> |
241 | |
242 | #endif |
243 | |