{
isl_int_set(dst[0], src[0]);
isl_seq_cpy(dst+1, src+1, isl_min(dst_map->nparam, src_map->nparam));
+ if (dst_map->nparam > src_map->nparam)
+ isl_seq_clr(dst+1+src_map->nparam,
+ dst_map->nparam - src_map->nparam);
+ isl_seq_clr(dst+1+dst_map->nparam, in_off);
isl_seq_cpy(dst+1+dst_map->nparam+in_off,
src+1+src_map->nparam,
isl_min(dst_map->n_in-in_off, src_map->n_in));
+ if (dst_map->n_in-in_off > src_map->n_in)
+ isl_seq_clr(dst+1+dst_map->nparam+in_off+src_map->n_in,
+ dst_map->n_in - in_off - src_map->n_in);
+ isl_seq_clr(dst+1+dst_map->nparam+dst_map->n_in, out_off);
isl_seq_cpy(dst+1+dst_map->nparam+dst_map->n_in+out_off,
src+1+src_map->nparam+src_map->n_in,
isl_min(dst_map->n_out-out_off, src_map->n_out));
+ if (dst_map->n_out-out_off > src_map->n_out)
+ isl_seq_clr(dst+1+dst_map->nparam+dst_map->n_in+out_off+src_map->n_out,
+ dst_map->n_out - out_off - src_map->n_out);
+ isl_seq_clr(dst+1+dst_map->nparam+dst_map->n_in+dst_map->n_out, div_off);
isl_seq_cpy(dst+1+dst_map->nparam+dst_map->n_in+dst_map->n_out+div_off,
src+1+src_map->nparam+src_map->n_in+src_map->n_out,
isl_min(dst_map->extra-div_off, src_map->extra));
+ if (dst_map->extra-div_off > src_map->extra)
+ isl_seq_clr(dst+1+dst_map->nparam+dst_map->n_in+dst_map->n_out+
+ div_off+src_map->extra,
+ dst_map->extra - div_off - src_map->extra);
}
static void copy_div(struct isl_basic_map *dst_map, isl_int *dst,
unsigned total;
if (!bmap)
goto error;
- total = bmap->nparam + bmap->n_in + bmap->n_out;
+ total = bmap->nparam + bmap->n_in + bmap->n_out + bmap->extra;
isl_basic_map_free_div(ctx, bmap, bmap->n_div);
isl_basic_map_free_inequality(ctx, bmap, bmap->n_ineq);
if (bmap->n_eq > 0)
static void dump_constraint(struct isl_basic_map *bmap, isl_int *c,
const char *op, FILE *out, int indent)
{
+ int i;
+
fprintf(out, "%*s", indent, "");
dump_constraint_sign(bmap, c, 1, out);
dump_constraint_sign(bmap, c, -1, out);
fprintf(out, "\n");
+
+ for (i = bmap->n_div; i < bmap->extra; ++i) {
+ if (isl_int_is_zero(c[1+bmap->nparam+bmap->n_in+bmap->n_out+i]))
+ continue;
+ fprintf(out, "%*s", indent, "");
+ fprintf(out, "ERROR: unused div coefficient not zero\n");
+ }
}
static void dump_constraints(struct isl_basic_map *bmap,
j = isl_basic_map_alloc_equality(ctx, bmap);
if (j < 0)
goto error;
+ isl_seq_clr(bmap->eq[j],
+ 1 + bmap->nparam + bmap->n_in + bmap->n_out + bmap->extra);
isl_int_set_si(bmap->eq[j][1+bmap->nparam+input], -1);
isl_int_set_si(bmap->eq[j][0], value);
bmap = isl_basic_map_simplify(ctx, bmap);
(struct isl_basic_map *)bset);
if (j < 0)
goto error;
+ isl_seq_clr(bset->eq[j],
+ 1 + bset->nparam + bset->dim + bset->extra);
isl_int_set_si(bset->eq[j][1+bset->nparam+i], 1);
isl_int_set_si(bset->eq[j][1+bset->nparam+dim+i], 1);
isl_int_set_si(bset->eq[j][1+bset->nparam+2*dim+i], -1);
int j = isl_basic_map_alloc_equality(ctx, bmap);
if (j < 0)
goto error;
+ isl_seq_clr(bmap->eq[j],
+ 1 + bmap->nparam + bmap->n_in + bmap->n_out + bmap->extra);
isl_int_set_si(bmap->eq[j][1+nparam+i], 1);
isl_int_set_si(bmap->eq[j][1+nparam+dim+i], -1);
}
{
int i, j;
unsigned div_pos = 1 + bmap->nparam + bmap->n_in + bmap->n_out + div;
- unsigned total = bmap->nparam + bmap->n_in + bmap->n_out + bmap->n_div;
+ unsigned total = bmap->nparam + bmap->n_in + bmap->n_out + bmap->extra;
i = isl_basic_map_alloc_inequality(ctx, bmap);
if (i < 0)
if (j < 0)
goto error;
isl_seq_cpy(dst->div[j], src->div[i], 1+1+total);
+ isl_seq_clr(dst->div[j]+1+1+total,
+ dst->extra - src->n_div);
if (add_div_constraints(ctx, dst, j) < 0)
goto error;
}
static struct isl_map *add_cut_constraint(struct isl_ctx *ctx,
struct isl_map *dst,
struct isl_basic_map *src, isl_int *c,
- unsigned len, unsigned extra, int oppose)
+ unsigned len, int oppose)
{
struct isl_basic_map *copy = NULL;
int is_empty;
int k;
+ unsigned total;
copy = isl_basic_map_copy(ctx, src);
copy = isl_basic_map_cow(ctx, copy);
isl_seq_neg(copy->ineq[k], c, len);
else
isl_seq_cpy(copy->ineq[k], c, len);
- isl_seq_clr(copy->ineq[k]+len, extra);
+ total = 1 + copy->nparam + copy->n_in + copy->n_out + copy->extra;
+ isl_seq_clr(copy->ineq[k]+len, total - len);
isl_inequality_negate(ctx, copy, k);
copy = isl_basic_map_simplify(ctx, copy);
copy = isl_basic_map_finalize(ctx, copy);
for (i = 0; i < bmap->n_eq; ++i) {
for (j = 0; j < map->n; ++j) {
rest = add_cut_constraint(ctx, rest,
- map->p[j], bmap->eq[i],
- 1+total, map->p[j]->n_div - bmap->n_div, 0);
+ map->p[j], bmap->eq[i], 1+total, 0);
if (!rest)
goto error;
rest = add_cut_constraint(ctx, rest,
- map->p[j], bmap->eq[i],
- 1+total, map->p[j]->n_div - bmap->n_div, 1);
+ map->p[j], bmap->eq[i], 1+total, 1);
if (!rest)
goto error;
goto error;
isl_seq_cpy(map->p[j]->eq[k], bmap->eq[i], 1+total);
isl_seq_clr(map->p[j]->eq[k]+1+total,
- map->p[j]->n_div - bmap->n_div);
+ map->p[j]->extra - bmap->n_div);
}
}
for (i = 0; i < bmap->n_ineq; ++i) {
for (j = 0; j < map->n; ++j) {
rest = add_cut_constraint(ctx, rest,
- map->p[j], bmap->ineq[i],
- 1+total, map->p[j]->n_div - bmap->n_div, 0);
+ map->p[j], bmap->ineq[i], 1+total, 0);
if (!rest)
goto error;
goto error;
isl_seq_cpy(map->p[j]->ineq[k], bmap->ineq[i], 1+total);
isl_seq_clr(map->p[j]->ineq[k]+1+total,
- map->p[j]->n_div - bmap->n_div);
+ map->p[j]->extra - bmap->n_div);
}
}