61 bmap->eq[
a] = bmap->eq[
b];
69 bmap->ineq[
a] = bmap->ineq[
b];
112 for (i = bmap->n_eq - 1; i >= 0; --i) {
134 for (i = bmap->n_ineq - 1; i >= 0; --i) {
196 add_one =
isl_int_gt(shift, bmap->div[div][0]);
225 bmap->div[div][1 +
pos], 2);
244 for (i = 0; i < 1 +
total; ++i) {
272 if (bmap->n_div == 0)
275 for (i = 0; i < bmap->n_div; ++i) {
343 if (bmap->n_div == 0)
346 for (i = 0; i < bmap->n_div; ++i)
382 if (
total < 0 || v_div < 0)
386 for (k = 0; k < bmap->n_eq; ++k) {
387 if (bmap->eq[k] == eq)
396 for (k = 0; k < bmap->n_ineq; ++k) {
409 for (k = 0; k < bmap->n_div; ++k) {
422 if (last_div == -1 || (keep_divs && last_div < k)) {
479 if (last_div < 0 || last_div <= div)
482 for (k = 0; k <= last_div; ++k) {
509 for (d = bmap->n_div - 1; d >= 0 ; --d) {
510 for (i = 0; i < bmap->n_eq; ++i) {
550 for (d = bmap->n_div - 1; d >= 0 ; --d) {
551 for (i = 0; i < bmap->n_eq; ++i)
556 for (i = 0; i < bmap->n_ineq; ++i)
559 if (i < bmap->n_ineq)
577 int eq,
unsigned first,
unsigned n)
586 for (i = 0; i <
n; ++i) {
625 int div,
int eq,
int *progress)
649 isl_int_set(bmap->div[div][0], bmap->eq[eq][o_div + div]);
693 total_var =
total - bmap->n_div;
695 last_var =
total - 1;
696 for (done = 0; done < bmap->n_eq; ++done) {
697 for (; last_var >= 0; --last_var) {
698 for (k = done; k < bmap->n_eq; ++k)
715 bmap->eq[done], 1, 1, progress);
717 if (last_var >= total_var)
723 if (done == bmap->n_eq)
725 for (k = done; k < bmap->n_eq; ++k) {
732 n_drop = bmap->n_eq - done;
792 if (bmap->n_ineq == 0)
821 for (h = hash; ci->
index[h]; h = (h+1) % ci->
size)
822 if (ineq != ci->
index[h] &&
857 for (k = 0; k < bset->n_ineq; ++k) {
859 ci->
index[h] = &bset->ineq[k];
908 if (!bmap || bmap->n_div <= 1)
914 total = v_div + bmap->n_div;
917 for (k = bmap->n_div - 1; k >= 0; --k)
927 bits = ffs(
size) - 1;
929 if (!elim_for || !index)
937 for (--k; k >= 0; --k) {
944 for (h = hash; index[h]; h = (h+1) %
size)
946 bmap->div[index[h]-1], 2+
total))
955 for (l = bmap->n_div - 1; l >= 0; --l) {
983 if (unknown < 0 || unknown)
1003 if (v_div < 0 ||
total < 0)
1028 for (i = 0; i < n_div; ++i) {
1054 for (i = 0, j = bmap->n_div-1; i < bmap->n_eq; ++i) {
1126 int dropped, needed;
1131 if (bmap->n_div == 0)
1134 if (bmap->n_eq == 0)
1142 if (v_div < 0 || div_eq < 0)
1147 if (div_eq < bmap->n_eq) {
1149 bmap->n_eq - div_eq, 0, 1 + v_div);
1153 if (
C->n_col == 0) {
1164 for (i = 0, j = bmap->n_div-1; i < div_eq; ++i) {
1179 if (T->
n_col == 0) {
1186 for (i = 0; i < T->
n_row - 1; ++i) {
1198 for (j = bmap->n_div - 1; j >= 0; --j) {
1199 for (i = 0; i < bmap->n_eq; ++i)
1202 if (i < bmap->n_eq) {
1211 for (i = 1; i < T->
n_row; ++i) {
1217 if (needed > dropped) {
1222 for (i = 1; i < T->
n_row; ++i) {
1226 pos[i] = 1 + v_div + k;
1227 isl_seq_clr(bmap->div[k] + 1, 1 + v_div + bmap->n_div);
1233 for (j = 0; j < i; ++j) {
1238 C2->
row[
pos[j]], 1 + v_div);
1244 isl_seq_neg(bmap->eq[j], bmap->div[k]+1, 1+v_div+bmap->n_div);
1272 isl_int_add(bmap->div[div][1], bmap->div[div][1], bmap->div[div][0]);
1292 for (j = 0; j < bmap->n_div; ++j) {
1302 for (j = 0; j < bmap->n_div; ++j) {
1342 return last_ineq < last_div;
1361 for (j = 0; j < len; ++j) {
1452 if (n_div < 0 ||
total < 0)
1457 for (i = 0; i < n_div; ++i) {
1468 if (
isl_int_eq(bmap->div[i][2 +
p], bmap->ineq[k][1 +
p]))
1470 else if (
isl_int_eq(bmap->div[i][2 +
p], bmap->ineq[l][1 +
p]))
1477 else if (!
is_residue(bmap->ineq[c], bmap->div[i] + 1, sum,
1505 unsigned v_div,
unsigned n_div)
1529 int base,
int ineq,
unsigned v_div,
unsigned n_div,
isl_int n)
1533 for (j = 0; j < n_div; ++j) {
1648 if (rat < 0 || n_ineq < 0 ||
total < 0 || v_div < 0 || n_div < 0)
1659 for (i = 0; i < n_ineq; ++i) {
1663 if (i == k || i == l)
1672 if (
isl_int_eq(bmap->ineq[i][1 +
p], bmap->ineq[k][1 +
p]))
1674 else if (
isl_int_eq(bmap->ineq[i][1 +
p], bmap->ineq[l][1 +
p]))
1723 for (i = 0; i < bmap->n_div; ++i) {
1776 ci.
index[h] = &bmap->ineq[0];
1777 for (k = 1; k < bmap->n_ineq; ++k) {
1780 ci.
index[h] = &bmap->ineq[k];
1783 l = ci.
index[h] - &bmap->ineq[0];
1784 if (
isl_int_lt(bmap->ineq[k][0], bmap->ineq[l][0]))
1790 for (k = 0; bmap && k < bmap->n_ineq-1; ++k) {
1796 l = ci.
index[h] - &bmap->ineq[0];
1797 isl_int_add(sum, bmap->ineq[k][0], bmap->ineq[l][0]);
1845 }
while (duplicate);
1894 if (v_div < 0 || dim < 0)
1899 for (j = 0; j < bmap->n_ineq; ++j) {
1912 ctx->
negone, bmap->div[div] + 1,
1913 bmap->div[div][0], bmap->ineq[j], 1 + dim);
1916 ctx->
one, bmap->div[div] + 1,
1917 bmap->div[div][0], bmap->ineq[j], 1 + dim);
1920 bmap->ineq[j][0], bmap->div[div][0]);
1922 bmap->ineq[j][0], 1);
1956 for (i = 0; i < n_div; ++i) {
1961 if (skip >= 0 && !skip)
1967 selected = select(bmap, i);
2011 if (v_div < 0 || n_ineq < 0)
2014 for (i = 0; i < n_ineq; ++i) {
2020 bmap->ineq[i], div);
2083 isl_int *constraint,
unsigned div)
2095 bmap->div[div][1], bmap->div[div][0]);
2100 bmap->div[div][1], bmap->div[div][0]);
2131 unsigned pos = 1 + v_div + div;
2136 for (i = 0; i < bmap->n_eq; ++i)
2140 for (i = 0; i < bmap->n_ineq; ++i) {
2146 if (red < 0 || !red)
2151 if (involves < 0 || involves)
2173 for (i = bmap->n_div-1; i >= 0; --i) {
2228 for (i = 0; i < bmap->n_div; ++i) {
2258 for (d =
pos +
n - 1; d >= 0 && d >=
pos; --d)
2263 for (d =
pos +
n - 1;
2264 d >= 0 && d >=
total - bmap->n_div && d >=
pos; --d)
2266 for (d =
pos +
n - 1; d >= 0 && d >=
pos; --d) {
2267 int n_lower, n_upper;
2270 for (i = 0; i < bmap->n_eq; ++i) {
2274 bmap->eq[i], 0, 1, NULL);
2284 for (i = 0; i < bmap->n_ineq; ++i) {
2291 0, n_lower * n_upper);
2294 for (i = bmap->n_ineq - 1; i >= 0; --i) {
2299 for (j = 0; j < i; ++j) {
2312 1+d, 1+
total, NULL);
2317 if (n_lower > 0 && n_upper > 0) {
2413 for (i = 0; i < n_div; ++i) {
2466 for (i = 0; i <
map->n; ++i) {
2488 for (d = 0; d < len; ++d)
2490 for (i = 0; i < bmap->n_eq; ++i) {
2491 for (d = len - 1; d >= 0; --d) {
2501 int *elim,
unsigned len)
2512 for (d =
total - 1; d >= 0; --d) {
2557 for (i = 0; i < bset->n_eq; ++i)
2560 for (i = 0; i < bset->n_ineq; ++i)
2597 if (n_ineq < 0 || cols < 0)
2600 for (k = 0; k < n_ineq; ++k) {
2637 for (k = 0; k < bset->n_ineq; ++k) {
2672 if (bmap->n_ineq == 0 ||
context->n_ineq == 0) {
2706 for (i = 0; i < len; ++i) {
2728 for (i = 0; i < dim; ++i)
2734 for (i = bmap->n_eq - 1; i >= 0; --i)
2735 if (!
is_related(bmap->eq[i] + 1, dim, relevant)) {
2741 for (i = bmap->n_ineq - 1; i >= 0; --i)
2742 if (!
is_related(bmap->ineq[i] + 1, dim, relevant)) {
2768 for (j = 0; j < dim; ++j) {
2771 while (group[j] >= 0 && group[group[j]] != group[j])
2772 group[j] = group[group[j]];
2773 if (group[j] == min)
2775 if (group[j] < min) {
2776 if (min >= 0 && min < dim)
2777 group[min] = group[j];
2780 group[group[j]] = min;
2831 for (i = 0; i < dim; ++i)
2833 last = group[i] = i;
2839 for (i = 0; i < bmap->n_eq; ++i)
2841 for (i = 0; i < bmap->n_ineq; ++i)
2844 for (i = 0; i < dim; ++i)
2846 group[i] = group[group[i]];
2848 for (i = 0; i < dim; ++i)
2849 group[i] = group[i] == -1;
2887 for (i = 0; i < dim; ++i) {
2888 for (j = 0; j < bset->n_eq; ++j)
2891 if (j < bset->n_eq) {
2895 for (j = 0; j < bset->n_ineq; ++j)
2898 if (j < bset->n_ineq)
2927 if (dim < 0 ||
n < 0)
2935 for (i = 0; i < dim; ++i) {
2936 for (j = 0; j <
n; ++j) {
2955 for (i = 0; i <
n; ++i)
2981 int found_equality = 0;
2985 if (tab && tab->
empty)
2988 n_ineq = bset->n_ineq;
2989 for (i = n_ineq - 1; i >= 0; --i) {
3071 unsigned n_eq, context_ineq;
3073 if (!bset || !ineq || !
context)
3089 if (
all_neg(row, bset->n_ineq))
3099 context_ineq =
context->n_ineq;
3103 for (i = 0; i < context_ineq; ++i)
3109 for (i = 0; i < bset->n_ineq; ++i) {
3121 for (i = bset->n_ineq - 1; i >= 0; --i) {
3260 for (i = 0; i <
n_row; ++i) {
3276 isl_int_sub(bset->ineq[i][0], bset->ineq[i][0], rem);
3297 if (
n < 0 || !
template)
3300 for (i = 0; i <
n; ++i) {
3370 if (
aff->n_eq == 0) {
3378 if (T && T->
n_col == 0) {
3441 if (
total < 0 || !eq)
3444 if (1 +
total != eq->n_col)
3446 "unexpected number of columns",
goto error);
3450 for (i = 0; i < eq->n_row; ++i) {
3496 if (bmap1->n_eq == n1) {
3498 n2, bmap2->n_eq - n2, 0, 1 +
total);
3501 if (bmap2->n_eq == n2) {
3503 n1, bmap1->n_eq - n1, 0, 1 +
total);
3507 n1, bmap1->n_eq - n1, 0, 1 +
total);
3509 n2, bmap2->n_eq - n2, 0, 1 +
total);
3700 for (i = 0; i <
n; ++i) {
3706 "equality constraints modified unexpectedly",
3749 int bmap_n_eq, context_n_eq;
3758 if (bmap_n_eq < 0 || context_n_eq < 0)
3760 if (bmap_n_eq == 0 || context_n_eq == 0)
3798 unsigned extra,
n_eq, n_ineq;
3826 if (
n_div < 0 ||
total < 0 || n_div_bmap < 0)
3828 extra =
n_div - n_div_bmap;
3836 if (!bset || bset->n_eq == 0 ||
n_div == 0 ||
3843 n_ineq = bset->n_ineq;
3888 for (i =
map->n - 1; i >= 0; --i) {
3895 if (i !=
map->n - 1)
3931 if (
total < 0 || bmap_total < 0)
3934 extra = bmap_total -
total;
3938 while (
bmap && i1 >= 0 && i2 >= 0) {
3987 if (
total < 0 || bmap_total < 0)
3990 extra = bmap_total -
total;
3995 while (
bmap && i1 >= 0 && i2 >= 0) {
4002 if (last1 > last2) {
4006 if (last1 < last2) {
4053 "context has unknown divs",
goto error);
4110 "context has unknown divs",
goto error);
4115 for (i = 0; i <
map->n; ++i) {
4121 if (univ &&
map->n > 1)
4207 isl_size n_disjunct_map, n_disjunct_context;
4212 if (is_universe >= 0 && !is_universe)
4214 if (is_universe < 0)
4230 if (n_disjunct_map < 0 || n_disjunct_context < 0)
4232 if (n_disjunct_map != 1 || n_disjunct_context != 1) {
4243 if (n_disjunct_context == 1) {
4250 list = isl_map_list_alloc(ctx, 2);
4350 if (bmap1->n_div || bmap2->n_div)
4352 if (!bmap1->n_eq && !bmap2->n_eq)
4367 for (i = 0; i < bmap2->n_eq; ++i) {
4370 bmap1, elim,
total);
4375 for (i = 0; i < bmap2->n_ineq; ++i) {
4378 bmap2->ineq[i], bmap1, elim,
total);
4384 for (i = 0; i < bmap1->n_ineq; ++i) {
4387 bmap1->ineq[i], bmap2, elim,
total);
4423 for (i = 0; i <
map1->n; ++i) {
4424 for (j = 0; j <
map2->n; ++j) {
4450 if (disjoint < 0 || disjoint)
4454 if (disjoint < 0 || disjoint)
4490 if (disjoint < 0 || disjoint)
4530 if (disjoint < 0 || disjoint)
4534 if (disjoint < 0 || disjoint)
4538 if (disjoint < 0 || disjoint)
4572 if (disjoint < 0 || disjoint)
4576 if (disjoint < 0 || disjoint)
4580 if (disjoint < 0 || disjoint)
4633 return isl_seq_is_neg(bmap->ineq[i] + first, bmap->ineq[j] + first,
n);
4681 unsigned div,
unsigned l,
unsigned u)
4701 if (opp < 0 || !opp)
4705 if (involves < 0 || involves)
4708 isl_int_add(bmap->ineq[l][0], bmap->ineq[l][0], bmap->ineq[u][0]);
4711 bmap->ineq[l][0], bmap->ineq[u][0]);
4719 for (i = 0; i < n_div; ++i) {
4730 for (j = 0; j < bmap->n_ineq; ++j) {
4732 if (j == l || j == u)
4742 bmap->ineq[j][1 + v_div + div],
4744 valid =
isl_int_eq(bmap->ineq[j][1 + v_div + div],
4745 bmap->ineq[j][1 + v_div + i]);
4747 bmap->ineq[j][1 + v_div + div],
4752 if (j < bmap->n_ineq)
4760 isl_int_sub(bmap->ineq[l][0], bmap->ineq[l][0], bmap->ineq[u][0]);
4946 for (i = 0; i < n_div; ++i) {
4949 if (best >= 0 && pairs[best] <= pairs[i])
4955 for (l = 0; l < bmap->n_ineq; ++l) {
4960 for (u = 0; u < bmap->n_ineq; ++u) {
4974 if (u < bmap->n_ineq)
4981 if (l == bmap->n_ineq) {
5055 unsigned div1,
unsigned div2,
unsigned l,
unsigned u)
5068 total = 1 + v_div + bmap->n_div;
5074 for (i = 0; i < bmap->n_ineq; ++i) {
5075 if (i == l || i == u)
5088 bmap->ineq[i][1 + v_div + div1]);
5122 if (v_div < 0 || n_div < 0)
5125 for (i = 0; i < n_div; ++i) {
5128 for (l = 0; l < bmap->n_ineq; ++l) {
5131 for (u = 0; u < bmap->n_ineq; ++u) {
5166 return isl_seq_eq(bmap->ineq[i] + first, bmap->ineq[j] + first,
n);
5226 if (known < 0 || known)
5234 for (i = 0; i < n_div; ++i) {
5242 if (known < 0 || !known)
5286 if (ineq1 > ineq2) {
5375 int lower = -1, upper = -1;
5381 for (i = 0; i < bmap->n_ineq && (lower < 0 || upper < 0); ++i) {
5406 if (lower < 0 || upper < 0)
5407 return bmap->n_ineq;
5420 return equal ? lower : bmap->n_ineq;
5443 int div,
int ineq,
int lower,
int *pairs)
5472 if (v_div < 0 || n_div < 0)
5475 for (i = div + 1; i < n_div; ++i) {
5480 if (involves < 0 || involves)
5540 if (bmap->n_div == 0)
5553 for (i = 0; i < bmap->n_div; ++i) {
5555 int last_pos, last_neg;
5566 for (j = 0; j < bmap->n_eq; ++j)
5573 for (j = 0; j < bmap->n_ineq; ++j) {
5584 if (pairs[i] == 0) {
5585 for (j = bmap->n_ineq - 1; j >= 0; --j)
5624 bmap->ineq[last_pos][0], bmap->ineq[last_neg][0]);
5626 bmap->ineq[last_pos][0], 1);
5627 redundant =
isl_int_ge(bmap->ineq[last_pos][0],
5628 bmap->ineq[last_pos][1+off+i]);
5630 bmap->ineq[last_pos][0], 1);
5632 bmap->ineq[last_pos][0], bmap->ineq[last_neg][0]);
5635 last_pos, last_neg, pairs);
5701 if (!bmap || n_row < 0 || n_col < 0)
5706 "expecting square matrix",
goto error);
5711 for (i = 0; i < bmap->n_eq; ++i)
5714 for (i = 0; i < bmap->n_ineq; ++i)
5717 for (i = 0; i < bmap->n_div; ++i) {
5788 if (bmap->n_eq == 0)
5803 for (i = 0; i < bmap->n_eq; ++i) {
5814 if (i >= bmap->n_eq)
5826 for (i = l; i < n_div; ++i)
5846 for (i = 0; i < bmap->n_eq; ++i) {
5950 if (data->
total < 0)
5958 0, 1 + data->
total);
5960 if (!data->
T || !data->
T2)
5991 "total dimensionality changed unexpectedly",
5998 for (i = 0; i < bmap->n_ineq; ++i) {
6064 if (bmap->n_eq == 0)
6075 if (data.
T->
n_col == 0) {
6128 if (
total < 0 || n_div < 0)
6133 for (i = 0; i < bmap->n_eq; ++i) {
6137 shift, bmap->eq[i][1 +
total + div]);
6139 for (i = 0; i < bmap->n_ineq; ++i) {
6143 shift, bmap->ineq[i][1 +
total + div]);
6145 for (i = 0; i < bmap->n_div; ++i) {
6151 shift, bmap->div[i][1 + 1 +
total + div]);
static __isl_give isl_basic_set * bset_from_bmap(__isl_take isl_basic_map *bmap)
static __isl_give isl_basic_map * bset_to_bmap(__isl_take isl_basic_set *bset)
#define isl_die(ctx, errno, msg, code)
#define isl_alloc_array(ctx, type, n)
#define isl_calloc_array(ctx, type, n)
#define ISL_F_ISSET(p, f)
isl_bool isl_bool_not(isl_bool b)
isl_stat isl_stat void * user
isl_bool isl_bool(* test)(__isl_keep ISL_KEY *key, __isl_keep ISL_VAL *val, void *user)
int GMPQAPI cmp(mp_rat op1, mp_rat op2)
void GMPZAPI neg(mp_int rop, mp_int op)
void GMPZAPI gcd(mp_int rop, mp_int op1, mp_int op2)
void GMPZAPI swap(mp_int rop1, mp_int rop2)
__isl_give isl_basic_set * isl_basic_set_plain_affine_hull(__isl_take isl_basic_set *bset)
int isl_blk_is_error(struct isl_blk block)
void isl_blk_free(struct isl_ctx *ctx, struct isl_blk block)
struct isl_blk isl_blk_alloc(struct isl_ctx *ctx, size_t n)
static int coalesce(isl_ctx *ctx, int n, struct isl_coalesce_info *info)
static void drop(struct isl_coalesce_info *info)
__isl_give isl_mat * isl_mat_parameter_compression(__isl_take isl_mat *B, __isl_take isl_vec *d)
__isl_give isl_mat * isl_mat_parameter_compression_ext(__isl_take isl_mat *B, __isl_take isl_mat *A)
__isl_give isl_mat * isl_mat_variable_compression(__isl_take isl_mat *B, __isl_give isl_mat **T2)
#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_divexact_ui(r, i, j)
#define isl_int_gcd(r, i, j)
#define isl_int_neg(r, i)
#define isl_int_abs_eq(i, j)
#define isl_int_add_ui(r, i, j)
#define isl_int_add(r, i, j)
#define isl_int_abs_ge(i, j)
#define isl_int_addmul(r, i, j)
#define isl_int_is_divisible_by(i, j)
#define isl_int_fdiv_r(r, i, j)
#define isl_int_abs_gt(i, j)
#define isl_int_set(r, i)
#define isl_int_cdiv_q(r, i, j)
#define isl_int_mul_ui(r, i, j)
#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_map * isl_basic_map_sort_divs(__isl_take isl_basic_map *bmap)
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_order_divs(__isl_take isl_basic_map *bmap)
isl_bool isl_basic_map_any_div_involves_vars(__isl_keep isl_basic_map *bmap, unsigned first, unsigned n)
isl_bool isl_basic_map_div_expr_involves_vars(__isl_keep isl_basic_map *bmap, int div, unsigned first, unsigned n)
__isl_give isl_basic_map * isl_basic_map_drop_constraints_involving(__isl_take isl_basic_map *bmap, unsigned first, unsigned n)
__isl_give isl_basic_set * isl_basic_set_set_to_empty(__isl_take isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_dup(__isl_keep isl_basic_set *bset)
void isl_basic_map_inequality_to_equality(__isl_keep isl_basic_map *bmap, unsigned pos)
isl_size isl_basic_map_n_inequality(__isl_keep isl_basic_map *bmap)
int isl_basic_map_drop_equality(__isl_keep isl_basic_map *bmap, unsigned pos)
__isl_give isl_basic_map * isl_inequality_negate(__isl_take isl_basic_map *bmap, unsigned pos)
isl_bool isl_basic_map_div_is_known(__isl_keep isl_basic_map *bmap, int div)
unsigned isl_basic_map_offset(__isl_keep isl_basic_map *bmap, enum isl_dim_type type)
__isl_give isl_basic_set * isl_basic_set_add_ineq(__isl_take isl_basic_set *bset, isl_int *ineq)
__isl_give isl_basic_set * isl_basic_set_extend_constraints(__isl_take isl_basic_set *base, unsigned n_eq, unsigned n_ineq)
__isl_give isl_basic_map * isl_basic_map_fix(__isl_take isl_basic_map *bmap, enum isl_dim_type type, unsigned pos, isl_int value)
static unsigned pos(__isl_keep isl_space *space, enum isl_dim_type type)
int isl_basic_map_constraint_cmp(__isl_keep isl_basic_map *bmap, isl_int *c1, isl_int *c2)
int isl_basic_map_alloc_div(__isl_keep isl_basic_map *bmap)
isl_bool isl_basic_map_div_is_marked_unknown(__isl_keep isl_basic_map *bmap, int div)
__isl_give isl_basic_map * isl_basic_map_set_to_empty(__isl_take isl_basic_map *bmap)
__isl_give isl_basic_map * isl_basic_map_remove_unknown_divs(__isl_take isl_basic_map *bmap)
int isl_basic_map_first_unknown_div(__isl_keep isl_basic_map *bmap)
__isl_give isl_basic_set * isl_basic_set_free_inequality(__isl_take isl_basic_set *bset, unsigned n)
__isl_give isl_basic_map * isl_basic_map_free_equality(__isl_take isl_basic_map *bmap, unsigned n)
int isl_basic_map_drop_inequality(__isl_keep isl_basic_map *bmap, unsigned pos)
int isl_basic_map_alloc_inequality(__isl_keep isl_basic_map *bmap)
__isl_give isl_basic_map * isl_basic_map_add_div_constraint(__isl_take isl_basic_map *bmap, unsigned div, int sign)
isl_bool isl_map_has_equal_params(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
__isl_give isl_map * isl_map_cow(__isl_take isl_map *map)
__isl_give isl_basic_map * isl_basic_map_mark_div_unknown(__isl_take isl_basic_map *bmap, int div)
__isl_give isl_basic_set * isl_basic_map_underlying_set(__isl_take isl_basic_map *bmap)
__isl_give isl_basic_set * isl_basic_set_free_equality(__isl_take isl_basic_set *bset, unsigned n)
__isl_give isl_basic_map * isl_basic_map_cow(__isl_take isl_basic_map *bmap)
isl_bool isl_map_align_params_map_map_and_test(__isl_keep isl_map *map1, __isl_keep isl_map *map2, isl_bool(*fn)(__isl_keep isl_map *map1, __isl_keep isl_map *map2))
__isl_give isl_basic_set * isl_basic_set_cow(__isl_take isl_basic_set *bset)
__isl_give isl_basic_map * isl_basic_map_sort_constraints(__isl_take isl_basic_map *bmap)
__isl_give isl_basic_map * isl_basic_map_drop_div(__isl_take isl_basic_map *bmap, unsigned div)
int isl_basic_set_drop_inequality(__isl_keep isl_basic_set *bset, unsigned pos)
int isl_basic_map_alloc_equality(__isl_keep isl_basic_map *bmap)
isl_bool isl_basic_map_div_is_integral(__isl_keep isl_basic_map *bmap, int div)
__isl_give isl_basic_map * isl_basic_map_extend_constraints(__isl_take isl_basic_map *base, unsigned n_eq, unsigned n_ineq)
isl_bool isl_basic_map_divs_known(__isl_keep isl_basic_map *bmap)
__isl_give isl_basic_map * isl_basic_map_reset_space(__isl_take isl_basic_map *bmap, __isl_take isl_space *space)
__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_basic_map * isl_basic_map_overlying_set(__isl_take isl_basic_set *bset, __isl_take isl_basic_map *like)
__isl_give isl_basic_map * isl_basic_map_align_divs(__isl_take isl_basic_map *dst, __isl_keep isl_basic_map *src)
isl_bool isl_map_divs_known(__isl_keep isl_map *map)
isl_bool isl_map_tuple_is_equal(__isl_keep isl_map *map1, enum isl_dim_type type1, __isl_keep isl_map *map2, enum isl_dim_type type2)
__isl_give isl_basic_set * isl_basic_set_sort_constraints(__isl_take isl_basic_set *bset)
__isl_give isl_basic_map * isl_basic_map_alloc_space(__isl_take isl_space *space, unsigned extra, unsigned n_eq, unsigned n_ineq)
#define ISL_BASIC_MAP_SORTED
#define ISL_BASIC_MAP_NO_REDUNDANT
isl_stat isl_map_align_params_bin(__isl_keep isl_map **map1, __isl_keep isl_map **map2)
#define ISL_BASIC_SET_NO_REDUNDANT
#define ISL_BASIC_MAP_EMPTY
__isl_give isl_basic_set * isl_basic_set_preimage(__isl_take isl_basic_set *bset, __isl_take isl_mat *mat)
isl_stat isl_basic_map_check_equal_space(__isl_keep isl_basic_map *bmap1, __isl_keep isl_basic_map *bmap2)
#define ISL_BASIC_MAP_REDUCED_COEFFICIENTS
#define ISL_BASIC_SET_NO_IMPLICIT
#define ISL_BASIC_SET_FINAL
isl_stat isl_map_basic_map_check_equal_space(__isl_keep isl_map *map, __isl_keep isl_basic_map *bmap)
#define ISL_BASIC_MAP_RATIONAL
#define ISL_BASIC_MAP_NO_IMPLICIT
#define ISL_BASIC_MAP_NORMALIZED_DIVS
#define ISL_MAP_NORMALIZED
isl_stat isl_basic_map_check_range(__isl_keep isl_basic_map *bmap, enum isl_dim_type type, unsigned first, unsigned n)
static __isl_give isl_basic_map * isl_basic_map_preimage_vars(__isl_take isl_basic_map *bmap, unsigned pos, __isl_take isl_mat *T)
static __isl_give isl_map * replace_by_disjunct(__isl_take isl_map *map, int pos, __isl_take isl_basic_map *context)
static isl_bool is_pure_unit_div(__isl_keep isl_basic_map *bmap, int div)
static __isl_give isl_basic_set * drop_irrelevant_constraints(__isl_take isl_basic_set *context, __isl_keep isl_basic_set *bset)
static __isl_give isl_basic_map * eliminate_div(__isl_take isl_basic_map *bmap, isl_int *eq, unsigned div, int keep_divs, int equivalent)
static __isl_give isl_mat * combined_variable_compression(__isl_keep isl_basic_map *bmap1, int n1, __isl_keep isl_basic_map *bmap2, int n2, int total)
static __isl_give isl_basic_map * drop_more_redundant_divs(__isl_take isl_basic_map *bmap, __isl_take int *pairs, int n)
static __isl_give isl_basic_map * set_eq_and_try_again(__isl_take isl_basic_map *bmap, int ineq, __isl_take int *pairs)
static int set_hash_index(struct isl_constraint_index *ci, __isl_keep isl_basic_set *bset, int k)
__isl_give isl_basic_map * isl_basic_map_remove_duplicate_constraints(__isl_take isl_basic_map *bmap, int *progress, int detect_divs)
static isl_bool isl_map_plain_is_disjoint_global(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
static isl_stat mark_shifted_constraints(__isl_keep isl_mat *ineq, __isl_keep isl_basic_set *context, int *row)
static isl_bool has_multiple_var_equality(__isl_keep isl_basic_map *bmap)
static isl_bool all_pairs(__isl_keep isl_map *map1, __isl_keep isl_map *map2, isl_bool(*test)(__isl_keep isl_basic_map *bmap1, __isl_keep isl_basic_map *bmap2))
__isl_give isl_basic_map * isl_basic_map_eliminate_vars(__isl_take isl_basic_map *bmap, unsigned pos, unsigned n)
__isl_give isl_set * isl_set_plain_gist_basic_set(__isl_take isl_set *set, __isl_take isl_basic_set *context)
static __isl_give isl_basic_map * set_div_from_lower_bound(__isl_take isl_basic_map *bmap, int div, int ineq)
static __isl_give isl_basic_set * isl_basic_set_reduce_using_equalities(__isl_take isl_basic_set *bset, __isl_take isl_basic_set *context)
__isl_give isl_basic_map * isl_basic_map_simplify(__isl_take isl_basic_map *bmap)
static void set_compute_elimination_index(__isl_keep isl_basic_set *bset, int *elim, unsigned len)
static void constraint_index_free(struct isl_constraint_index *ci)
static __isl_give isl_basic_set * drop_irrelevant_constraints_marked(__isl_take isl_basic_set *context, __isl_keep isl_mat *ineq, int *row)
static __isl_give isl_basic_map * drop_div_and_try_again(__isl_take isl_basic_map *bmap, int div, int ineq1, int ineq2, __isl_take int *pairs)
static void test_ineq_data_clear(struct test_ineq_data *data)
static __isl_give isl_basic_map * gist_strides(__isl_take isl_basic_map *bmap, __isl_keep isl_basic_map *context)
__isl_give isl_basic_map * isl_basic_map_gist_domain(__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *context)
static __isl_give isl_basic_map * coalesce_divs(__isl_take isl_basic_map *bmap, unsigned div1, unsigned div2, unsigned l, unsigned u)
static isl_bool better_div_constraint(__isl_keep isl_basic_map *bmap, int div, int ineq)
static void isl_reduce_coefficients_data_clear(struct isl_reduce_coefficients_data *data)
static isl_bool has_nested_unit_div(__isl_keep isl_basic_map *bmap, int base, int ineq, unsigned v_div, unsigned n_div, isl_int n)
static __isl_give isl_basic_map * isl_basic_map_drop_redundant_divs_ineq(__isl_take isl_basic_map *bmap)
static __isl_give isl_basic_map * check_for_residues(__isl_take isl_basic_map *bmap, int k, int l, isl_int sum, int *progress)
static unsigned int round_up(unsigned int v)
static isl_bool is_opposite(__isl_keep isl_basic_map *bmap, int i, int j)
static isl_bool div_is_redundant(__isl_keep isl_basic_map *bmap, int div)
static __isl_give isl_basic_map * normalize_div_expression(__isl_take isl_basic_map *bmap, int div)
static int hash_index_ineq(struct isl_constraint_index *ci, isl_int **ineq)
__isl_give isl_basic_set * isl_basic_set_drop_constraints_involving_unknown_divs(__isl_take isl_basic_set *bset)
static __isl_give isl_basic_map * normalize_div_expressions(__isl_take isl_basic_map *bmap)
isl_bool isl_basic_map_is_disjoint(__isl_keep isl_basic_map *bmap1, __isl_keep isl_basic_map *bmap2)
static __isl_give isl_basic_set * uset_gist_uncompressed(__isl_take isl_basic_set *bset, __isl_take isl_basic_set *context)
static __isl_give isl_mat * extract_ineq(__isl_keep isl_basic_set *bset)
__isl_give isl_basic_map * isl_basic_map_finalize(__isl_take isl_basic_map *bmap)
static isl_bool is_known_integral_div(__isl_keep isl_basic_map *bmap, int div)
static isl_bool ok_to_eliminate_div(__isl_keep isl_basic_map *bmap, isl_int *eq, unsigned div)
static __isl_give isl_basic_set * project_onto_involved(__isl_take isl_basic_set *bset, __isl_keep isl_basic_set *template)
__isl_give isl_basic_map * isl_basic_map_gauss(__isl_take isl_basic_map *bmap, int *progress)
static __isl_give isl_basic_map * drop_equalities(__isl_take isl_basic_map *bmap, __isl_keep isl_basic_map *context)
static __isl_give isl_basic_map * isl_basic_map_remove_shifted_constraints(__isl_take isl_basic_map *bmap, __isl_take isl_basic_map *context)
int isl_basic_set_plain_is_disjoint(__isl_keep isl_basic_set *bset1, __isl_keep isl_basic_set *bset2)
static __isl_give isl_basic_map * eliminate_unit_div(__isl_take isl_basic_map *bmap, int div, int *progress)
__isl_give isl_basic_map * isl_basic_map_gist(__isl_take isl_basic_map *bmap, __isl_take isl_basic_map *context)
__isl_give isl_map * isl_map_gist(__isl_take isl_map *map, __isl_take isl_map *context)
static isl_stat create_constraint_index(struct isl_constraint_index *ci, __isl_keep isl_basic_map *bmap)
static __isl_give isl_basic_map * set_div_from_eq(__isl_take isl_basic_map *bmap, int div, int eq, int *progress)
static __isl_give isl_basic_map * reduce_coefficients(__isl_take isl_basic_map *bmap, struct isl_reduce_coefficients_data *data)
__isl_give isl_basic_set * isl_basic_set_gist(__isl_take isl_basic_set *bset, __isl_take isl_basic_set *context)
__isl_give isl_basic_map * isl_basic_map_eliminate(__isl_take isl_basic_map *bmap, enum isl_dim_type type, unsigned first, unsigned n)
static __isl_give isl_basic_map * coalesce_or_drop_more_redundant_divs(__isl_take isl_basic_map *bmap, int *pairs, int n)
static __isl_give isl_basic_map * scale_down_inequality(__isl_take isl_basic_map *bmap, int ineq, isl_int f, unsigned len)
__isl_give isl_basic_map * isl_basic_map_detect_inequality_pairs(__isl_take isl_basic_map *bmap, int *progress)
static __isl_give isl_mat * extract_compressed_stride_constraints(__isl_keep isl_basic_map *bmap, int bmap_n_eq, __isl_keep isl_basic_map *context, int context_n_eq)
__isl_give isl_basic_map * isl_basic_map_reduce_coefficients(__isl_take isl_basic_map *bmap)
static isl_bool is_any_div(__isl_keep isl_basic_map *bmap, int div)
isl_bool isl_basic_set_is_disjoint(__isl_keep isl_basic_set *bset1, __isl_keep isl_basic_set *bset2)
static int is_opposite_part(__isl_keep isl_basic_map *bmap, int i, int j, int first, int n)
isl_bool isl_basic_map_is_div_constraint(__isl_keep isl_basic_map *bmap, isl_int *constraint, unsigned div)
__isl_give isl_basic_map * isl_basic_map_shift_div(__isl_take isl_basic_map *bmap, int div, int pos, isl_int shift)
static __isl_give isl_basic_map * drop_redundant_divs_again(__isl_take isl_basic_map *bmap, __isl_take int *pairs, int simplify)
__isl_give isl_map * isl_map_gist_params(__isl_take isl_map *map, __isl_take isl_set *context)
static isl_bool ok_to_set_div_from_bound(__isl_keep isl_basic_map *bmap, int div, int ineq)
static int is_related(isl_int *c, int len, int *relevant)
__isl_give isl_map * isl_map_plain_gist_basic_map(__isl_take isl_map *map, __isl_take isl_basic_map *context)
static __isl_give isl_basic_map * remove_dependent_vars(__isl_take isl_basic_map *bmap, int pos)
static __isl_give isl_basic_set * uset_gist_compressed(__isl_take isl_basic_set *bset, __isl_take isl_basic_set *context, __isl_take isl_mat *T)
isl_bool isl_map_is_disjoint(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
static int n_pure_div_eq(__isl_keep isl_basic_map *bmap)
static isl_bool isl_map_is_disjoint_aligned(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
static __isl_give isl_basic_set * replace_by_empty(__isl_take isl_basic_set *bset)
static __isl_give isl_basic_map * reduce_stride_constraints(__isl_take isl_basic_map *bmap, int n, __isl_keep isl_mat *A)
static __isl_give isl_map * replace_by_universe(__isl_take isl_map *map, __isl_take isl_map *drop)
static __isl_give isl_basic_map * reduce_coefficient_in_div(__isl_take isl_basic_map *bmap, int div, int pos)
static void lower_bound_from_parallel(__isl_keep isl_basic_map *bmap, int ineq, int lower, int pos, isl_int *l)
__isl_give isl_basic_set * isl_basic_set_simplify(__isl_take isl_basic_set *bset)
__isl_give isl_basic_map * isl_basic_map_gauss5(__isl_take isl_basic_map *bmap, int *progress, isl_stat(*swap)(unsigned a, unsigned b, void *user), isl_stat(*drop)(unsigned n, void *user), void *user)
__isl_give isl_basic_map * isl_basic_map_plain_gist(__isl_take isl_basic_map *bmap, __isl_take isl_basic_map *context)
__isl_give isl_basic_map * isl_basic_map_drop_redundant_divs(__isl_take isl_basic_map *bmap)
static void swap_inequality(__isl_keep isl_basic_map *bmap, int a, int b)
static __isl_give isl_basic_map * eliminate_divs_eq(__isl_take isl_basic_map *bmap, int *progress)
__isl_give isl_set * isl_set_gist(__isl_take isl_set *set, __isl_take isl_set *context)
__isl_give isl_basic_map * isl_basic_map_eliminate_pure_unit_divs(__isl_take isl_basic_map *bmap)
__isl_give isl_basic_map * isl_basic_map_drop_constraints_involving_unknown_divs(__isl_take isl_basic_map *bmap)
static isl_bool int_between_bounds(__isl_keep isl_basic_map *bmap, int i, int l, int u, struct test_ineq_data *data)
static __isl_give isl_basic_map * remove_redundant_divs(__isl_take isl_basic_map *bmap)
static int hash_index(struct isl_constraint_index *ci, __isl_keep isl_basic_map *bmap, int k)
static isl_stat isl_reduce_coefficients_data_init(__isl_keep isl_basic_map *bmap, struct isl_reduce_coefficients_data *data)
static int set_reduced_using_equalities(isl_int *dst, isl_int *src, __isl_keep isl_basic_set *bset, int *elim, unsigned total)
isl_bool isl_map_plain_is_disjoint(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
static isl_bool constraint_index_is_redundant(struct isl_constraint_index *ci, isl_int *ineq)
static isl_bool needs_reduction(__isl_keep isl_basic_map *bmap, int div, int pos)
static __isl_give isl_basic_map * eliminate_divs_ineq(__isl_take isl_basic_map *bmap, int *progress)
__isl_give isl_map * isl_map_drop_constraints_involving_unknown_divs(__isl_take isl_map *map)
static isl_size div_find_coalesce(__isl_keep isl_basic_map *bmap, int *pairs, unsigned div, unsigned l, unsigned u)
static int is_residue(isl_int *res, isl_int *ineq, isl_int sum, unsigned len, isl_int *gcd)
__isl_give isl_basic_map * isl_basic_map_mark_final(__isl_take isl_basic_map *bmap)
__isl_give isl_map * isl_map_plain_gist(__isl_take isl_map *map, __isl_take isl_map *context)
static __isl_give isl_basic_map * reduce_div_coefficients(__isl_take isl_basic_map *bmap)
static isl_bool single_unknown(__isl_keep isl_basic_map *bmap, int ineq, int div)
__isl_give isl_basic_set * isl_basic_set_eliminate(__isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned first, unsigned n)
static void swap_equality(__isl_keep isl_basic_map *bmap, int a, int b)
__isl_give isl_basic_set * isl_basic_set_gauss(__isl_take isl_basic_set *bset, int *progress)
static __isl_give isl_basic_map * basic_map_from_equalities(__isl_take isl_space *space, __isl_take isl_mat *eq)
static void mark_progress(int *progress)
__isl_give isl_basic_set * isl_basic_set_eliminate_vars(__isl_take isl_basic_set *bset, unsigned pos, unsigned n)
__isl_give isl_basic_set * isl_basic_set_finalize(__isl_take isl_basic_set *bset)
__isl_give isl_map * isl_map_gist_domain(__isl_take isl_map *map, __isl_take isl_set *context)
static void update_groups(int dim, int *group, isl_int *c)
static isl_bool is_parallel_except(__isl_keep isl_basic_map *bmap, int i, int j, int pos)
__isl_give isl_map * isl_map_gist_basic_map(__isl_take isl_map *map, __isl_take isl_basic_map *context)
static isl_bool test_ineq_is_satisfied(__isl_keep isl_basic_map *bmap, struct test_ineq_data *data)
static int all_neg(int *row, int n)
__isl_give isl_set * isl_set_gist_basic_set(__isl_take isl_set *set, __isl_take isl_basic_set *context)
static int lower_bound_is_cst(__isl_keep isl_basic_map *bmap, int div, int ineq)
static __isl_give isl_basic_map * drop_unrelated_constraints(__isl_take isl_basic_map *bmap, int *relevant)
__isl_give isl_basic_map * isl_basic_map_drop_unrelated_constraints(__isl_take isl_basic_map *bmap, __isl_take int *group)
static __isl_give isl_basic_map * remove_duplicate_divs(__isl_take isl_basic_map *bmap, int *progress)
__isl_give isl_map * isl_map_gist_range(__isl_take isl_map *map, __isl_take isl_set *context)
static int is_zero_or_one(isl_int v)
isl_bool isl_basic_map_plain_is_disjoint(__isl_keep isl_basic_map *bmap1, __isl_keep isl_basic_map *bmap2)
static __isl_give isl_basic_map * drop_inequalities(__isl_take isl_basic_map *bmap, __isl_keep isl_basic_map *context)
static void remove_incomplete_powers(isl_int *g, isl_int c)
__isl_give isl_basic_map * isl_basic_map_normalize_constraints(__isl_take isl_basic_map *bmap)
static int * alloc_groups(__isl_keep isl_basic_set *context)
static void compute_elimination_index(__isl_keep isl_basic_map *bmap, int *elim, unsigned len)
static __isl_give isl_basic_set * uset_gist_full(__isl_take isl_basic_set *bset, __isl_take isl_mat *ineq, __isl_take isl_basic_set *context)
__isl_give isl_set * isl_set_gist_params(__isl_take isl_set *set, __isl_take isl_set *context)
static isl_bool has_coef_one(__isl_keep isl_basic_map *bmap, int div, int ineq)
static isl_bool is_div_constraint(__isl_keep isl_basic_map *bmap, int ineq, unsigned v_div, unsigned n_div)
isl_bool isl_set_is_disjoint(__isl_keep isl_set *set1, __isl_keep isl_set *set2)
static __isl_give isl_basic_map * eliminate_integral_divs(__isl_take isl_basic_map *bmap, int *progress)
static __isl_give isl_basic_set * remove_shifted_constraints(__isl_take isl_basic_set *bset, __isl_keep isl_basic_set *context)
static isl_stat preimage(isl_int *c, __isl_keep isl_mat *T)
static __isl_give isl_vec * normalize_constraint(__isl_take isl_vec *v, int *tightened)
__isl_give isl_set * isl_set_gist_params_basic_set(__isl_take isl_set *set, __isl_take isl_basic_set *context)
static __isl_give isl_basic_set * update_ineq_free(__isl_take isl_basic_set *bset, __isl_take isl_mat *ineq, __isl_take isl_basic_set *context, __isl_take int *row, struct isl_tab *tab)
static __isl_give isl_basic_map * reduce_div_coefficients_of_div(__isl_take isl_basic_map *bmap, int div)
static isl_bool any_div_involves_div(__isl_keep isl_basic_map *bmap, int div)
static isl_bool is_opposite_except(__isl_keep isl_basic_map *bmap, int i, int j, int pos)
static int n_div_eq(__isl_keep isl_basic_map *bmap)
static int reduced_using_equalities(isl_int *dst, isl_int *src, __isl_keep isl_basic_map *bmap, int *elim, unsigned total)
static __isl_give isl_basic_map * check_for_residues_in_divs(__isl_take isl_basic_map *bmap, int k, int l, isl_int sum, int *progress)
static __isl_give isl_basic_map * eliminate_unit_divs(__isl_take isl_basic_map *bmap, int *progress)
static __isl_give isl_basic_map * check_for_div_constraints(__isl_take isl_basic_map *bmap, int k, int l, isl_int sum, int *progress)
__isl_give isl_basic_set * isl_basic_set_normalize_constraints(__isl_take isl_basic_set *bset)
static __isl_give isl_basic_set * update_ineq(__isl_take isl_basic_set *bset, __isl_keep int *row, struct isl_tab *tab)
static isl_bool bmap_eq_involves_unknown_divs(__isl_keep isl_basic_map *bmap, int eq, unsigned first, unsigned n)
static void lower_bound_from_opposite(__isl_keep isl_basic_map *bmap, int ineq, int upper, int pos, isl_int *u)
static __isl_give isl_basic_set * uset_gist(__isl_take isl_basic_set *bset, __isl_take isl_basic_set *context)
static __isl_give isl_basic_map * eliminate_selected_unit_divs(__isl_take isl_basic_map *bmap, isl_bool(*select)(__isl_keep isl_basic_map *bmap, int div), int *progress)
static int is_parallel_part(__isl_keep isl_basic_map *bmap, int i, int j, int first, int n)
static __isl_give isl_basic_map * eliminate_var_using_equality(__isl_take isl_basic_map *bmap, unsigned pos, isl_int *eq, int keep_divs, int equivalent, int *progress)
static __isl_give isl_basic_map * eliminate_integral_div(__isl_take isl_basic_map *bmap, int div)
isl_bool isl_set_plain_is_disjoint(__isl_keep isl_set *set1, __isl_keep isl_set *set2)
static isl_stat setup_constraint_index(struct isl_constraint_index *ci, __isl_keep isl_basic_set *bset)
static __isl_give isl_basic_map * fix_cst_lower(__isl_take isl_basic_map *bmap, int div, int ineq, int lower, int *pairs)
static int residue_exceeded(isl_int cst, isl_int cst2, isl_int n, isl_int sum)
static __isl_give isl_basic_map * isl_basic_map_modify_inequality(__isl_take isl_basic_map *bmap, int equivalent)
static __isl_give isl_basic_map * normalize_divs(__isl_take isl_basic_map *bmap, int *progress)
__isl_give isl_mat * isl_mat_cow(__isl_take isl_mat *mat)
__isl_give isl_mat * isl_mat_sub_alloc6(isl_ctx *ctx, isl_int **row, unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col)
isl_stat isl_mat_row_gcd(__isl_keep isl_mat *mat, int row, isl_int *gcd)
void isl_mat_col_submul(__isl_keep isl_mat *mat, int dst_col, isl_int f, int src_col)
static __isl_give isl_mat * eliminate(__isl_take isl_mat *mat, int row, int col)
static isl_stat set_div(__isl_take isl_set *set, __isl_take isl_qpolynomial *qp, int div, isl_int v, struct isl_split_periods_data *data)
void isl_seq_submul(isl_int *dst, isl_int f, isl_int *src, unsigned len)
void isl_seq_combine(isl_int *dst, isl_int m1, isl_int *src1, isl_int m2, isl_int *src2, unsigned len)
int isl_seq_last_non_zero(isl_int *p, unsigned len)
int isl_seq_is_neg(isl_int *p1, isl_int *p2, unsigned len)
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_swp_or_cpy(isl_int *dst, isl_int *src, unsigned len)
void isl_seq_gcd(isl_int *p, unsigned len, isl_int *gcd)
void isl_seq_sub(isl_int *dst, isl_int *src, unsigned len)
void isl_seq_clr(isl_int *p, unsigned len)
void isl_seq_elim(isl_int *dst, isl_int *src, unsigned pos, unsigned len, isl_int *m)
void isl_seq_cpy(isl_int *dst, isl_int *src, unsigned len)
int isl_seq_eq(isl_int *p1, isl_int *p2, unsigned len)
int isl_seq_any_non_zero(isl_int *p, unsigned len)
uint32_t isl_seq_get_hash_bits(isl_int *p, unsigned len, unsigned bits)
void isl_seq_normalize(struct isl_ctx *ctx, isl_int *p, unsigned len)
void isl_seq_neg(isl_int *dst, isl_int *src, unsigned len)
static isl_bool match(__isl_keep isl_space *space1, enum isl_dim_type type1, __isl_keep isl_space *space2, enum isl_dim_type type2)
static __isl_keep isl_space * nested(__isl_keep isl_space *space, enum isl_dim_type type)
int isl_tab_detect_redundant(struct isl_tab *tab)
void isl_tab_free(struct isl_tab *tab)
int isl_tab_is_redundant(struct isl_tab *tab, int con)
int isl_tab_is_equality(struct isl_tab *tab, int con)
__isl_give isl_basic_set * isl_basic_set_update_from_tab(__isl_take isl_basic_set *bset, struct isl_tab *tab)
isl_stat isl_tab_add_ineq(struct isl_tab *tab, isl_int *ineq)
enum isl_lp_result isl_tab_min(struct isl_tab *tab, isl_int *f, isl_int denom, isl_int *opt, isl_int *opt_denom, unsigned flags)
int isl_tab_detect_implicit_equalities(struct isl_tab *tab)
__isl_give struct isl_tab * isl_tab_from_basic_map(__isl_keep isl_basic_map *bmap, int track)
__isl_give struct isl_tab * isl_tab_from_basic_set(__isl_keep isl_basic_set *bset, int track)
int isl_tab_freeze_constraint(struct isl_tab *tab, int con)
int isl_tab_extend_cons(struct isl_tab *tab, unsigned n_new)
static __isl_give isl_union_map * total(__isl_take isl_union_map *umap, __isl_give isl_map *(*fn)(__isl_take isl_map *))
__isl_give isl_vec * isl_vec_cow(__isl_take isl_vec *vec)
__isl_export __isl_give isl_map * isl_map_intersect_range(__isl_take isl_map *map, __isl_take isl_set *set)
__isl_export isl_bool isl_basic_map_is_empty(__isl_keep isl_basic_map *bmap)
__isl_give isl_space * isl_basic_map_get_space(__isl_keep isl_basic_map *bmap)
isl_bool isl_basic_map_plain_is_universe(__isl_keep isl_basic_map *bmap)
__isl_export isl_size isl_map_n_basic_map(__isl_keep isl_map *map)
__isl_export __isl_give isl_map * isl_map_intersect_params(__isl_take isl_map *map, __isl_take isl_set *params)
__isl_give isl_basic_map * isl_basic_map_project_out(__isl_take isl_basic_map *bmap, enum isl_dim_type type, unsigned first, unsigned n)
__isl_export isl_bool isl_map_is_empty(__isl_keep isl_map *map)
__isl_export __isl_give isl_map * isl_map_universe(__isl_take isl_space *space)
__isl_give isl_basic_map * isl_basic_map_insert_dims(__isl_take isl_basic_map *bmap, enum isl_dim_type type, unsigned pos, unsigned n)
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_bool isl_basic_map_is_disjoint(__isl_keep isl_basic_map *bmap1, __isl_keep isl_basic_map *bmap2)
__isl_give isl_basic_map * isl_map_unshifted_simple_hull_from_map_list(__isl_take isl_map *map, __isl_take isl_map_list *list)
__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_give isl_basic_map * isl_basic_map_remove_dims(__isl_take isl_basic_map *bmap, enum isl_dim_type type, unsigned first, unsigned n)
__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_bool isl_map_plain_is_universe(__isl_keep isl_map *map)
isl_ctx * isl_map_get_ctx(__isl_keep isl_map *map)
__isl_export __isl_give isl_map * isl_map_intersect_domain(__isl_take isl_map *map, __isl_take isl_set *set)
isl_bool isl_map_plain_is_empty(__isl_keep isl_map *map)
__isl_give isl_basic_map * isl_basic_map_remove_redundancies(__isl_take isl_basic_map *bmap)
__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_export __isl_give isl_basic_map * isl_map_unshifted_simple_hull(__isl_take isl_map *map)
isl_bool isl_basic_map_is_rational(__isl_keep isl_basic_map *bmap)
__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_bool isl_map_plain_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
__isl_give isl_map * isl_map_compute_divs(__isl_take isl_map *map)
__isl_export __isl_give isl_basic_map * isl_basic_map_intersect(__isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2)
__isl_give isl_basic_map * isl_map_simple_hull(__isl_take isl_map *map)
__isl_export isl_bool isl_map_is_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
__isl_give isl_basic_map * isl_basic_map_universe(__isl_take isl_space *space)
__isl_give isl_mat * isl_mat_copy(__isl_keep isl_mat *mat)
__isl_give isl_mat * isl_mat_normalize_row(__isl_take isl_mat *mat, int row)
__isl_give isl_mat * isl_mat_product(__isl_take isl_mat *left, __isl_take isl_mat *right)
isl_size isl_mat_cols(__isl_keep isl_mat *mat)
isl_size isl_mat_rows(__isl_keep isl_mat *mat)
__isl_give isl_mat * isl_mat_identity(isl_ctx *ctx, unsigned n_row)
__isl_give isl_mat * isl_mat_diagonal(__isl_take isl_mat *mat1, __isl_take isl_mat *mat2)
__isl_give isl_mat * isl_mat_right_inverse(__isl_take isl_mat *mat)
__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_concat(__isl_take isl_mat *top, __isl_take isl_mat *bot)
__isl_give isl_mat * isl_mat_unimodular_complete(__isl_take isl_mat *M, int row)
__isl_give isl_vec * isl_vec_mat_product(__isl_take isl_vec *vec, __isl_take isl_mat *mat)
static bool any(const std::vector< bool > &vector)
isl_size isl_basic_set_dim(__isl_keep isl_basic_set *bset, enum isl_dim_type type)
isl_bool isl_basic_set_plain_is_universe(__isl_keep isl_basic_set *bset)
__isl_export __isl_give isl_basic_set * isl_basic_set_detect_equalities(__isl_take isl_basic_set *bset)
isl_bool isl_basic_set_involves_dims(__isl_keep isl_basic_set *bset, enum isl_dim_type type, unsigned first, unsigned n)
__isl_export __isl_give isl_space * isl_set_get_space(__isl_keep isl_set *set)
__isl_give isl_space * isl_basic_set_get_space(__isl_keep isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_project_out(__isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned first, unsigned n)
__isl_export __isl_give isl_basic_set * isl_basic_set_intersect_params(__isl_take isl_basic_set *bset1, __isl_take isl_basic_set *bset2)
__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_give isl_basic_set * isl_basic_set_add_dims(__isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned n)
__isl_give isl_basic_set * isl_basic_set_empty(__isl_take isl_space *space)
__isl_export isl_bool isl_basic_set_is_empty(__isl_keep isl_basic_set *bset)
__isl_export __isl_give isl_basic_set * isl_basic_set_affine_hull(__isl_take isl_basic_set *bset)
isl_ctx * isl_basic_set_get_ctx(__isl_keep isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_copy(__isl_keep isl_basic_set *bset)
__isl_export __isl_give isl_basic_set * isl_basic_set_intersect(__isl_take isl_basic_set *bset1, __isl_take isl_basic_set *bset2)
__isl_give isl_basic_set * isl_basic_set_universe(__isl_take isl_space *space)
static __isl_give isl_set * set_from_map(__isl_take isl_map *map)
__isl_null isl_space * isl_space_free(__isl_take isl_space *space)
isl_ctx * isl_space_get_ctx(__isl_keep isl_space *space)
__isl_give isl_space * isl_space_copy(__isl_keep isl_space *space)
isl_size isl_space_dim(__isl_keep isl_space *space, enum isl_dim_type type)
struct isl_basic_map * bmap
static bool equivalent(const Kind &kind1, const Kind &kind2)
static Signature set_to_map
static std::vector< std::string > intersect(const std::vector< std::string > &v1, const std::vector< std::string > &v2)
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_alloc(isl_ctx *ctx, unsigned size)