24#include <isl_config.h>
70 struct isl_tab *(*detect_nonnegative_parameters)(
80 int check,
int update);
85 int check,
int update);
203 for (partial = sol->
partial; partial; partial =
next) {
206 isl_multi_aff_free(partial->
ma);
243 isl_multi_aff_free(
ma);
258 if (rows < 0 || cols < 0)
261 for (i = 0; i < rows; ++i)
264 "final columns should be zero",
283 if (!
ma || dim < 0 || !
M)
288 for (i = 1; i <
M->n_row; ++i) {
295 ma = isl_multi_aff_set_aff(
ma, i - 1,
aff);
304 isl_multi_aff_free(
ma);
344 n_known, n_div - n_known);
368 sol->
add(sol, partial->
dom, partial->
ma);
395 if (!s1->
ma != !s2->
ma)
400 return isl_multi_aff_plain_is_equal(s1->
ma, s2->
ma);
450 isl_multi_aff_free(partial->
ma);
472 isl_multi_aff_copy(
ma1));
508 if (partial->
ma && partial->
next->
ma) {
564 if (sol->
level == 0) {
571error: sol->
error = 1;
619 for (i = 0; i <
n_row; ++i)
680 if (sol->
error || !tab)
714 "unbounded optimum",
goto error2);
722 "unbounded optimum",
goto error2);
728 for (j = 0; j < tab->
n_param; ++j) {
734 tab->
mat->
row[r][off + col]);
736 for (j = 0; j < tab->
n_div; ++j) {
742 tab->
mat->
row[r][off + col]);
781 if (!bset || !
sol->empty)
824 isl_multi_aff_free(
ma);
845 unsigned off = 2 + tab->
M;
848 for (i = 0; i < tab->
n_param; ++i) {
856 for (i = 0; i < tab->
n_div; ++i) {
862 tab->
mat->
row[row][off + col]);
876 unsigned off = 2 + tab->
M;
894 tab->
mat->
row[row2][off + col]))
931 int len = div->size - 2;
965 isl_seq_neg(div->el + 1, div->el + 1, div->size - 1);
967 isl_seq_fdiv_r(div->el + 1, div->el + 1, div->el[0], div->size - 1);
994 isl_seq_fdiv_r(div->el + 1, div->el + 1, div->el[0], div->size - 1);
1020 div_pos = 1 +
total - bset->n_div + div;
1059 1 + tab->
M + tab->
n_col);
1064 tab->
mat->
row[row][2 + tab->
M + dcol], 1);
1085 unsigned off = 2 + tab->
M;
1096 for (i = 0; i < tab->
n_param; ++i) {
1108 for (i = 0; i < tab->
n_div; ++i) {
1134 unsigned off = 2 + tab->
M;
1145 for (i = 0; i < tab->
n_param; ++i) {
1157 for (i = 0; i < tab->
n_div; ++i) {
1188 int row,
int col1,
int col2,
isl_int tmp)
1193 tr = tab->
mat->
row[row] + 2 + tab->
M;
1213 if (s1 == 0 && s2 == 0)
1270 int col = tab->
n_col;
1274 tr = tab->
mat->
row[row] + 2 + tab->
M;
1285 if (col == tab->
n_col)
1343 unsigned off = 2 + tab->
M;
1348 for (col = tab->
n_dead; col < tab->
n_col; ++col) {
1363 fprintf(stderr,
"lexneg column %d (row %d)\n",
1367 fprintf(stderr,
"zero column %d\n", col);
1396 tr = tab->
mat->
row[row] + 2 + tab->
M;
1430 if (col >= tab->
n_col) {
1468 unsigned off = 2 + tab->
M;
1541 unsigned off = 2 + tab->
M;
1552 unsigned off = 2 + tab->
M;
1555 for (col = tab->
n_dead; col < tab->
n_col; ++col) {
1700 unsigned off = 2 + tab->
M;
1702 for (i = 0; i < tab->
n_param; ++i) {
1711 for (i = 0; i < tab->
n_div; ++i) {
1727 unsigned off = 2 + tab->
M;
1830 unsigned off = 2 + tab->
M;
1845 for (i = 0; i < tab->
n_col; ++i)
1877 int cutting_strategy)
1899 if (cutting_strategy ==
CUT_ONE)
1933 1 + tab->
n_var, &v);
1935 if (eq ? (
sgn == 0) : (
sgn >= 0))
1961 for (i = 0; i < tab->
n_var; ++i) {
2029 for (i = tab->
n_outside; i < tab->n_sample; ++i) {
2032 1 + tab->
n_var, &v);
2034 if (eq ? (
sgn == 0) : (
sgn >= 0))
2067 div->size - 1, &samples->
row[i][samples->
n_col - 1]);
2069 samples->
row[i][samples->
n_col - 1], div->el[0]);
2072 1 + tab->
n_var - 1, 1);
2098 if (!tab || !context_tab)
2137 for (i = 0; i <
n_div; ++i) {
2161 d =
find_div(context_tab, div->el + 1, div->el[0]);
2203 unsigned off = 2 + tab->
M;
2231 for (i = 0; i < tab->
n_param; ++i) {
2240 for (i = 0; i < tab->
n_div; ++i) {
2249 for (i = 0; i < tab->
n_col; ++i) {
2265 r_row[0], tab->
mat->
row[d_row] + 1,
2266 off - 1 + tab->
n_col);
2323 tab->
n_param = dom_total - dom->n_div;
2324 tab->
n_div = dom->n_div;
2350 if (!tab || tab->
empty)
2363 if (!tab || tab->
empty)
2438 for (row = tab->
n_redundant; row < tab->n_row; ++row) {
2456 if (!context_tab->
empty &&
2462 if (best == -1 || r > best_r) {
2489 int check,
int update)
2512 int check,
int update)
2556 for (i = tab->
n_outside; i < tab->n_sample; ++i) {
2558 1 + tab->
n_var, &tmp);
2560 if (
sgn > 0 || (
sgn == 0 && strict)) {
2723 if (context_tab->
n_var == 0)
2737 for (i = 0; i < context_tab->
n_var; ++i) {
2742 if (!context_tab->
empty &&
2755 if (context_tab->
M &&
n == context_tab->
n_var) {
2930 for (i = 0; i < bset->n_ineq; ++i) {
2932 for (j = 0; j < dim; ++j) {
2936 bset->ineq[i][1 + j]);
2942 for (i = 0; i < bset->n_ineq; ++i)
2977 for (i = 0; i < bset->n_eq; ++i)
2980 for (i = 0; i < bset->n_ineq; ++i)
3005 if (!sample || sample->
size > 0)
3076 if (sample->
size == 0) {
3119 int check,
int update)
3173 for (i = 0; i < dim; ++i) {
3182 for (i = 0; i < dim; ++i) {
3203 int check,
int update)
3279 }
else if (cgbr->
cone) {
3297 if (tab->
n_var == 0)
3300 for (i = tab->
n_var - 1; i >= 0; --i) {
3331 struct isl_tab *tab,
unsigned first)
3365 if (j < 0 || j < tab->n_dead ||
3547 }
else if (cgbr->
cone) {
3665 if (first < 0 || n_div < 0)
3667 context->n_unknown = n_div - first;
3729 if (!sol_map->
empty)
3734 return &sol_map->
sol;
3747 unsigned off = 2 + tab->
M;
3749 for (j = tab->
n_dead; j < tab->n_col; ++j) {
3852 for (row2 = tab->
n_redundant; row2 < tab->n_row; ++row2) {
3868 critical || strict);
3893 if (!critical && !strict)
3990 for (row = tab->
n_redundant; row < tab->n_row; ++row) {
4097 if (!tab || sol->
error)
4114 for (row = tab->
n_redundant; row < tab->n_row; ++row) {
4128 if (row < tab->n_row)
4254 for (row = tab->
n_redundant; row < tab->n_row; ++row) {
4326 if (b_v_div < 0 || d_v_div < 0 || n_div < 0)
4335 for (i = 0; i < n_div; ++i) {
4339 (b_v_div - d_v_div) + n_div) != -1)
4341 if (
isl_seq_eq(bmap->div[i], dom->div[div], 2 + d_v_div))
4367 unsigned bmap_n_div;
4371 for (i = 0; i < dom->n_div; ++i) {
4377 if (
pos < bmap_n_div)
4380 other = bmap_n_div - common;
4381 if (dom->n_div - common > 0) {
4387 for (i = 0; i < dom->n_div; ++i) {
4391 if (
pos >= bmap_n_div) {
4398 if (
pos != other + i)
4433 sol =
init(bmap, dom, !!empty, max);
4504 for (i = 0; i < bmap->n_ineq; ++i) {
4505 for (j = 0; j <
n; ++j) {
4523 for (i = 0; i <
n; ++i) {
4526 if (occurrences[i] != 1)
4541 for (i = 0; i <
n; ++i) {
4544 for (j = 0; j < bmap->n_ineq; ++j) {
4590 int *first,
int *second)
4594 int *occurrences = NULL;
4609 if (nparam < 0 ||
n_in < 0 ||
n_out < 0 || n_div < 0)
4613 if (info.
n_in && !occurrences)
4616 for (i = 0; i < bmap->n_ineq; ++i) {
4619 info.
val = bmap->ineq[i] + 1 + info.
n_in;
4634 entry->
data = &bmap->ineq[i];
4637 if (i < bmap->n_ineq) {
4668 for (j = 0; j <
var->n_row; ++j) {
4715 for (i = 0; i <
var->n_row; ++i) {
4754 pos = cst->n_col - 1;
4759 for (i = 0; i < bmap->n_div; ++i)
4763 for (i = 0; i < bmap->n_eq; ++i)
4767 for (i = 0; i < bmap->n_ineq; ++i) {
4776 for (j = 0; j < cst->n_row; ++j)
4777 if (
isl_seq_eq(bmap->ineq[i], cst->row[j], cst->n_col))
4779 if (j >= cst->n_row)
4808 for (i = 0; i <
set->n; ++i) {
4841 if (
n_in < 0 || !min_expr || !cst)
4848 for (i = 0; i < opt->n; ++i) {
4919 *empty =
split(*empty,
4960 if (n_div < 0 ||
n_out < 0)
4992 for (i = 0; i < len; ++i) {
5073 for (i = 0; i < data->
n_region; ++i) {
5093 for (i = 0; i < n_op; ++i)
5123 for (i =
n_zero; i < n_op; ++i)
5139 for (; i >=
n_zero; --i) {
5267 for (i = 0; i < level; ++i)
5318 return local->
side >= 2 * local->
n;
5368 "nesting level too deep",
5373 2 * local->
n + 2 * data->
n_op) < 0)
5433 base = 2 * (side/2);
5435 if (side == base && base >= 2 &&
5436 fix_zero(data->
tab, region, base / 2 - 1, data) < 0)
5497 int (*conflict)(
int con,
void *
user),
void *
user)
5513 while (level >= 0) {
5606 return tl ? tl->tab->n_var : -1;
5623 n_var = tl->tab->n_var;
5683 if (!bset || !
sol->empty)
5761 if (!sol_pma->
empty)
5766 return &sol_pma->
sol;
5817 for (i = 0; i < maff->n; ++i) {
5822 if (involves < 0 || involves)
5865 for (i = 0; i <
var->n_row; ++i) {
5916 if (!opt || !min_expr || !cst)
5926 for (i = 0; i < opt->n; ++i) {
5931 isl_multi_aff_copy(opt->p[i].maff));
5937 n_in - 1, min_expr_pa);
6008#define TYPE isl_pw_multi_aff
6010#define SUFFIX _pw_multi_aff
polly print import Polly Print Scop import result
static RegisterPass< ScopPrinterWrapperPass > M("dot-scops", "Polly - Print Scops of function")
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_empty(__isl_take isl_space *space)
__isl_export __isl_give isl_space * isl_pw_multi_aff_get_space(__isl_keep isl_pw_multi_aff *pma)
__isl_null isl_aff * isl_aff_free(__isl_take isl_aff *aff)
__isl_export __isl_give isl_pw_multi_aff * isl_pw_multi_aff_intersect_domain(__isl_take isl_pw_multi_aff *pma, __isl_take isl_set *set)
isl_bool isl_pw_multi_aff_is_equal(__isl_keep isl_pw_multi_aff *pma1, __isl_keep isl_pw_multi_aff *pma2)
__isl_give isl_pw_aff * isl_pw_aff_alloc(__isl_take isl_set *set, __isl_take isl_aff *aff)
__isl_null isl_pw_aff * isl_pw_aff_free(__isl_take isl_pw_aff *pwaff)
isl_size isl_pw_multi_aff_dim(__isl_keep isl_pw_multi_aff *pma, enum isl_dim_type type)
__isl_null isl_pw_multi_aff * isl_pw_multi_aff_free(__isl_take isl_pw_multi_aff *pma)
isl_bool isl_aff_involves_dims(__isl_keep isl_aff *aff, enum isl_dim_type type, unsigned first, unsigned n)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_copy(__isl_keep isl_pw_multi_aff *pma)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_alloc(__isl_take isl_set *set, __isl_take isl_multi_aff *maff)
struct isl_multi_aff isl_multi_aff
static __isl_give isl_basic_map * bset_to_bmap(__isl_take isl_basic_set *bset)
#define isl_calloc_type(ctx, type)
#define ISL_FL_ISSET(l, f)
#define isl_die(ctx, errno, msg, code)
void isl_ctx_deref(struct isl_ctx *ctx)
#define isl_assert(ctx, test, code)
isl_bool isl_bool_ok(int b)
#define isl_calloc_array(ctx, type, n)
#define ISL_F_ISSET(p, f)
#define isl_alloc_type(ctx, type)
void isl_ctx_ref(struct isl_ctx *ctx)
void isl_hash_table_free(struct isl_ctx *ctx, struct isl_hash_table *table)
struct isl_hash_table_entry * isl_hash_table_find(struct isl_ctx *ctx, struct isl_hash_table *table, uint32_t key_hash, isl_bool(*eq)(const void *entry, const void *val), const void *val, int reserve)
struct isl_hash_table * isl_hash_table_alloc(struct isl_ctx *ctx, int min_size)
__isl_export __isl_give ISL_HMAP __isl_take ISL_KEY __isl_take ISL_VAL * val
isl_stat isl_stat(*) void user)
void GMPZAPI() gcd(mp_int rop, mp_int op1, mp_int op2)
int GMPQAPI() sgn(mp_rat op)
void GMPQAPI() init(mp_rat x)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_substitute(__isl_take isl_pw_multi_aff *pma, unsigned pos, __isl_keep isl_pw_aff *subs)
__isl_give isl_aff * isl_aff_normalize(__isl_take isl_aff *aff)
__isl_give isl_aff * isl_aff_alloc(__isl_take isl_local_space *ls)
__isl_give isl_basic_map * isl_basic_map_from_multi_aff2(__isl_take isl_multi_aff *maff, int rational)
__isl_give isl_pw_aff * isl_pw_aff_alloc_size(__isl_take isl_space *space, int n)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_add_disjoint(__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_project_out(__isl_take isl_pw_multi_aff *pma, enum isl_dim_type type, unsigned first, unsigned n)
__isl_give isl_pw_aff * isl_pw_aff_add_disjoint(__isl_take isl_pw_aff *pwaff1, __isl_take isl_pw_aff *pwaff2)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_reset_space(__isl_take isl_pw_multi_aff *pwmaff, __isl_take isl_space *space)
struct isl_tab * isl_tab_detect_equalities(struct isl_tab *tab, struct isl_tab *tab_cone)
static __isl_give isl_ast_expr * var(struct isl_ast_add_term_data *data, enum isl_dim_type type, int pos)
#define isl_int_is_nonneg(i)
#define isl_int_is_zero(i)
#define isl_int_is_one(i)
#define isl_int_is_pos(i)
#define isl_int_is_negone(i)
#define isl_int_is_neg(i)
#define isl_int_gcd(r, i, j)
#define isl_int_neg(r, i)
#define isl_int_add_ui(r, i, j)
#define isl_int_add(r, i, j)
#define isl_int_is_divisible_by(i, j)
#define isl_int_fdiv_r(r, i, j)
#define isl_int_set(r, i)
#define isl_int_divexact(r, i, j)
#define isl_int_mul(r, i, j)
#define isl_int_set_si(r, i)
#define isl_int_sub_ui(r, i, j)
#define isl_int_fdiv_q(r, i, j)
#define isl_int_sub(r, i, j)
#define isl_int_submul(r, i, j)
__isl_give isl_basic_set * isl_basic_set_alloc_space(__isl_take isl_space *space, unsigned extra, unsigned n_eq, unsigned n_ineq)
isl_size isl_basic_map_var_offset(__isl_keep isl_basic_map *bmap, enum isl_dim_type type)
__isl_give isl_basic_map * isl_basic_map_add_ineq(__isl_take isl_basic_map *bmap, isl_int *ineq)
__isl_give isl_set * isl_set_alloc_space(__isl_take isl_space *space, int n, unsigned flags)
__isl_give isl_basic_set * isl_basic_set_dup(__isl_keep isl_basic_set *bset)
__isl_give isl_set * isl_set_add_basic_set(__isl_take isl_set *set, __isl_take isl_basic_set *bset)
int isl_basic_set_first_unknown_div(__isl_keep isl_basic_set *bset)
__isl_give isl_map * isl_map_reset_space(__isl_take isl_map *map, __isl_take isl_space *space)
int isl_basic_set_alloc_equality(__isl_keep isl_basic_set *bset)
static unsigned pos(__isl_keep isl_space *space, enum isl_dim_type type)
int isl_basic_map_alloc_div(__isl_keep isl_basic_map *bmap)
isl_size isl_basic_set_var_offset(__isl_keep isl_basic_set *bset, enum isl_dim_type type)
__isl_give isl_basic_map * isl_basic_map_cow(__isl_take isl_basic_map *bmap)
__isl_give isl_basic_map * isl_basic_map_insert_div(__isl_take isl_basic_map *bmap, int pos, __isl_keep isl_vec *div)
__isl_give isl_basic_set * isl_basic_set_sort_divs(__isl_take isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_underlying_set(__isl_take isl_basic_set *bset)
__isl_give isl_map * isl_map_alloc_space(__isl_take isl_space *space, int n, unsigned flags)
__isl_give isl_set * isl_set_grow(__isl_take isl_set *set, int n)
__isl_give isl_basic_map * isl_basic_map_extend(__isl_take isl_basic_map *base, unsigned extra, unsigned n_eq, unsigned n_ineq)
__isl_give isl_map * isl_map_add_basic_map(__isl_take isl_map *map, __isl_take isl_basic_map *bmap)
__isl_give isl_map * isl_map_grow(__isl_take isl_map *map, int n)
__isl_give isl_basic_map * isl_basic_map_swap_div(__isl_take isl_basic_map *bmap, int a, int b)
int isl_basic_set_alloc_inequality(__isl_keep isl_basic_set *bset)
#define ISL_BASIC_MAP_EMPTY
#define ISL_BASIC_MAP_RATIONAL
__isl_give isl_basic_set * isl_basic_set_simplify(__isl_take isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_gauss(__isl_take isl_basic_set *bset, int *progress)
__isl_give isl_basic_set * isl_basic_set_finalize(__isl_take isl_basic_set *bset)
#define ISL_CONTEXT_LEXMIN
__isl_give isl_vec * isl_basic_set_sample_with_cone(__isl_take isl_basic_set *bset, __isl_take isl_basic_set *cone)
__isl_give isl_vec * isl_tab_sample(struct isl_tab *tab)
static int is_trivial(struct isl_sched_node *node, __isl_keep isl_vec *sol)
void isl_seq_fdiv_q(isl_int *dst, isl_int *src, isl_int m, unsigned len)
void isl_seq_combine(isl_int *dst, isl_int m1, isl_int *src1, isl_int m2, isl_int *src2, unsigned len)
void isl_seq_inner_product(isl_int *p1, isl_int *p2, unsigned len, isl_int *prod)
int isl_seq_first_non_zero(isl_int *p, unsigned len)
void isl_seq_scale_down(isl_int *dst, isl_int *src, isl_int m, unsigned len)
void isl_seq_gcd(isl_int *p, unsigned len, isl_int *gcd)
void isl_seq_fdiv_r(isl_int *dst, isl_int *src, isl_int m, unsigned len)
void isl_seq_clr(isl_int *p, unsigned len)
void isl_seq_scale(isl_int *dst, isl_int *src, isl_int m, unsigned len)
void isl_seq_cpy(isl_int *dst, isl_int *src, unsigned len)
uint32_t isl_seq_get_hash(isl_int *p, unsigned len)
int isl_seq_eq(isl_int *p1, isl_int *p2, unsigned len)
void isl_seq_neg(isl_int *dst, isl_int *src, unsigned len)
struct isl_tab * isl_tab_drop_sample(struct isl_tab *tab, int s)
int isl_tab_min_at_most_neg_one(struct isl_tab *tab, struct isl_tab_var *var)
void isl_tab_free(struct isl_tab *tab)
isl_stat isl_tab_push_basis(struct isl_tab *tab)
void isl_tab_clear_undo(struct isl_tab *tab)
int isl_tab_insert_var(struct isl_tab *tab, int r)
isl_stat isl_tab_track_bset(struct isl_tab *tab, __isl_take isl_basic_set *bset)
struct isl_tab * isl_tab_init_samples(struct isl_tab *tab)
int isl_tab_extend_vars(struct isl_tab *tab, unsigned n_new)
int isl_tab_add_sample(struct isl_tab *tab, __isl_take isl_vec *sample)
struct isl_tab_var * isl_tab_var_from_row(struct isl_tab *tab, int i)
isl_stat isl_tab_add_eq(struct isl_tab *tab, isl_int *eq)
int isl_tab_mark_redundant(struct isl_tab *tab, int row)
__isl_keep isl_basic_set * isl_tab_peek_bset(struct isl_tab *tab)
int isl_tab_pivot(struct isl_tab *tab, int row, int col)
isl_stat isl_tab_push_callback(struct isl_tab *tab, struct isl_tab_callback *callback)
int isl_tab_add_row(struct isl_tab *tab, isl_int *line)
struct isl_tab_undo * isl_tab_snap(struct isl_tab *tab)
int isl_tab_kill_col(struct isl_tab *tab, int col)
__isl_give isl_basic_set * isl_basic_set_update_from_tab(__isl_take isl_basic_set *bset, struct isl_tab *tab)
struct isl_tab * isl_tab_from_recession_cone(__isl_keep isl_basic_set *bset, int parametric)
isl_stat isl_tab_mark_empty(struct isl_tab *tab)
isl_stat isl_tab_add_ineq(struct isl_tab *tab, isl_int *ineq)
__isl_give isl_vec * isl_tab_get_sample_value(struct isl_tab *tab)
isl_ctx * isl_tab_get_ctx(struct isl_tab *tab)
int isl_tab_sample_is_integer(struct isl_tab *tab)
isl_bool isl_tab_need_undo(struct isl_tab *tab)
struct isl_tab * isl_tab_dup(struct isl_tab *tab)
struct isl_tab * isl_tab_alloc(struct isl_ctx *ctx, unsigned n_row, unsigned n_var, unsigned M)
isl_stat isl_tab_push(struct isl_tab *tab, enum isl_tab_undo_type type)
int isl_tab_row_is_redundant(struct isl_tab *tab, int row)
int isl_tab_detect_implicit_equalities(struct isl_tab *tab)
int isl_tab_insert_div(struct isl_tab *tab, int pos, __isl_keep isl_vec *div, isl_stat(*add_ineq)(void *user, isl_int *), void *user)
__isl_give struct isl_tab * isl_tab_from_basic_set(__isl_keep isl_basic_set *bset, int track)
isl_stat isl_tab_push_var(struct isl_tab *tab, enum isl_tab_undo_type type, struct isl_tab_var *var)
isl_stat isl_tab_save_samples(struct isl_tab *tab)
isl_stat isl_tab_rollback(struct isl_tab *tab, struct isl_tab_undo *snap)
int isl_tab_allocate_con(struct isl_tab *tab)
int isl_tab_extend_cons(struct isl_tab *tab, unsigned n_new)
static void sol_map_add_empty_wrap(struct isl_sol *sol, struct isl_basic_set *bset)
static struct isl_sol * basic_map_partial_lexopt_base_sol(__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max, struct isl_sol *(*init)(__isl_keep isl_basic_map *bmap, __isl_take isl_basic_set *dom, int track_empty, int max))
static void sol_pop_one(struct isl_sol *sol)
static void sol_pma_add_wrap(struct isl_sol *sol, __isl_take isl_basic_set *dom, __isl_take isl_multi_aff *ma)
static void find_solutions_main(struct isl_sol *sol, struct isl_tab *tab)
static void context_lex_add_ineq(struct isl_context *context, isl_int *ineq, int check, int update)
static struct isl_tab * context_gbr_peek_tab(struct isl_context *context)
static __isl_give isl_vec * ineq_for_div(__isl_keep isl_basic_set *bset, unsigned div)
static isl_stat combine_initial_if_equal(struct isl_sol *sol)
static int context_gbr_test_ineq(struct isl_context *context, isl_int *ineq)
static int last_var_col_or_int_par_col(struct isl_tab *tab, int row)
static isl_stat context_lex_add_ineq_wrap(void *user, isl_int *ineq)
static void sol_map_add_empty(struct isl_sol_map *sol, struct isl_basic_set *bset)
static struct isl_tab * add_lexmin_ineq(struct isl_tab *tab, isl_int *ineq)
static int context_gbr_detect_equalities(struct isl_context *context, struct isl_tab *tab)
static isl_stat fix_zero(struct isl_tab *tab, struct isl_trivial_region *region, int dir, struct isl_lexmin_data *data)
static __isl_give struct isl_tab * tab_for_lexmin(__isl_keep isl_basic_map *bmap, __isl_keep isl_basic_set *dom, unsigned M, int max)
static struct isl_tab * set_row_cst_to_div(struct isl_tab *tab, int row, int div)
static int integer_constant(struct isl_tab *tab, int row)
static void sol_pma_add_empty(struct isl_sol_pma *sol, __isl_take isl_basic_set *bset)
static int finished_all_cases(struct isl_local_region *local, struct isl_lexmin_data *data)
static int context_lex_is_ok(struct isl_context *context)
static isl_bool region_is_trivial(struct isl_tab *tab, int pos, __isl_keep isl_mat *trivial)
static int lexmin_col_pair(struct isl_tab *tab, int row, int col1, int col2, isl_int tmp)
static struct isl_sol * sol_pma_init(__isl_keep isl_basic_map *bmap, __isl_take isl_basic_set *dom, int track_empty, int max)
static int is_parametric_constant(struct isl_tab *tab, int row)
static isl_stat sol_init(struct isl_sol *sol, __isl_keep isl_basic_map *bmap, __isl_keep isl_basic_set *dom, int max)
static int last_non_zero_var_col(struct isl_tab *tab, isl_int *p)
static int first_non_integer_row(struct isl_tab *tab, int *f)
struct isl_context_op isl_context_gbr_op
struct isl_context_op isl_context_lex_op
static int context_gbr_is_empty(struct isl_context *context)
static int is_optimal(__isl_keep isl_vec *sol, int n_op)
static struct isl_tab * context_lex_detect_nonnegative_parameters(struct isl_context *context, struct isl_tab *tab)
static __isl_give isl_map * basic_map_partial_lexopt_base(__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max)
__isl_give isl_vec * isl_tab_basic_set_non_trivial_lexmin(__isl_take isl_basic_set *bset, int n_op, int n_region, struct isl_trivial_region *region, int(*conflict)(int con, void *user), void *user)
static void sol_push_sol(struct isl_sol *sol, __isl_take isl_basic_set *dom, __isl_take isl_multi_aff *ma)
__isl_null isl_tab_lexmin * isl_tab_lexmin_free(__isl_take isl_tab_lexmin *tl)
static __isl_give isl_pw_multi_aff * basic_map_partial_lexopt_symm_core_pw_multi_aff(__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max, __isl_take isl_mat *cst, __isl_take isl_space *map_space, __isl_take isl_space *set_space)
static isl_bool need_split_set(__isl_keep isl_set *set, __isl_keep isl_mat *cst)
static int sol_has_mergeable_solutions(struct isl_sol *sol)
static isl_stat init_lexmin_data(struct isl_lexmin_data *data, __isl_keep isl_basic_set *bset)
static void check_gbr_integer_feasible(struct isl_context_gbr *cgbr)
static int sample_is_finite(struct isl_tab *tab)
static int tab_has_valid_sample(struct isl_tab *tab, isl_int *ineq, int eq)
static __isl_give isl_pw_multi_aff * basic_map_partial_lexopt_base_pw_multi_aff(__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max)
static int is_critical(struct isl_tab *tab, int row)
static void scale_rows(struct isl_mat *mat, isl_int m, int n_row)
static struct isl_vec * gbr_get_shifted_sample(struct isl_context_gbr *cgbr)
static void sol_pma_add_empty_wrap(struct isl_sol *sol, __isl_take isl_basic_set *bset)
static int all_single_occurrence(__isl_keep isl_basic_map *bmap, int ineq, int n)
static enum isl_tab_row_sign row_sign(struct isl_tab *tab, struct isl_sol *sol, int row)
static int context_gbr_best_split(struct isl_context *context, struct isl_tab *tab)
int isl_tab_lexmin_dim(__isl_keep isl_tab_lexmin *tl)
static isl_stat better_next_side(struct isl_local_region *local, struct isl_lexmin_data *data)
static int context_lex_get_div(struct isl_context *context, struct isl_tab *tab, struct isl_vec *div)
static __isl_give isl_set * split(__isl_take isl_set *empty, __isl_take isl_set *min_expr, __isl_take isl_mat *cst)
static void context_gbr_discard(void *save)
static void find_in_pos(struct isl_sol *sol, struct isl_tab *tab, isl_int *ineq)
static void * context_gbr_save(struct isl_context *context)
static isl_bool same_solution(struct isl_partial_sol *s1, struct isl_partial_sol *s2)
static void update_outer_levels(struct isl_lexmin_data *data, int level)
static int get_div(struct isl_tab *tab, struct isl_context *context, struct isl_vec *div)
static int context_gbr_get_div(struct isl_context *context, struct isl_tab *tab, struct isl_vec *div)
static int first_neg(struct isl_tab *tab)
static struct isl_vec * get_row_split_div(struct isl_tab *tab, int row)
static enum isl_tab_row_sign tab_ineq_sign(struct isl_tab *tab, isl_int *ineq, int strict)
static isl_stat context_gbr_add_ineq_wrap(void *user, isl_int *ineq)
static int best_split(struct isl_tab *tab, struct isl_tab *context_tab)
static struct isl_sol * sol_map_init(__isl_keep isl_basic_map *bmap, __isl_take isl_basic_set *dom, int track_empty, int max)
static enum isl_next enter_level(int level, int init, struct isl_lexmin_data *data)
static int restore_lexmin(struct isl_tab *tab) WARN_UNUSED
static struct isl_tab * context_gbr_detect_nonnegative_parameters(struct isl_context *context, struct isl_tab *tab)
static struct isl_vec * gbr_get_sample(struct isl_context_gbr *cgbr)
static isl_bool context_lex_insert_div(struct isl_context *context, int pos, __isl_keep isl_vec *div)
static struct isl_context * isl_context_gbr_alloc(__isl_keep isl_basic_set *dom)
static void gbr_init_shifted(struct isl_context_gbr *cgbr)
static struct isl_tab * check_samples(struct isl_tab *tab, isl_int *ineq, int eq)
static __isl_give isl_pw_multi_aff * split_domain_pma(__isl_take isl_pw_multi_aff *opt, __isl_take isl_pw_aff *min_expr_pa, __isl_take isl_set *min_expr, __isl_take isl_mat *cst)
static __isl_give isl_basic_set * extract_domain(__isl_keep isl_basic_map *bmap, unsigned flags)
static __isl_null struct isl_context * context_gbr_free(struct isl_context *context)
static int next_non_integer_var(struct isl_tab *tab, int var, int *f)
static int row_is_parameter_var(struct isl_tab *tab, int row)
static __isl_give isl_map * basic_map_partial_lexopt_symm_core(__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max, __isl_take isl_mat *cst, __isl_take isl_space *map_space, __isl_take isl_space *set_space)
static __isl_give isl_vec * extract_sample_sequence(struct isl_tab *tab, int pos, int len)
static int context_lex_best_split(struct isl_context *context, struct isl_tab *tab)
static void sol_free(struct isl_sol *sol)
static void sol_pop(struct isl_sol *sol)
static isl_bool parallel_constraints(__isl_keep isl_basic_map *bmap, int *first, int *second)
static struct isl_vec * get_row_parameter_ineq(struct isl_tab *tab, int row)
static __isl_give isl_map * basic_map_partial_lexopt(__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max)
static void sol_map_free(struct isl_sol *sol)
static isl_bool need_split_basic_map(__isl_keep isl_basic_map *bmap, __isl_keep isl_mat *cst)
static void no_sol_in_strict(struct isl_sol *sol, struct isl_tab *tab, struct isl_vec *ineq)
static struct isl_tab * tab_detect_nonnegative_parameters(struct isl_tab *tab, struct isl_tab *context_tab)
static isl_bool need_substitution(__isl_keep isl_multi_aff *maff)
static int is_parameter_var(struct isl_tab *tab, int index)
static __isl_give isl_basic_set * select_minimum(__isl_take isl_basic_set *bset, __isl_keep isl_mat *var, int i)
static struct isl_tab * context_lex_peek_tab(struct isl_context *context)
static __isl_give int * count_occurrences(__isl_keep isl_basic_map *bmap, int n)
static void reset_any_to_unknown(struct isl_tab *tab)
static __isl_give isl_basic_map * align_context_divs(__isl_take isl_basic_map *bmap, __isl_keep isl_basic_set *dom)
static __isl_give isl_basic_set * drop_constant_terms(__isl_take isl_basic_set *bset)
static int is_strict(struct isl_vec *vec)
static void context_lex_discard(void *save)
static struct isl_context * isl_context_lex_alloc(struct isl_basic_set *dom)
static isl_stat combine_initial_into_second(struct isl_sol *sol)
static void sol_inc_level(struct isl_sol *sol)
static int force_better_solution(struct isl_tab *tab, __isl_keep isl_vec *sol, int n_op, int n_zero)
static struct isl_basic_set * context_gbr_peek_basic_set(struct isl_context *context)
static isl_bool need_split_basic_set(__isl_keep isl_basic_set *bset, __isl_keep isl_mat *cst)
static void check_lexpos(struct isl_tab *tab) __attribute__((unused))
static isl_bool equal_on_domain(__isl_keep isl_multi_aff *ma1, __isl_keep isl_multi_aff *ma2, __isl_keep isl_basic_set *dom)
static void context_gbr_invalidate(struct isl_context *context)
static int context_gbr_is_ok(struct isl_context *context)
static void swap_initial(struct isl_sol *sol)
static void sol_pma_add(struct isl_sol_pma *sol, __isl_take isl_basic_set *dom, __isl_take isl_multi_aff *maff)
static int lexmin_pivot_col(struct isl_tab *tab, int row)
static struct isl_tab * context_tab_for_lexmin(__isl_take isl_basic_set *bset)
static enum isl_tab_row_sign context_gbr_ineq_sign(struct isl_context *context, isl_int *ineq, int strict)
static void context_lex_restore(struct isl_context *context, void *save)
static int context_lex_detect_equalities(struct isl_context *context, struct isl_tab *tab)
static int add_cut(struct isl_tab *tab, int row)
static int add_parametric_cut(struct isl_tab *tab, int row, struct isl_context *context)
static void context_gbr_restore(struct isl_context *context, void *save)
static void context_lex_invalidate(struct isl_context *context)
static int use_shifted(struct isl_context_gbr *cgbr)
static void sol_map_add_wrap(struct isl_sol *sol, __isl_take isl_basic_set *dom, __isl_take isl_multi_aff *ma)
static void context_lex_add_eq(struct isl_context *context, isl_int *eq, int check, int update)
static int is_obviously_neg(struct isl_tab *tab, int row)
static isl_stat sol_dec_level_wrap(struct isl_tab_callback *cb)
static struct isl_tab * check_integer_feasible(struct isl_tab *tab)
static int single_occurrence(int n, isl_int *c, int *occurrences)
static struct isl_tab * add_gbr_eq(struct isl_tab *tab, isl_int *eq)
static void clear_lexmin_data(struct isl_lexmin_data *data)
static struct isl_basic_set * context_lex_peek_basic_set(struct isl_context *context)
static int integer_variable(struct isl_tab *tab, int row)
static int identical_parameter_line(struct isl_tab *tab, int row1, int row2)
static int find_div(struct isl_tab *tab, isl_int *div, isl_int denom)
static __isl_give isl_map * split_domain(__isl_take isl_map *opt, __isl_take isl_set *min_expr, __isl_take isl_mat *cst)
static isl_stat init_local_region(struct isl_local_region *local, int region, struct isl_lexmin_data *data)
static enum isl_tab_row_sign context_lex_ineq_sign(struct isl_context *context, isl_int *ineq, int strict)
static int is_obviously_nonneg(struct isl_tab *tab, int row)
static __isl_null struct isl_context * context_lex_free(struct isl_context *context)
static struct isl_tab * pos_neg(struct isl_tab *tab, struct isl_trivial_region *region, int side, struct isl_lexmin_data *data)
static int context_lex_test_ineq(struct isl_context *context, isl_int *ineq)
static __isl_give isl_set * set_minimum(__isl_take isl_space *space, __isl_take isl_mat *var)
static __isl_give isl_multi_aff * set_from_affine_matrix(__isl_take isl_multi_aff *ma, __isl_take isl_local_space *ls, __isl_take isl_mat *M)
static struct isl_tab * add_lexmin_valid_eq(struct isl_tab *tab, isl_int *eq)
static struct isl_vec * get_row_parameter_div(struct isl_tab *tab, int row)
static int col_is_parameter_var(struct isl_tab *tab, int col)
static struct isl_basic_set * sol_domain(struct isl_sol *sol)
__isl_give isl_tab_lexmin * isl_tab_lexmin_cut_to_integer(__isl_take isl_tab_lexmin *tl)
static __isl_give isl_pw_aff * set_minimum_pa(__isl_take isl_space *space, __isl_take isl_mat *var)
static isl_stat pick_side(struct isl_local_region *local, struct isl_lexmin_data *data)
static void sol_pma_free(struct isl_sol *sol)
static int context_lex_is_empty(struct isl_context *context)
static isl_bool context_gbr_insert_div(struct isl_context *context, int pos, __isl_keep isl_vec *div)
static int add_div(struct isl_tab *tab, struct isl_context *context, __isl_keep isl_vec *div)
static int propagate_equalities(struct isl_context_gbr *cgbr, struct isl_tab *tab, unsigned first)
static int report_conflict(struct isl_tab *tab, int row)
static void find_solutions(struct isl_sol *sol, struct isl_tab *tab)
static void * context_lex_save(struct isl_context *context)
static int add_lexmin_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED
__isl_give isl_vec * isl_tab_lexmin_get_solution(__isl_keep isl_tab_lexmin *tl)
static __isl_give isl_pw_multi_aff * basic_map_partial_lexopt_pw_multi_aff(__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max)
static int report_conflicting_constraint(struct isl_tab *tab, int con)
static void sol_dec_level(struct isl_sol *sol)
static void get_row_parameter_line(struct isl_tab *tab, int row, isl_int *line)
static void context_gbr_add_eq(struct isl_context *context, isl_int *eq, int check, int update)
static struct isl_tab * cut_to_integer_lexmin(struct isl_tab *tab, int cutting_strategy)
static void sol_map_add(struct isl_sol_map *sol, __isl_take isl_basic_set *dom, __isl_take isl_multi_aff *ma)
static int find_context_div(__isl_keep isl_basic_map *bmap, __isl_keep isl_basic_set *dom, unsigned div)
static void sol_push_sol_mat(struct isl_sol *sol, __isl_take isl_basic_set *dom, __isl_take isl_mat *M)
static void normalize_div(__isl_keep isl_vec *div)
static int integer_parameter(struct isl_tab *tab, int row)
static void sol_add(struct isl_sol *sol, struct isl_tab *tab)
static isl_bool context_tab_insert_div(struct isl_tab *tab, int pos, __isl_keep isl_vec *div, isl_stat(*add_ineq)(void *user, isl_int *), void *user)
static int first_trivial_region(struct isl_lexmin_data *data)
__isl_give isl_tab_lexmin * isl_tab_lexmin_add_eq(__isl_take isl_tab_lexmin *tl, isl_int *eq)
static void add_gbr_ineq(struct isl_context_gbr *cgbr, isl_int *ineq)
static isl_bool constraint_equal(const void *entry, const void *val)
__isl_give isl_tab_lexmin * isl_tab_lexmin_from_basic_set(__isl_take isl_basic_set *bset)
static isl_stat check_final_columns_are_zero(__isl_keep isl_mat *M, unsigned first)
static void context_gbr_add_ineq(struct isl_context *context, isl_int *ineq, int check, int update)
static struct isl_context * isl_context_alloc(__isl_keep isl_basic_set *dom)
static int is_constant(struct isl_tab *tab, int row)
static __isl_give isl_union_map * total(__isl_take isl_union_map *umap, __isl_give isl_map *(*fn)(__isl_take isl_map *))
isl_bool isl_vec_is_zero(__isl_keep isl_vec *vec)
__isl_give isl_local_space * isl_local_space_from_space(__isl_take isl_space *space)
__isl_give isl_local_space * isl_local_space_drop_dims(__isl_take isl_local_space *ls, enum isl_dim_type type, unsigned first, unsigned n)
isl_size isl_local_space_dim(__isl_keep isl_local_space *ls, enum isl_dim_type type)
__isl_null isl_local_space * isl_local_space_free(__isl_take isl_local_space *ls)
__isl_give isl_local_space * isl_local_space_copy(__isl_keep isl_local_space *ls)
__isl_give isl_basic_set * isl_basic_map_domain(__isl_take isl_basic_map *bmap)
__isl_export __isl_give isl_set * isl_map_domain(__isl_take isl_map *bmap)
__isl_give isl_space * isl_basic_map_get_space(__isl_keep isl_basic_map *bmap)
__isl_give isl_map * isl_map_union_disjoint(__isl_take isl_map *map1, __isl_take isl_map *map2)
isl_bool isl_basic_map_plain_is_empty(__isl_keep isl_basic_map *bmap)
__isl_give isl_basic_map * isl_basic_map_drop_constraints_involving_dims(__isl_take isl_basic_map *bmap, enum isl_dim_type type, unsigned first, unsigned n)
__isl_give isl_map * isl_map_copy(__isl_keep isl_map *map)
__isl_null isl_basic_map * isl_basic_map_free(__isl_take isl_basic_map *bmap)
isl_ctx * isl_basic_map_get_ctx(__isl_keep isl_basic_map *bmap)
__isl_export __isl_give isl_space * isl_map_get_space(__isl_keep isl_map *map)
isl_size isl_basic_map_dim(__isl_keep isl_basic_map *bmap, enum isl_dim_type type)
__isl_export __isl_give isl_map * isl_map_intersect_domain(__isl_take isl_map *map, __isl_take isl_set *set)
__isl_export __isl_give isl_map * isl_map_empty(__isl_take isl_space *space)
isl_size isl_map_dim(__isl_keep isl_map *map, enum isl_dim_type type)
__isl_export __isl_give isl_basic_map * isl_basic_map_intersect_domain(__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *bset)
__isl_give isl_map * isl_map_from_domain(__isl_take isl_set *set)
__isl_null isl_map * isl_map_free(__isl_take isl_map *map)
__isl_constructor __isl_give isl_map * isl_map_from_basic_map(__isl_take isl_basic_map *bmap)
__isl_give isl_basic_map * isl_basic_map_copy(__isl_keep isl_basic_map *bmap)
__isl_give isl_map * isl_map_remove_dims(__isl_take isl_map *map, enum isl_dim_type type, unsigned first, unsigned n)
struct isl_basic_set isl_basic_set
__isl_give isl_mat * isl_mat_copy(__isl_keep isl_mat *mat)
isl_size isl_mat_cols(__isl_keep isl_mat *mat)
isl_size isl_mat_rows(__isl_keep isl_mat *mat)
__isl_give isl_vec * isl_mat_vec_product(__isl_take isl_mat *mat, __isl_take isl_vec *vec)
__isl_null isl_mat * isl_mat_free(__isl_take isl_mat *mat)
__isl_give isl_mat * isl_mat_alloc(isl_ctx *ctx, unsigned n_row, unsigned n_col)
isl_ctx * isl_mat_get_ctx(__isl_keep isl_mat *mat)
__isl_give isl_mat * isl_mat_extend(__isl_take isl_mat *mat, unsigned n_row, unsigned n_col)
__isl_give isl_mat * isl_mat_drop_cols(__isl_take isl_mat *mat, unsigned col, unsigned n)
__isl_give isl_mat * isl_mat_move_cols(__isl_take isl_mat *mat, unsigned dst_col, unsigned src_col, unsigned n)
isl_size isl_basic_set_dim(__isl_keep isl_basic_set *bset, enum isl_dim_type type)
__isl_give isl_set * isl_set_reset_space(__isl_take isl_set *set, __isl_take isl_space *space)
__isl_give isl_set * isl_basic_set_compute_divs(__isl_take isl_basic_set *bset)
__isl_give isl_space * isl_basic_set_get_space(__isl_keep isl_basic_set *bset)
__isl_null isl_basic_set * isl_basic_set_free(__isl_take isl_basic_set *bset)
isl_bool isl_basic_set_plain_is_empty(__isl_keep isl_basic_set *bset)
__isl_null isl_set * isl_set_free(__isl_take isl_set *set)
__isl_give isl_set * isl_set_copy(__isl_keep isl_set *set)
__isl_give isl_local_space * isl_basic_set_get_local_space(__isl_keep isl_basic_set *bset)
isl_ctx * isl_basic_set_get_ctx(__isl_keep isl_basic_set *bset)
__isl_constructor __isl_give isl_set * isl_set_from_basic_set(__isl_take isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_copy(__isl_keep isl_basic_set *bset)
__isl_null isl_space * isl_space_free(__isl_take isl_space *space)
__isl_give isl_space * isl_space_from_domain(__isl_take isl_space *space)
__isl_give isl_space * isl_space_copy(__isl_keep isl_space *space)
__isl_give isl_space * isl_space_drop_dims(__isl_take isl_space *space, enum isl_dim_type type, unsigned first, unsigned num)
__isl_give isl_space * isl_space_add_dims(__isl_take isl_space *space, enum isl_dim_type type, unsigned n)
struct isl_context context
struct isl_context context
int(* is_empty)(struct isl_context *context)
struct isl_tab *(* peek_tab)(struct isl_context *context)
int(* test_ineq)(struct isl_context *context, isl_int *ineq)
enum isl_tab_row_sign(* ineq_sign)(struct isl_context *context, isl_int *ineq, int strict)
int(* detect_equalities)(struct isl_context *context, struct isl_tab *tab)
__isl_null struct isl_context *(* free)(struct isl_context *context)
void(* restore)(struct isl_context *context, void *)
void *(* save)(struct isl_context *context)
void(* add_eq)(struct isl_context *context, isl_int *eq, int check, int update)
int(* best_split)(struct isl_context *context, struct isl_tab *tab)
void(* invalidate)(struct isl_context *context)
int(* get_div)(struct isl_context *context, struct isl_tab *tab, struct isl_vec *div)
isl_bool(* insert_div)(struct isl_context *context, int pos, __isl_keep isl_vec *div)
void(* add_ineq)(struct isl_context *context, isl_int *ineq, int check, int update)
struct isl_basic_set *(* peek_basic_set)(struct isl_context *context)
int(* is_ok)(struct isl_context *context)
struct isl_context_op * op
struct isl_tab_undo * shifted_snap
struct isl_tab_undo * cone_snap
struct isl_tab_undo * tab_snap
struct isl_trivial_region * region
struct isl_local_region * local
struct isl_tab_undo * snap
struct isl_partial_sol * next
struct isl_basic_set * dom
struct isl_tab_callback callback
void(* add)(struct isl_sol *sol, __isl_take isl_basic_set *dom, __isl_take isl_multi_aff *ma)
struct isl_sol_callback dec_level
struct isl_context * context
struct isl_partial_sol * partial
void(* free)(struct isl_sol *sol)
void(* add_empty)(struct isl_sol *sol, struct isl_basic_set *bset)
isl_stat(* run)(struct isl_tab_callback *cb)
struct isl_basic_map * bmap
enum isl_tab_row_sign * row_sign
int(* conflict)(int con, void *user)
isl_ctx * isl_vec_get_ctx(__isl_keep isl_vec *vec)
__isl_null isl_vec * isl_vec_free(__isl_take isl_vec *vec)
__isl_give isl_vec * isl_vec_normalize(__isl_take isl_vec *vec)
__isl_give isl_vec * isl_vec_clr(__isl_take isl_vec *vec)
__isl_give isl_vec * isl_vec_alloc(isl_ctx *ctx, unsigned size)
__isl_give isl_vec * isl_vec_ceil(__isl_take isl_vec *vec)