From aadb5277191308421fb9bd50b628e3297c23e17d Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Tue, 26 Aug 2008 00:03:25 +0200 Subject: [PATCH] add isl_set_fix_dim_si --- include/isl_set.h | 2 ++ isl_map.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/include/isl_set.h b/include/isl_set.h index 0539b1c..f5c48e5 100644 --- a/include/isl_set.h +++ b/include/isl_set.h @@ -124,6 +124,8 @@ struct isl_set *isl_set_subtract(struct isl_ctx *ctx, struct isl_set *set1, struct isl_set *set2); struct isl_set *isl_set_apply(struct isl_ctx *ctx, struct isl_set *set, struct isl_map *map); +struct isl_set *isl_set_fix_dim_si(struct isl_ctx *ctx, struct isl_set *set, + unsigned dim, int value); void isl_set_dump(struct isl_ctx *ctx, struct isl_set *set, FILE *out, int indent); diff --git a/isl_map.c b/isl_map.c index aab015e..97e9939 100644 --- a/isl_map.c +++ b/isl_map.c @@ -2320,17 +2320,13 @@ error: return NULL; } -struct isl_basic_map *isl_basic_map_fix_input_si(struct isl_ctx *ctx, +static struct isl_basic_map *isl_basic_map_fix_var(struct isl_ctx *ctx, struct isl_basic_map *bmap, - unsigned input, int value) + unsigned var, int value) { int j; bmap = isl_basic_map_cow(ctx, bmap); - if (!bmap) - return NULL; - isl_assert(ctx, input < bmap->n_in, goto error); - bmap = isl_basic_map_extend(ctx, bmap, bmap->nparam, bmap->n_in, bmap->n_out, 0, 1, 0); j = isl_basic_map_alloc_equality(ctx, bmap); @@ -2338,7 +2334,7 @@ struct isl_basic_map *isl_basic_map_fix_input_si(struct isl_ctx *ctx, 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][1 + var], -1); isl_int_set_si(bmap->eq[j][0], value); bmap = isl_basic_map_simplify(ctx, bmap); return isl_basic_map_finalize(ctx, bmap); @@ -2347,6 +2343,34 @@ error: return NULL; } +struct isl_basic_map *isl_basic_map_fix_input_si(struct isl_ctx *ctx, + struct isl_basic_map *bmap, + unsigned input, int value) +{ + if (!bmap) + return NULL; + isl_assert(ctx, input < bmap->n_in, goto error); + return isl_basic_map_fix_var(ctx, bmap, bmap->nparam + input, value); +error: + isl_basic_map_free(ctx, bmap); + return NULL; +} + +struct isl_basic_set *isl_basic_set_fix_dim_si(struct isl_ctx *ctx, + struct isl_basic_set *bset, + unsigned dim, int value) +{ + if (!bset) + return NULL; + isl_assert(ctx, dim < bset->dim, goto error); + return (struct isl_basic_set *) + isl_basic_map_fix_var(ctx, (struct isl_basic_map *)bset, + bset->nparam + dim, value); +error: + isl_basic_set_free(ctx, bset); + return NULL; +} + struct isl_map *isl_map_fix_input_si(struct isl_ctx *ctx, struct isl_map *map, unsigned input, int value) { @@ -2369,6 +2393,28 @@ error: return NULL; } +struct isl_set *isl_set_fix_dim_si(struct isl_ctx *ctx, struct isl_set *set, + unsigned dim, int value) +{ + int i; + + set = isl_set_cow(ctx, set); + if (!set) + return NULL; + + isl_assert(ctx, dim < set->dim, goto error); + for (i = 0; i < set->n; ++i) { + set->p[i] = isl_basic_set_fix_dim_si(ctx, set->p[i], + dim, value); + if (!set->p[i]) + goto error; + } + return set; +error: + isl_set_free(ctx, set); + return NULL; +} + struct isl_map *isl_map_reverse(struct isl_ctx *ctx, struct isl_map *map) { int i; -- 2.7.4