33 isl_int *c,
int *div_map,
unsigned n_div)
40 for (i = 0; i < n_div; ++i) {
41 int pos = 1 + dim + div_map[i];
65 dim = bmap_total - bmap_n_div;
66 if (tab_total < 0 || bmap_total < 0 || bmap_n_div < 0)
76 for (i = 0; i < bmap->n_eq; ++i) {
80 isl_seq_neg(bmap->eq[i], bmap->eq[i], 1 + bmap_total);
84 isl_seq_neg(bmap->eq[i], bmap->eq[i], 1 + bmap_total);
89 for (i = 0; i < bmap->n_ineq; ++i) {
129 dim = bmap_total - bmap_n_div;
130 if (tab_total < 0 || bmap_total < 0 || bmap_n_div < 0)
137 if (c < 2 * bmap->n_eq) {
196 for (i = 0; i < bmap->n_div; ++i) {
199 for (j = 0; j < i; ++j)
201 vec->
el[2 + dim + (*div_map)[j]],
202 bmap->div[i][2 + dim + j]);
230 for (i = 0; i < tab->
n_con; ++i)
257 for (
n = 0, i = 0; i < n_test; ++i) {
322 int **div_map = NULL;
343 if (!snap || !k || !
n || !index || !div_map)
358 if (level >=
map->n) {
374 else if (dc->
add(dc, bm) < 0)
387 &div_map[level]) < 0)
417 div_map[level], index[level][0], 1) < 0)
422 if (k[level] + 1 >=
n[level]) {
430 index[level][k[level]], 0) < 0)
436 index[level][k[level]], 1) < 0)
448 for (i = 0; index && i <
map->n; ++i)
451 for (i = 0; div_map && i <
map->n; ++i)
464 for (i = 0; index && i <
map->n; ++i)
467 for (i = 0; div_map && i <
map->n; ++i)
568 for (i = 0; i <
map1->n; ++i) {
609 "incompatible spaces",
goto error);
634 "incompatible spaces",
goto error);
703 for (i = 0; i <
map1->n; ++i) {
705 if (is_empty < 0 || !is_empty)
727 return bmap->n_eq ==
total;
757 isl_assert(bmap->ctx, bmap->n_eq == dim,
return NULL);
765 for (j = 0; j < bmap->n_eq; ++j) {
810 "expecting single-disjunct input",
817 for (i = 0; i <
map2->n; ++i) {
854 if (rat1 < 0 || rat2 < 0)
909 for (i = 1; i <
map->n; ++i) {
#define isl_die(ctx, errno, msg, code)
#define isl_assert(ctx, test, code)
#define isl_alloc_array(ctx, type, n)
#define isl_calloc_array(ctx, type, n)
#define ISL_F_ISSET(p, f)
void GMPQAPI() init(mp_rat x)
#define isl_int_is_one(i)
#define isl_int_is_negone(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_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_abs(r, i)
__isl_give isl_basic_map * isl_basic_map_order_divs(__isl_take isl_basic_map *bmap)
static unsigned pos(__isl_keep isl_space *space, enum isl_dim_type type)
__isl_give isl_map * isl_map_order_divs(__isl_take isl_map *map)
__isl_give isl_map * isl_map_cow(__isl_take isl_map *map)
__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_bool isl_map_compatible_range(__isl_keep isl_map *map, __isl_keep isl_set *set)
__isl_give isl_map * isl_map_remove_empty_parts(__isl_take isl_map *map)
isl_bool isl_map_has_rational(__isl_keep isl_map *map)
isl_bool isl_map_compatible_domain(__isl_keep isl_map *map, __isl_keep isl_set *set)
isl_stat isl_map_align_params_bin(__isl_keep isl_map **map1, __isl_keep isl_map **map2)
__isl_give isl_basic_map * isl_basic_map_simplify(__isl_take isl_basic_map *bmap)
isl_stat isl_map_align_params_set(__isl_keep isl_map **map, __isl_keep isl_set **set)
__isl_give isl_basic_map * isl_basic_map_finalize(__isl_take isl_basic_map *bmap)
isl_stat isl_map_check_equal_space(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
isl_bool isl_basic_map_contains_point(__isl_keep isl_basic_map *bmap, __isl_keep isl_point *point)
static int tab_freeze_constraints(struct isl_tab *tab)
isl_bool isl_set_is_subset(__isl_keep isl_set *set1, __isl_keep isl_set *set2)
__isl_give isl_map * isl_map_subtract(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_give isl_map * isl_map_subtract_range(__isl_take isl_map *map, __isl_take isl_set *dom)
static isl_bool map_is_singleton_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
isl_bool isl_basic_map_plain_is_singleton(__isl_keep isl_basic_map *bmap)
__isl_give isl_set * isl_set_make_disjoint(__isl_take isl_set *set)
__isl_give isl_map * isl_map_make_disjoint(__isl_take isl_map *map)
static __isl_give isl_map * replace_pair_by_empty(__isl_take isl_map *map1, __isl_take isl_map *map2)
static isl_bool map_is_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
__isl_give isl_set * isl_set_subtract(__isl_take isl_set *set1, __isl_take isl_set *set2)
isl_bool isl_map_plain_is_singleton(__isl_keep isl_map *map)
static __isl_give isl_map * basic_map_subtract(__isl_take isl_basic_map *bmap, __isl_take isl_map *map)
static isl_stat basic_map_subtract_add(struct isl_diff_collector *dc, __isl_take isl_basic_map *bmap)
static void expand_constraint(isl_vec *v, unsigned dim, isl_int *c, int *div_map, unsigned n_div)
static isl_stat tab_add_constraint(struct isl_tab *tab, __isl_keep isl_basic_map *bmap, int *div_map, int c, int oppose)
__isl_give isl_map * isl_map_complement(__isl_take isl_map *map)
static isl_stat basic_map_is_empty_add(struct isl_diff_collector *dc, __isl_take isl_basic_map *bmap)
isl_bool isl_map_is_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
static __isl_give isl_point * singleton_extract_point(__isl_keep isl_basic_map *bmap)
static int n_non_redundant(isl_ctx *ctx, struct isl_tab *tab, int offset, int **index)
__isl_give isl_set * isl_set_complement(__isl_take isl_set *set)
static isl_bool basic_map_diff_is_empty(__isl_keep isl_basic_map *bmap, __isl_keep isl_map *map)
static isl_bool map_diff_is_empty(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
__isl_give isl_map * isl_map_subtract_domain(__isl_take isl_map *map, __isl_take isl_set *dom)
static isl_stat tab_add_constraints(struct isl_tab *tab, __isl_keep isl_basic_map *bmap, int *div_map)
static isl_stat tab_add_divs(struct isl_tab *tab, __isl_keep isl_basic_map *bmap, int **div_map)
static isl_stat basic_map_collect_diff(__isl_take isl_basic_map *bmap, __isl_take isl_map *map, struct isl_diff_collector *dc)
static void oppose(__isl_keep isl_mat *M, __isl_keep isl_mat **U, __isl_keep isl_mat **Q, unsigned row, unsigned col)
__isl_give isl_point * isl_point_alloc(__isl_take isl_space *space, __isl_take isl_vec *vec)
int isl_seq_first_non_zero(isl_int *p, 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)
int isl_seq_eq(isl_int *p1, isl_int *p2, unsigned len)
void isl_seq_neg(isl_int *dst, isl_int *src, unsigned len)
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)
struct isl_tab_undo * isl_tab_snap(struct isl_tab *tab)
isl_stat isl_tab_add_ineq(struct isl_tab *tab, isl_int *ineq)
int isl_tab_add_div(struct isl_tab *tab, __isl_keep isl_vec *div)
__isl_give struct isl_tab * isl_tab_from_basic_map(__isl_keep isl_basic_map *bmap, int track)
isl_stat isl_tab_rollback(struct isl_tab *tab, struct isl_tab_undo *snap)
int isl_tab_freeze_constraint(struct isl_tab *tab, int con)
int isl_tab_extend_cons(struct isl_tab *tab, unsigned n_new)
__isl_give isl_basic_map * isl_basic_map_update_from_tab(__isl_take isl_basic_map *bmap, struct isl_tab *tab)
static __isl_give isl_union_map * total(__isl_take isl_union_map *umap, __isl_give isl_map *(*fn)(__isl_take isl_map *))
static __isl_give isl_map * universe(__isl_take isl_map *map)
__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_export __isl_give isl_map * isl_map_union(__isl_take isl_map *map1, __isl_take isl_map *map2)
__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_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_bool isl_map_has_equal_space(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
isl_bool isl_basic_map_plain_is_empty(__isl_keep isl_basic_map *bmap)
__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_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_export __isl_give isl_map * isl_map_empty(__isl_take isl_space *space)
__isl_export isl_bool isl_map_is_disjoint(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
__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_null isl_point * isl_point_free(__isl_take isl_point *pnt)
isl_ctx * isl_set_get_ctx(__isl_keep isl_set *set)
__isl_null isl_set * isl_set_free(__isl_take isl_set *set)
static __isl_give isl_set * set_from_map(__isl_take isl_map *map)
isl_stat(* add)(struct isl_diff_collector *dc, __isl_take isl_basic_map *bmap)
struct isl_diff_collector dc
struct isl_diff_collector dc
struct isl_basic_map * bmap
static Signature set_to_map
__isl_null isl_vec * isl_vec_free(__isl_take isl_vec *vec)
__isl_give isl_vec * isl_vec_alloc(isl_ctx *ctx, unsigned size)