Polly 23.0.0git
isl_bound.c
Go to the documentation of this file.
1/*
2 * Copyright 2010 INRIA Saclay
3 *
4 * Use of this software is governed by the MIT license
5 *
6 * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France,
7 * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod,
8 * 91893 Orsay, France
9 */
10
11#include <isl/aff.h>
12#include <isl/val.h>
13#include <isl_ctx_private.h>
14#include <isl_map_private.h>
15#include <isl_bound.h>
16#include <isl_bernstein.h>
17#include <isl_range.h>
19#include <isl_options_private.h>
20
21/* Given a polynomial "poly" that is constant in terms
22 * of the domain variables, construct a polynomial reduction
23 * of type "type" that is equal to "poly" on "bset",
24 * with the domain projected onto the parameters.
25 */
41
42/* Add the bound "pwf", which is not known to be tight,
43 * to the output of "bound".
44 */
51
52/* Add the bound "pwf", which is known to be tight,
53 * to the output of "bound".
54 */
61
62/* Given a polynomial "poly" that is constant in terms
63 * of the domain variables and the domain "bset",
64 * construct the corresponding polynomial reduction and
65 * add it to the tight bounds of "bound".
66 */
75
76/* Compute a bound on the polynomial defined over the parametric polytope
77 * using either range propagation or bernstein expansion and
78 * store the result in bound->pwf and bound->pwf_tight.
79 * Since bernstein expansion requires bounded domains, we apply
80 * range propagation on unbounded domains. Otherwise, we respect the choice
81 * of the user.
82 *
83 * If the polynomial does not depend on the set variables
84 * then the bound is equal to the polynomial and
85 * it can be added to "bound" directly.
86 */
89{
90 isl_ctx *ctx;
91 int bounded;
92 int degree;
93
94 if (!bset || !poly)
95 goto error;
96
98 if (degree < -1)
99 goto error;
100 if (degree <= 0)
101 return add_constant_poly(bset, poly, bound);
102
103 ctx = isl_basic_set_get_ctx(bset);
104 if (ctx->opt->bound == ISL_BOUND_RANGE)
106
107 bounded = isl_basic_set_is_bounded(bset);
108 if (bounded < 0)
109 goto error;
110 if (bounded)
112 else
114error:
115 isl_basic_set_free(bset);
117 return isl_stat_error;
118}
119
122{
124 isl_pw_qpolynomial_fold *top_pwf_tight;
125 isl_space *space;
126 isl_morph *morph;
127 isl_stat r;
128
130
131 if (!bset)
132 goto error;
133
134 if (bset->n_eq == 0)
136
137 morph = isl_basic_set_full_compression(bset);
138
139 bset = isl_morph_basic_set(isl_morph_copy(morph), bset);
141
142 space = isl_morph_get_ran_space(morph);
143 space = isl_space_params(space);
144
145 top_pwf = bound->pwf;
146 top_pwf_tight = bound->pwf_tight;
147
148 space = isl_space_from_domain(space);
149 space = isl_space_add_dims(space, isl_dim_out, 1);
151 bound->type);
152 bound->pwf_tight = isl_pw_qpolynomial_fold_zero(space, bound->type);
153
155
156 morph = isl_morph_dom_params(morph);
157 morph = isl_morph_ran_params(morph);
158 morph = isl_morph_inverse(morph);
159
161 isl_morph_copy(morph));
163 bound->pwf_tight, morph);
164
165 isl_bound_add(bound, top_pwf);
166 isl_bound_add_tight(bound, top_pwf_tight);
167
168 return r;
169error:
170 isl_basic_set_free(bset);
172 return isl_stat_error;
173}
174
175/* Update bound->pwf and bound->pwf_tight with a bound
176 * of type bound->type on the (quasi-)polynomial "qp" over the domain "bset",
177 * by calling "unwrapped" on unwrapped versions of "bset and "qp".
178 * If "qp" is a polynomial, then "unwrapped" will also be called
179 * on a polynomial.
180 *
181 * If the original problem did not have a wrapped relation in the domain,
182 * then call "unwrapped" directly.
183 *
184 * Otherwise, the bound should be computed over the range
185 * of the wrapped relation. Temporarily treat the domain dimensions
186 * of this wrapped relation as parameters, compute a bound using "unwrapped"
187 * in terms of these and the original parameters,
188 * turn the parameters back into set dimensions and
189 * add the results to bound->pwf and bound->pwf_tight.
190 *
191 * Note that even though "bset" is known to live in the same space
192 * as the domain of "qp", the names of the set dimensions
193 * may be different (or missing). Make sure the naming is exactly
194 * the same before turning these dimensions into parameters
195 * to ensure that the spaces are still the same after
196 * this operation.
197 */
200 isl_stat (*unwrapped)(__isl_take isl_basic_set *bset,
202 struct isl_bound *bound)
203{
204 isl_space *space;
206 isl_pw_qpolynomial_fold *top_pwf_tight;
207 isl_size nparam;
208 isl_size n_in;
209 isl_stat r;
210
211 if (!bound->wrapping)
212 return unwrapped(bset, qp, bound);
213
214 nparam = isl_space_dim(bound->dim, isl_dim_param);
215 n_in = isl_space_dim(bound->dim, isl_dim_in);
216 if (nparam < 0 || n_in < 0)
217 goto error;
218
220 bset = isl_basic_set_reset_space(bset, space);
221
222 bset = isl_basic_set_move_dims(bset, isl_dim_param, nparam,
223 isl_dim_set, 0, n_in);
225 isl_dim_in, 0, n_in);
226
227 space = isl_basic_set_get_space(bset);
228 space = isl_space_params(space);
229
230 top_pwf = bound->pwf;
231 top_pwf_tight = bound->pwf_tight;
232
233 space = isl_space_from_domain(space);
234 space = isl_space_add_dims(space, isl_dim_out, 1);
236 bound->type);
237 bound->pwf_tight = isl_pw_qpolynomial_fold_zero(space, bound->type);
238
239 r = unwrapped(bset, qp, bound);
240
242 isl_space_copy(bound->dim));
243 bound->pwf_tight = isl_pw_qpolynomial_fold_reset_space(bound->pwf_tight,
244 isl_space_copy(bound->dim));
245
246 isl_bound_add(bound, top_pwf);
247 isl_bound_add_tight(bound, top_pwf_tight);
248
249 return r;
250error:
251 isl_basic_set_free(bset);
253 return isl_stat_error;
254}
255
256/* Update bound->pwf and bound->pwf_tight with a bound
257 * of type bound->type on the polynomial "poly" over the domain "bset",
258 * handling any wrapping in the domain.
259 */
267
268/* Is "bset" bounded and is "qp" a quasi-affine expression?
269 */
272{
273 isl_bool affine;
274
275 affine = isl_qpolynomial_isa_aff(qp);
276 if (affine < 0 || !affine)
277 return affine;
279}
280
281/* Update bound->pwf and bound->pwf_tight with a bound
282 * of type bound->type on the quasi-polynomial "qp" over the domain "bset",
283 * for the case where "bset" is bounded and
284 * "qp" is a quasi-affine expression and
285 * they have both been unwrapped already if needed.
286 *
287 * Consider the set of possible function values of "qp" over "bset" and
288 * take the minimum or maximum value in this set, depending
289 * on whether a lower or an upper bound is being computed.
290 * Do this by calling isl_set_lexmin_pw_multi_aff or
291 * isl_set_lexmax_pw_multi_aff, which compute a regular minimum or maximum
292 * since the set is one-dimensional.
293 * Since this computation is exact, the bound is always tight.
294 *
295 * Note that the minimum or maximum integer value is being computed,
296 * so if "qp" has some non-trivial denominator, then it needs
297 * to be multiplied out first and then taken into account again
298 * after computing the minimum or maximum.
299 */
332
333/* Update bound->pwf and bound->pwf_tight with a bound
334 * of type bound->type on the quasi-polynomial "qp" over the domain bound->bset,
335 * for the case where bound->bset is bounded and
336 * "qp" is a quasi-affine expression,
337 * handling any wrapping in the domain.
338 */
340 struct isl_bound *bound)
341{
343
345 return unwrap(bset, qp, &unwrapped_affine_qp, bound);
346}
347
348/* Update bound->pwf and bound->pwf_tight with a bound
349 * of type bound->type on the quasi-polynomial "qp" over the domain bound->bset.
350 *
351 * If bound->bset is bounded and if "qp" is a quasi-affine expression,
352 * then use a specialized version.
353 *
354 * Otherwise, treat the integer divisions as extra variables and
355 * compute a bound over the polynomial in terms of the original and
356 * the extra variables.
357 */
359{
360 struct isl_bound *bound = (struct isl_bound *)user;
361 isl_stat r;
362 isl_bool bounded_affine;
363
364 bounded_affine = is_bounded_affine(bound->bset, qp);
365 if (bounded_affine < 0)
366 qp = isl_qpolynomial_free(qp);
367 else if (bounded_affine)
368 return affine_qp(qp, bound);
369
373 return r;
374}
375
377{
378 struct isl_bound *bound = (struct isl_bound *)user;
379 isl_stat r;
380
381 bound->bset = bset;
383 &guarded_qp, user);
385 return r;
386}
387
390{
391 struct isl_bound *bound = (struct isl_bound *)user;
392
393 if (!set || !fold)
394 goto error;
395
397
398 bound->fold = fold;
400
402 goto error;
403
406
407 return isl_stat_ok;
408error:
411 return isl_stat_error;
412}
413
416{
417 isl_size nvar;
418 struct isl_bound bound;
419 isl_bool covers;
420
421 if (!pwf)
422 return NULL;
423
425
426 bound.wrapping = isl_space_is_wrapping(bound.dim);
427 if (bound.wrapping)
428 bound.dim = isl_space_unwrap(bound.dim);
429 nvar = isl_space_dim(bound.dim, isl_dim_out);
430 if (nvar < 0)
431 bound.dim = isl_space_free(bound.dim);
432 bound.dim = isl_space_domain(bound.dim);
435
436 if (nvar == 0) {
437 if (tight)
440 }
441
443 enum isl_fold type = pwf->type;
445 if (tight)
448 }
449
451 pwf->type);
453 pwf->type);
454 bound.check_tight = !!tight;
455
457 guarded_fold, &bound) < 0)
458 goto error;
459
460 covers = isl_pw_qpolynomial_fold_covers(bound.pwf_tight, bound.pwf);
461 if (covers < 0)
462 goto error;
463
464 if (tight)
465 *tight = covers;
466
469
470 if (covers) {
472 return bound.pwf_tight;
473 }
474
475 bound.pwf = isl_pw_qpolynomial_fold_fold(bound.pwf, bound.pwf_tight);
476
477 return bound.pwf;
478error:
483 return NULL;
484}
485
495
501
503{
504 struct isl_union_bound_data *data = user;
506
508 data->tight ? &data->tight : NULL);
510 data->res, pwf);
511
512 return isl_stat_ok;
513}
514
518{
519 isl_space *space;
520 struct isl_union_bound_data data = { type, 1, NULL };
521
522 if (!upwqp)
523 return NULL;
524
525 if (!tight)
526 data.tight = isl_bool_false;
527
531 &bound_pw, &data) < 0)
532 goto error;
533
535 if (tight)
536 *tight = data.tight;
537
538 return data.res;
539error:
542 return NULL;
543}
__isl_overload __isl_give isl_aff * isl_aff_scale_val(__isl_take isl_aff *aff, __isl_take isl_val *v)
Definition isl_aff.c:2075
__isl_give isl_val * isl_aff_get_denominator_val(__isl_keep isl_aff *aff)
Definition isl_aff.c:819
__isl_overload __isl_give isl_pw_aff * isl_pw_aff_scale_down_val(__isl_take isl_pw_aff *pa, __isl_take isl_val *f)
__isl_null isl_pw_multi_aff * isl_pw_multi_aff_free(__isl_take isl_pw_multi_aff *pma)
__isl_export __isl_give isl_pw_aff * isl_pw_multi_aff_get_at(__isl_keep isl_pw_multi_aff *pma, int pos)
isl_stat isl_stat_non_null(void *obj)
Definition isl_ctx.c:34
#define __isl_take
Definition ctx.h:22
isl_stat
Definition ctx.h:84
@ isl_stat_error
Definition ctx.h:85
@ isl_stat_ok
Definition ctx.h:86
#define __isl_give
Definition ctx.h:19
#define __isl_keep
Definition ctx.h:25
int isl_size
Definition ctx.h:97
isl_bool
Definition ctx.h:89
@ isl_bool_false
Definition ctx.h:91
@ isl_bool_true
Definition ctx.h:92
isl_stat isl_stat void * user
Definition hmap.h:39
isl_stat isl_qpolynomial_bound_on_domain_bernstein(__isl_take isl_basic_set *bset, __isl_take isl_qpolynomial *poly, struct isl_bound *bound)
static isl_stat guarded_poly_bound(__isl_take isl_basic_set *bset, __isl_take isl_qpolynomial *poly, void *user)
Definition isl_bound.c:260
__isl_give isl_pw_qpolynomial_fold * isl_qpolynomial_cst_bound(__isl_take isl_basic_set *bset, __isl_take isl_qpolynomial *poly, enum isl_fold type, isl_bool *tight)
Definition isl_bound.c:26
isl_stat isl_bound_add(struct isl_bound *bound, __isl_take isl_pw_qpolynomial_fold *pwf)
Definition isl_bound.c:45
static isl_stat add_constant_poly(__isl_take isl_basic_set *bset, __isl_take isl_qpolynomial *poly, struct isl_bound *bound)
Definition isl_bound.c:67
isl_stat isl_bound_add_tight(struct isl_bound *bound, __isl_take isl_pw_qpolynomial_fold *pwf)
Definition isl_bound.c:55
static isl_bool is_bounded_affine(__isl_keep isl_basic_set *bset, __isl_keep isl_qpolynomial *qp)
Definition isl_bound.c:270
static isl_stat affine_qp(__isl_take isl_qpolynomial *qp, struct isl_bound *bound)
Definition isl_bound.c:339
static isl_stat unwrapped_affine_qp(__isl_take isl_basic_set *bset, __isl_take isl_qpolynomial *qp, struct isl_bound *bound)
Definition isl_bound.c:300
static isl_stat compressed_guarded_poly_bound(__isl_take isl_basic_set *bset, __isl_take isl_qpolynomial *poly, struct isl_bound *bound)
Definition isl_bound.c:87
static isl_stat guarded_qp(__isl_take isl_qpolynomial *qp, void *user)
Definition isl_bound.c:358
__isl_give isl_union_pw_qpolynomial_fold * isl_union_pw_qpolynomial_bound(__isl_take isl_union_pw_qpolynomial *upwqp, enum isl_fold type, isl_bool *tight)
Definition isl_bound.c:515
static isl_stat bound_pw(__isl_take isl_pw_qpolynomial *pwqp, void *user)
Definition isl_bound.c:502
__isl_give isl_pw_qpolynomial_fold * isl_pw_qpolynomial_fold_bound(__isl_take isl_pw_qpolynomial_fold *pwf, isl_bool *tight)
Definition isl_bound.c:414
static isl_stat unwrapped_guarded_poly_bound(__isl_take isl_basic_set *bset, __isl_take isl_qpolynomial *poly, struct isl_bound *bound)
Definition isl_bound.c:120
__isl_give isl_pw_qpolynomial_fold * isl_pw_qpolynomial_bound(__isl_take isl_pw_qpolynomial *pwqp, enum isl_fold type, isl_bool *tight)
Definition isl_bound.c:486
static isl_stat guarded_fold(__isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold, void *user)
Definition isl_bound.c:388
static isl_stat basic_guarded_fold(__isl_take isl_basic_set *bset, void *user)
Definition isl_bound.c:376
isl_bool isl_pw_qpolynomial_fold_covers(__isl_keep isl_pw_qpolynomial_fold *pwf1, __isl_keep isl_pw_qpolynomial_fold *pwf2)
Definition isl_fold.c:1543
__isl_give isl_basic_set * isl_basic_set_reset_space(__isl_take isl_basic_set *bset, __isl_take isl_space *space)
Definition isl_map.c:6443
#define isl_set
#define isl_basic_set
__isl_give isl_morph * isl_basic_set_full_compression(__isl_keep isl_basic_set *bset)
Definition isl_morph.c:770
__isl_give isl_space * isl_morph_get_ran_space(__isl_keep isl_morph *morph)
Definition isl_morph.c:226
__isl_give isl_morph * isl_morph_inverse(__isl_take isl_morph *morph)
Definition isl_morph.c:743
__isl_give isl_morph * isl_morph_ran_params(__isl_take isl_morph *morph)
Definition isl_morph.c:333
__isl_give isl_morph * isl_morph_dom_params(__isl_take isl_morph *morph)
Definition isl_morph.c:310
__isl_give isl_basic_set * isl_morph_basic_set(__isl_take isl_morph *morph, __isl_take isl_basic_set *bset)
Definition isl_morph.c:645
__isl_give isl_morph * isl_morph_copy(__isl_keep isl_morph *morph)
Definition isl_morph.c:59
static struct isl_arg_choice bound[]
Definition isl_options.c:39
int isl_qpolynomial_degree(__isl_keep isl_qpolynomial *poly)
__isl_give isl_qpolynomial * isl_qpolynomial_morph_domain(__isl_take isl_qpolynomial *qp, __isl_take isl_morph *morph)
__isl_give isl_pw_qpolynomial_fold * isl_pw_qpolynomial_fold_morph_domain(__isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_morph *morph)
isl_stat isl_qpolynomial_bound_on_domain_range(__isl_take isl_basic_set *bset, __isl_take isl_qpolynomial *poly, struct isl_bound *bound)
Definition isl_range.c:542
const char * pwqp
Definition isl_test.c:3636
const char * poly
Definition isl_test.c:3868
enum isl_fold type
Definition isl_test.c:3867
const char * pa
Definition isl_test.c:7173
const char * set
Definition isl_test.c:1364
int tight
Definition isl_test.c:3866
const char * aff
Definition isl_test.c:7130
__isl_give isl_basic_map * isl_basic_map_from_aff(__isl_take isl_aff *aff)
__isl_export __isl_give isl_basic_map * isl_basic_map_intersect_domain(__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *bset)
Definition isl_map.c:4118
__isl_give isl_basic_set * isl_basic_map_range(__isl_take isl_basic_map *bmap)
Definition isl_map.c:6635
#define ISL_BOUND_RANGE
Definition options.h:25
__isl_give isl_space * isl_pw_qpolynomial_fold_get_domain_space(__isl_keep isl_pw_qpolynomial_fold *pwf)
__isl_give isl_pw_qpolynomial_fold * isl_pw_qpolynomial_fold_fold(__isl_take isl_pw_qpolynomial_fold *pwf1, __isl_take isl_pw_qpolynomial_fold *pwf2)
Definition isl_fold.c:1115
__isl_null isl_qpolynomial_fold * isl_qpolynomial_fold_free(__isl_take isl_qpolynomial_fold *fold)
Definition isl_fold.c:1035
__isl_give isl_union_pw_qpolynomial_fold * isl_union_pw_qpolynomial_fold_zero(__isl_take isl_space *space, enum isl_fold type)
isl_stat isl_pw_qpolynomial_fold_foreach_lifted_piece(__isl_keep isl_pw_qpolynomial_fold *pwf, isl_stat(*fn)(__isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold, void *user), void *user)
__isl_give isl_pw_qpolynomial_fold * isl_pw_qpolynomial_fold_reset_space(__isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_space *space)
isl_stat isl_qpolynomial_fold_foreach_qpolynomial(__isl_keep isl_qpolynomial_fold *fold, isl_stat(*fn)(__isl_take isl_qpolynomial *qp, void *user), void *user)
Definition isl_fold.c:1695
__isl_give isl_qpolynomial * isl_qpolynomial_move_dims(__isl_take isl_qpolynomial *qp, enum isl_dim_type dst_type, unsigned dst_pos, enum isl_dim_type src_type, unsigned src_pos, unsigned n)
__isl_give isl_space * isl_qpolynomial_get_domain_space(__isl_keep isl_qpolynomial *qp)
__isl_null isl_qpolynomial * isl_qpolynomial_free(__isl_take isl_qpolynomial *qp)
isl_stat isl_qpolynomial_as_polynomial_on_domain(__isl_keep isl_qpolynomial *qp, __isl_keep isl_basic_set *bset, isl_stat(*fn)(__isl_take isl_basic_set *bset, __isl_take isl_qpolynomial *poly, void *user), void *user)
__isl_give isl_pw_qpolynomial_fold * isl_pw_qpolynomial_fold_alloc(enum isl_fold type, __isl_take isl_set *set, __isl_take isl_qpolynomial_fold *fold)
__isl_give isl_pw_qpolynomial * isl_pw_qpolynomial_from_pw_aff(__isl_take isl_pw_aff *pwaff)
__isl_give isl_qpolynomial_fold * isl_qpolynomial_fold_alloc(enum isl_fold type, __isl_take isl_qpolynomial *qp)
Definition isl_fold.c:989
__isl_null isl_union_pw_qpolynomial_fold * isl_union_pw_qpolynomial_fold_free(__isl_take isl_union_pw_qpolynomial_fold *upwf)
isl_bool isl_pw_qpolynomial_fold_is_zero(__isl_keep isl_pw_qpolynomial_fold *pwf)
__isl_give isl_pw_qpolynomial_fold * isl_pw_qpolynomial_fold_project_domain_on_params(__isl_take isl_pw_qpolynomial_fold *pwf)
__isl_null isl_union_pw_qpolynomial * isl_union_pw_qpolynomial_free(__isl_take isl_union_pw_qpolynomial *upwqp)
isl_stat isl_union_pw_qpolynomial_foreach_pw_qpolynomial(__isl_keep isl_union_pw_qpolynomial *upwqp, isl_stat(*fn)(__isl_take isl_pw_qpolynomial *pwqp, void *user), void *user)
isl_bool isl_qpolynomial_isa_aff(__isl_keep isl_qpolynomial *qp)
__isl_null isl_pw_qpolynomial_fold * isl_pw_qpolynomial_fold_free(__isl_take isl_pw_qpolynomial_fold *pwf)
__isl_give isl_union_pw_qpolynomial_fold * isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold(__isl_take isl_union_pw_qpolynomial_fold *upwqp, __isl_take isl_pw_qpolynomial_fold *pwqp)
Definition isl_fold.c:1188
__isl_give isl_pw_qpolynomial_fold * isl_pw_qpolynomial_fold_zero(__isl_take isl_space *space, enum isl_fold type)
__isl_give isl_pw_qpolynomial_fold * isl_pw_qpolynomial_fold_from_pw_qpolynomial(enum isl_fold type, __isl_take isl_pw_qpolynomial *pwqp)
Definition isl_fold.c:1254
__isl_give isl_space * isl_union_pw_qpolynomial_get_space(__isl_keep isl_union_pw_qpolynomial *upwqp)
enum isl_fold isl_qpolynomial_fold_get_type(__isl_keep isl_qpolynomial_fold *fold)
Definition isl_fold.c:1632
__isl_give isl_aff * isl_qpolynomial_as_aff(__isl_take isl_qpolynomial *qp)
struct isl_union_pw_qpolynomial_fold isl_union_pw_qpolynomial_fold
struct isl_union_pw_qpolynomial isl_union_pw_qpolynomial
isl_fold
@ isl_fold_min
__isl_export __isl_give isl_basic_set * isl_basic_set_detect_equalities(__isl_take isl_basic_set *bset)
__isl_give isl_set * isl_set_make_disjoint(__isl_take isl_set *set)
__isl_give isl_space * isl_basic_set_get_space(__isl_keep isl_basic_set *bset)
Definition isl_map.c:422
__isl_null isl_basic_set * isl_basic_set_free(__isl_take isl_basic_set *bset)
Definition isl_map.c:1523
isl_bool isl_basic_set_is_bounded(__isl_keep isl_basic_set *bset)
__isl_null isl_set * isl_set_free(__isl_take isl_set *set)
Definition isl_map.c:4055
__isl_give isl_basic_set * isl_basic_set_move_dims(__isl_take isl_basic_set *bset, enum isl_dim_type dst_type, unsigned dst_pos, enum isl_dim_type src_type, unsigned src_pos, unsigned n)
Definition isl_map.c:4913
__isl_export isl_stat isl_set_foreach_basic_set(__isl_keep isl_set *set, isl_stat(*fn)(__isl_take isl_basic_set *bset, void *user), void *user)
Definition isl_map.c:11948
__isl_export __isl_give isl_pw_multi_aff * isl_set_lexmax_pw_multi_aff(__isl_take isl_set *set)
__isl_export __isl_give isl_pw_multi_aff * isl_set_lexmin_pw_multi_aff(__isl_take isl_set *set)
isl_ctx * isl_basic_set_get_ctx(__isl_keep isl_basic_set *bset)
Definition isl_map.c:387
__isl_constructor __isl_give isl_set * isl_set_from_basic_set(__isl_take isl_basic_set *bset)
Definition isl_map.c:4024
__isl_give isl_basic_set * isl_basic_set_copy(__isl_keep isl_basic_set *bset)
Definition isl_map.c:1465
__isl_null isl_space * isl_space_free(__isl_take isl_space *space)
Definition isl_space.c:478
__isl_give isl_space * isl_space_from_domain(__isl_take isl_space *space)
Definition isl_space.c:2242
__isl_export __isl_give isl_space * isl_space_params(__isl_take isl_space *space)
Definition isl_space.c:2305
__isl_give isl_space * isl_space_copy(__isl_keep isl_space *space)
Definition isl_space.c:469
__isl_export isl_bool isl_space_is_wrapping(__isl_keep isl_space *space)
Definition isl_space.c:2869
__isl_export __isl_give isl_space * isl_space_unwrap(__isl_take isl_space *space)
Definition isl_space.c:2951
isl_size isl_space_dim(__isl_keep isl_space *space, enum isl_dim_type type)
Definition isl_space.c:372
__isl_give isl_space * isl_space_add_dims(__isl_take isl_space *space, enum isl_dim_type type, unsigned n)
Definition isl_space.c:1262
__isl_export __isl_give isl_space * isl_space_domain(__isl_take isl_space *space)
Definition isl_space.c:2232
@ isl_dim_param
Definition space_type.h:15
@ isl_dim_in
Definition space_type.h:16
@ isl_dim_set
Definition space_type.h:18
@ isl_dim_out
Definition space_type.h:17
isl_basic_set * bset
Definition isl_bound.h:12
isl_pw_qpolynomial_fold * pwf
Definition isl_bound.h:16
isl_qpolynomial_fold * fold
Definition isl_bound.h:13
struct isl_options * opt
isl_union_pw_qpolynomial_fold * res
Definition isl_bound.c:499
enum isl_fold type
Definition isl_bound.c:497
static Signature range
static Signature unwrap
__isl_give isl_val * isl_val_copy(__isl_keep isl_val *v)
Definition isl_val.c:219