isl_polynomial_private.h revision 1.1.1.1 1 1.1 mrg #include <stdio.h>
2 1.1 mrg #include <isl_int.h>
3 1.1 mrg #include <isl/map.h>
4 1.1 mrg #include <isl/mat.h>
5 1.1 mrg #include <isl_morph.h>
6 1.1 mrg #include <isl/polynomial.h>
7 1.1 mrg #include <isl_local.h>
8 1.1 mrg #include <isl_reordering.h>
9 1.1 mrg #include "isl_list_private.h"
10 1.1 mrg
11 1.1 mrg struct isl_poly {
12 1.1 mrg int ref;
13 1.1 mrg struct isl_ctx *ctx;
14 1.1 mrg
15 1.1 mrg int var;
16 1.1 mrg };
17 1.1 mrg typedef struct isl_poly isl_poly;
18 1.1 mrg
19 1.1 mrg struct isl_poly_cst {
20 1.1 mrg struct isl_poly poly;
21 1.1 mrg isl_int n;
22 1.1 mrg isl_int d;
23 1.1 mrg };
24 1.1 mrg typedef struct isl_poly_cst isl_poly_cst;
25 1.1 mrg
26 1.1 mrg struct isl_poly_rec {
27 1.1 mrg struct isl_poly poly;
28 1.1 mrg int n;
29 1.1 mrg
30 1.1 mrg size_t size;
31 1.1 mrg isl_poly *p[];
32 1.1 mrg };
33 1.1 mrg typedef struct isl_poly_rec isl_poly_rec;
34 1.1 mrg
35 1.1 mrg /* dim represents the domain space.
36 1.1 mrg */
37 1.1 mrg struct isl_qpolynomial {
38 1.1 mrg int ref;
39 1.1 mrg
40 1.1 mrg isl_space *dim;
41 1.1 mrg struct isl_mat *div;
42 1.1 mrg isl_poly *poly;
43 1.1 mrg };
44 1.1 mrg
45 1.1 mrg #undef EL
46 1.1 mrg #define EL isl_qpolynomial
47 1.1 mrg
48 1.1 mrg #include <isl_list_templ.h>
49 1.1 mrg
50 1.1 mrg struct isl_term {
51 1.1 mrg int ref;
52 1.1 mrg
53 1.1 mrg isl_int n;
54 1.1 mrg isl_int d;
55 1.1 mrg
56 1.1 mrg isl_space *dim;
57 1.1 mrg struct isl_mat *div;
58 1.1 mrg
59 1.1 mrg int pow[1];
60 1.1 mrg };
61 1.1 mrg
62 1.1 mrg struct isl_pw_qpolynomial_piece {
63 1.1 mrg struct isl_set *set;
64 1.1 mrg struct isl_qpolynomial *qp;
65 1.1 mrg };
66 1.1 mrg
67 1.1 mrg struct isl_pw_qpolynomial {
68 1.1 mrg int ref;
69 1.1 mrg
70 1.1 mrg isl_space *dim;
71 1.1 mrg
72 1.1 mrg int n;
73 1.1 mrg
74 1.1 mrg size_t size;
75 1.1 mrg struct isl_pw_qpolynomial_piece p[1];
76 1.1 mrg };
77 1.1 mrg
78 1.1 mrg #undef PW
79 1.1 mrg #define PW isl_pw_qpolynomial
80 1.1 mrg
81 1.1 mrg #include <isl_pw_templ.h>
82 1.1 mrg
83 1.1 mrg #undef EL
84 1.1 mrg #define EL isl_pw_qpolynomial
85 1.1 mrg
86 1.1 mrg #include <isl_list_templ.h>
87 1.1 mrg
88 1.1 mrg /* dim represents the domain space.
89 1.1 mrg */
90 1.1 mrg struct isl_qpolynomial_fold {
91 1.1 mrg int ref;
92 1.1 mrg
93 1.1 mrg enum isl_fold type;
94 1.1 mrg isl_space *dim;
95 1.1 mrg
96 1.1 mrg isl_qpolynomial_list *list;
97 1.1 mrg };
98 1.1 mrg
99 1.1 mrg struct isl_pw_qpolynomial_fold_piece {
100 1.1 mrg struct isl_set *set;
101 1.1 mrg struct isl_qpolynomial_fold *fold;
102 1.1 mrg };
103 1.1 mrg
104 1.1 mrg struct isl_pw_qpolynomial_fold {
105 1.1 mrg int ref;
106 1.1 mrg
107 1.1 mrg enum isl_fold type;
108 1.1 mrg isl_space *dim;
109 1.1 mrg
110 1.1 mrg int n;
111 1.1 mrg
112 1.1 mrg size_t size;
113 1.1 mrg struct isl_pw_qpolynomial_fold_piece p[1];
114 1.1 mrg };
115 1.1 mrg
116 1.1 mrg #undef PW
117 1.1 mrg #define PW isl_pw_qpolynomial_fold
118 1.1 mrg
119 1.1 mrg #include <isl_pw_templ.h>
120 1.1 mrg
121 1.1 mrg #undef EL
122 1.1 mrg #define EL isl_pw_qpolynomial_fold
123 1.1 mrg
124 1.1 mrg #include <isl_list_templ.h>
125 1.1 mrg
126 1.1 mrg void isl_term_get_num(__isl_keep isl_term *term, isl_int *n);
127 1.1 mrg
128 1.1 mrg __isl_give isl_poly *isl_poly_zero(struct isl_ctx *ctx);
129 1.1 mrg __isl_give isl_poly *isl_poly_copy(__isl_keep isl_poly *poly);
130 1.1 mrg __isl_give isl_poly *isl_poly_cow(__isl_take isl_poly *poly);
131 1.1 mrg __isl_give isl_poly *isl_poly_dup(__isl_keep isl_poly *poly);
132 1.1 mrg __isl_null isl_poly *isl_poly_free(__isl_take isl_poly *poly);
133 1.1 mrg __isl_give struct isl_poly *isl_poly_mul(__isl_take struct isl_poly *poly1,
134 1.1 mrg __isl_take struct isl_poly *poly2);
135 1.1 mrg
136 1.1 mrg isl_bool isl_poly_is_cst(__isl_keep isl_poly *poly);
137 1.1 mrg isl_bool isl_poly_is_zero(__isl_keep isl_poly *poly);
138 1.1 mrg isl_bool isl_poly_is_one(__isl_keep isl_poly *poly);
139 1.1 mrg isl_bool isl_poly_is_negone(__isl_keep isl_poly *poly);
140 1.1 mrg __isl_keep isl_poly_cst *isl_poly_as_cst(__isl_keep isl_poly *poly);
141 1.1 mrg __isl_keep isl_poly_rec *isl_poly_as_rec(__isl_keep isl_poly *poly);
142 1.1 mrg
143 1.1 mrg __isl_give isl_poly *isl_poly_sum(__isl_take isl_poly *poly1,
144 1.1 mrg __isl_take isl_poly *poly2);
145 1.1 mrg __isl_give struct isl_poly *isl_poly_mul_isl_int(
146 1.1 mrg __isl_take isl_poly *poly, isl_int v);
147 1.1 mrg
148 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_alloc(__isl_take isl_space *space,
149 1.1 mrg unsigned n_div, __isl_take isl_poly *poly);
150 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_cow(__isl_take isl_qpolynomial *qp);
151 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_dup(__isl_keep isl_qpolynomial *qp);
152 1.1 mrg
153 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_cst_on_domain(
154 1.1 mrg __isl_take isl_space *domain,
155 1.1 mrg isl_int v);
156 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_rat_cst_on_domain(
157 1.1 mrg __isl_take isl_space *domain, const isl_int n, const isl_int d);
158 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_var_pow_on_domain(
159 1.1 mrg __isl_take isl_space *domain,
160 1.1 mrg int pos, int power);
161 1.1 mrg isl_bool isl_qpolynomial_is_one(__isl_keep isl_qpolynomial *qp);
162 1.1 mrg isl_bool isl_qpolynomial_is_affine(__isl_keep isl_qpolynomial *qp);
163 1.1 mrg isl_bool isl_qpolynomial_is_cst(__isl_keep isl_qpolynomial *qp,
164 1.1 mrg isl_int *n, isl_int *d);
165 1.1 mrg
166 1.1 mrg unsigned isl_qpolynomial_domain_offset(__isl_keep isl_qpolynomial *qp,
167 1.1 mrg enum isl_dim_type type);
168 1.1 mrg __isl_give isl_local *isl_qpolynomial_get_local(
169 1.1 mrg __isl_keep isl_qpolynomial *qp);
170 1.1 mrg
171 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_add_on_domain(
172 1.1 mrg __isl_keep isl_set *dom,
173 1.1 mrg __isl_take isl_qpolynomial *qp1,
174 1.1 mrg __isl_take isl_qpolynomial *qp2);
175 1.1 mrg
176 1.1 mrg int isl_qpolynomial_plain_cmp(__isl_keep isl_qpolynomial *qp1,
177 1.1 mrg __isl_keep isl_qpolynomial *qp2);
178 1.1 mrg
179 1.1 mrg int isl_qpolynomial_degree(__isl_keep isl_qpolynomial *poly);
180 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_coeff(
181 1.1 mrg __isl_keep isl_qpolynomial *poly,
182 1.1 mrg enum isl_dim_type type, unsigned pos, int deg);
183 1.1 mrg
184 1.1 mrg __isl_give isl_vec *isl_qpolynomial_extract_affine(
185 1.1 mrg __isl_keep isl_qpolynomial *qp);
186 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_from_affine(
187 1.1 mrg __isl_take isl_space *space, isl_int *f, isl_int denom);
188 1.1 mrg
189 1.1 mrg __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_cow(
190 1.1 mrg __isl_take isl_pw_qpolynomial *pwqp);
191 1.1 mrg
192 1.1 mrg __isl_keep isl_qpolynomial *isl_pw_qpolynomial_peek_base_at(
193 1.1 mrg __isl_keep isl_pw_qpolynomial *pwqp, int pos);
194 1.1 mrg
195 1.1 mrg __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add_piece(
196 1.1 mrg __isl_take isl_pw_qpolynomial *pwqp,
197 1.1 mrg __isl_take isl_set *set, __isl_take isl_qpolynomial *qp);
198 1.1 mrg int isl_pw_qpolynomial_is_one(__isl_keep isl_pw_qpolynomial *pwqp);
199 1.1 mrg
200 1.1 mrg __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_project_out(
201 1.1 mrg __isl_take isl_pw_qpolynomial *pwqp,
202 1.1 mrg enum isl_dim_type type, unsigned first, unsigned n);
203 1.1 mrg
204 1.1 mrg __isl_give isl_val *isl_qpolynomial_opt_on_domain(
205 1.1 mrg __isl_take isl_qpolynomial *qp, __isl_take isl_set *set, int max);
206 1.1 mrg
207 1.1 mrg enum isl_fold isl_fold_type_negate(enum isl_fold type);
208 1.1 mrg
209 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_cow(
210 1.1 mrg __isl_take isl_qpolynomial_fold *fold);
211 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_dup(
212 1.1 mrg __isl_keep isl_qpolynomial_fold *fold);
213 1.1 mrg
214 1.1 mrg __isl_keep isl_qpolynomial_list *isl_qpolynomial_fold_peek_list(
215 1.1 mrg __isl_keep isl_qpolynomial_fold *fold);
216 1.1 mrg
217 1.1 mrg __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_cow(
218 1.1 mrg __isl_take isl_pw_qpolynomial_fold *pwf);
219 1.1 mrg
220 1.1 mrg __isl_keep isl_qpolynomial_fold *isl_pw_qpolynomial_fold_peek_base_at(
221 1.1 mrg __isl_keep isl_pw_qpolynomial_fold *pwf, int pos);
222 1.1 mrg
223 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_add_on_domain(
224 1.1 mrg __isl_keep isl_set *set,
225 1.1 mrg __isl_take isl_qpolynomial_fold *fold1,
226 1.1 mrg __isl_take isl_qpolynomial_fold *fold2);
227 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_fold_on_domain(
228 1.1 mrg __isl_keep isl_set *set,
229 1.1 mrg __isl_take isl_qpolynomial_fold *fold1,
230 1.1 mrg __isl_take isl_qpolynomial_fold *fold2);
231 1.1 mrg
232 1.1 mrg int isl_qpolynomial_fold_plain_cmp(__isl_keep isl_qpolynomial_fold *fold1,
233 1.1 mrg __isl_keep isl_qpolynomial_fold *fold2);
234 1.1 mrg
235 1.1 mrg __isl_give isl_val *isl_qpolynomial_fold_opt_on_domain(
236 1.1 mrg __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *set, int max);
237 1.1 mrg
238 1.1 mrg isl_bool isl_pw_qpolynomial_fold_covers(
239 1.1 mrg __isl_keep isl_pw_qpolynomial_fold *pwf1,
240 1.1 mrg __isl_keep isl_pw_qpolynomial_fold *pwf2);
241 1.1 mrg
242 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_morph_domain(
243 1.1 mrg __isl_take isl_qpolynomial *qp, __isl_take isl_morph *morph);
244 1.1 mrg __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_morph_domain(
245 1.1 mrg __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_morph *morph);
246 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_morph_domain(
247 1.1 mrg __isl_take isl_qpolynomial_fold *fold, __isl_take isl_morph *morph);
248 1.1 mrg __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_morph_domain(
249 1.1 mrg __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_morph *morph);
250 1.1 mrg
251 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_lift(__isl_take isl_qpolynomial *qp,
252 1.1 mrg __isl_take isl_space *space);
253 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_lift(
254 1.1 mrg __isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *space);
255 1.1 mrg
256 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_substitute_equalities(
257 1.1 mrg __isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq);
258 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_substitute_equalities(
259 1.1 mrg __isl_take isl_qpolynomial_fold *fold, __isl_take isl_basic_set *eq);
260 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist(
261 1.1 mrg __isl_take isl_qpolynomial_fold *fold, __isl_take isl_set *context);
262 1.1 mrg
263 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_realign_domain(
264 1.1 mrg __isl_take isl_qpolynomial *qp, __isl_take isl_reordering *r);
265 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_realign_domain(
266 1.1 mrg __isl_take isl_qpolynomial_fold *fold, __isl_take isl_reordering *r);
267 1.1 mrg
268 1.1 mrg __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_reset_space(
269 1.1 mrg __isl_take isl_pw_qpolynomial *pwqp, __isl_take isl_space *space);
270 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_reset_domain_space(
271 1.1 mrg __isl_take isl_qpolynomial *qp, __isl_take isl_space *space);
272 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_reset_space_and_domain(
273 1.1 mrg __isl_take isl_qpolynomial *qp, __isl_take isl_space *space,
274 1.1 mrg __isl_take isl_space *domain);
275 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_domain_space(
276 1.1 mrg __isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *space);
277 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_space_and_domain(
278 1.1 mrg __isl_take isl_qpolynomial_fold *fold, __isl_take isl_space *space,
279 1.1 mrg __isl_take isl_space *domain);
280 1.1 mrg __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_reset_domain_space(
281 1.1 mrg __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_space *space);
282 1.1 mrg
283 1.1 mrg __isl_give isl_val *isl_qpolynomial_get_den(__isl_keep isl_qpolynomial *qp);
284 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_add_isl_int(
285 1.1 mrg __isl_take isl_qpolynomial *qp, isl_int v);
286 1.1 mrg __isl_give isl_qpolynomial *isl_qpolynomial_mul_isl_int(
287 1.1 mrg __isl_take isl_qpolynomial *qp, isl_int v);
288 1.1 mrg
289 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_scale(
290 1.1 mrg __isl_take isl_qpolynomial_fold *fold, isl_int v);
291 1.1 mrg
292 1.1 mrg __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_mul_isl_int(
293 1.1 mrg __isl_take isl_qpolynomial_fold *fold, isl_int v);
294 1.1 mrg
295 1.1 mrg ISL_DECLARE_LIST_FN_PRIVATE(qpolynomial)
296