#include "isl_set.h"
#include "isl_map.h"
#include "isl_map_polylib.h"
+#include "isl_map_private.h"
static void copy_values_from(isl_int *dst, Value *src, unsigned n)
{
static int add_equality(struct isl_ctx *ctx, struct isl_basic_map *bmap,
Value *constraint)
{
- int i = isl_basic_map_alloc_equality(ctx, bmap);
+ int i = isl_basic_map_alloc_equality(bmap);
if (i < 0)
return -1;
copy_constraint_from(bmap->eq[i], constraint, bmap->nparam,
static int add_inequality(struct isl_ctx *ctx, struct isl_basic_map *bmap,
Value *constraint)
{
- int i = isl_basic_map_alloc_inequality(ctx, bmap);
+ int i = isl_basic_map_alloc_inequality(bmap);
if (i < 0)
return -1;
copy_constraint_from(bmap->ineq[i], constraint, bmap->nparam,
}
}
for (i = 0; i < bmap->extra; ++i) {
- int j = isl_basic_map_alloc_div(ctx, bmap);
+ int j = isl_basic_map_alloc_div(bmap);
if (j == -1)
goto error;
isl_seq_clr(bmap->div[j], 1+1+total);
}
return bmap;
error:
- isl_basic_map_free(ctx, bmap);
+ isl_basic_map_free(bmap);
return NULL;
}
return NULL;
for (P = D; P; P = P->next)
- isl_set_add(ctx, set,
+ isl_set_add(set,
isl_basic_set_new_from_polylib(ctx, P, nparam, dim));
return set;
}
return NULL;
for (P = D; P; P = P->next)
- isl_map_add(ctx, map,
- isl_basic_map_new_from_polylib(ctx, P,
+ isl_map_add(map, isl_basic_map_new_from_polylib(ctx, P,
nparam, in, out));
return map;
}
-Polyhedron *isl_basic_map_to_polylib(struct isl_ctx *ctx,
- struct isl_basic_map *bmap)
+Polyhedron *isl_basic_map_to_polylib(struct isl_basic_map *bmap)
{
int i;
Matrix *M;
Polyhedron *P;
unsigned off;
- M = Matrix_Alloc(bmap->n_eq + bmap->n_ineq + 2*bmap->n_div,
+ if (!bmap)
+ return NULL;
+
+ M = Matrix_Alloc(bmap->n_eq + bmap->n_ineq,
1 + bmap->n_in + bmap->n_out + bmap->n_div + bmap->nparam + 1);
for (i = 0; i < bmap->n_eq; ++i) {
value_set_si(M->p[i][0], 0);
copy_constraint_to(M->p[off+i], bmap->ineq[i],
bmap->nparam, bmap->n_in + bmap->n_out, bmap->n_div);
}
- off += bmap->n_ineq;
- for (i = 0; i < bmap->n_div; ++i) {
- unsigned total = bmap->n_in+bmap->n_out+bmap->n_div+bmap->nparam;
- if (isl_int_is_zero(bmap->div[i][0]))
- continue;
- value_set_si(M->p[off+2*i][0], 1);
- copy_constraint_to(M->p[off+2*i], bmap->div[i]+1,
- bmap->nparam, bmap->n_in + bmap->n_out, bmap->n_div);
- copy_values_to(M->p[off+2*i]+1+bmap->n_in+bmap->n_out+i,
- bmap->div[i], 1);
- value_oppose(M->p[off+2*i][1+bmap->n_in+bmap->n_out+i],
- M->p[off+2*i][1+bmap->n_in+bmap->n_out+i]);
-
- value_set_si(M->p[off+2*i+1][0], 1);
- Vector_Oppose(M->p[off+2*i]+1, M->p[off+2*i+1]+1, total+1);
- value_addto(M->p[off+2*i+1][1+total], M->p[off+2*i+1][1+total],
- M->p[off+2*i+1][1+bmap->n_in+bmap->n_out+i]);
- value_decrement(M->p[off+2*i+1][1+total],
- M->p[off+2*i+1][1+total]);
- }
- P = Constraints2Polyhedron(M, ctx->MaxRays);
+ P = Constraints2Polyhedron(M, bmap->ctx->MaxRays);
Matrix_Free(M);
return P;
}
-Polyhedron *isl_map_to_polylib(struct isl_ctx *ctx, struct isl_map *map)
+Polyhedron *isl_map_to_polylib(struct isl_map *map)
{
int i;
Polyhedron *R = NULL;
Polyhedron **next = &R;
+ if (!map)
+ return NULL;
+
for (i = 0; i < map->n; ++i) {
- *next = isl_basic_map_to_polylib(ctx, map->p[i]);
+ *next = isl_basic_map_to_polylib(map->p[i]);
next = &(*next)->next;
}
return R;
}
-Polyhedron *isl_basic_set_to_polylib(struct isl_ctx *ctx,
- struct isl_basic_set *bset)
+Polyhedron *isl_basic_set_to_polylib(struct isl_basic_set *bset)
{
- return isl_basic_map_to_polylib(ctx,
- (struct isl_basic_map *)bset);
+ return isl_basic_map_to_polylib((struct isl_basic_map *)bset);
}
-Polyhedron *isl_set_to_polylib(struct isl_ctx *ctx, struct isl_set *set)
+Polyhedron *isl_set_to_polylib(struct isl_set *set)
{
- return isl_map_to_polylib(ctx, (struct isl_map *)set);
+ return isl_map_to_polylib((struct isl_map *)set);
}