From: Sven Verdoolaege Date: Wed, 21 Oct 2009 12:01:53 +0000 (+0200) Subject: add isl_basic_set_fix X-Git-Tag: isl-0.02~210 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5d8b5ef8ca4c0e84ea53a4d346a1950990cb8c04;p=platform%2Fupstream%2Fisl.git add isl_basic_set_fix --- diff --git a/include/isl_set.h b/include/isl_set.h index fa79ff3..e5c63ac 100644 --- a/include/isl_set.h +++ b/include/isl_set.h @@ -131,6 +131,8 @@ void isl_basic_set_print(__isl_keep isl_basic_set *bset, FILE *out, int indent, const char *prefix, const char *suffix, unsigned output_format); void isl_set_print(__isl_keep struct isl_set *set, FILE *out, int indent, unsigned output_format); +__isl_give isl_basic_set *isl_basic_set_fix(__isl_take isl_basic_set *bset, + enum isl_dim_type type, unsigned pos, isl_int value); struct isl_basic_set *isl_basic_set_fix_si(struct isl_basic_set *bset, enum isl_dim_type type, unsigned pos, int value); diff --git a/isl_map.c b/isl_map.c index 9a0beb1..c642ec3 100644 --- a/isl_map.c +++ b/isl_map.c @@ -3077,8 +3077,8 @@ struct isl_set *isl_set_extend(struct isl_set *base, nparam, 0, dim); } -static struct isl_basic_map *isl_basic_map_fix_pos(struct isl_basic_map *bmap, - unsigned pos, int value) +static struct isl_basic_map *isl_basic_map_fix_pos_si( + struct isl_basic_map *bmap, unsigned pos, int value) { int j; @@ -3097,14 +3097,47 @@ error: return NULL; } +static __isl_give isl_basic_map *isl_basic_map_fix_pos( + __isl_take isl_basic_map *bmap, unsigned pos, isl_int value) +{ + int j; + + bmap = isl_basic_map_cow(bmap); + bmap = isl_basic_map_extend_constraints(bmap, 1, 0); + j = isl_basic_map_alloc_equality(bmap); + if (j < 0) + goto error; + isl_seq_clr(bmap->eq[j] + 1, isl_basic_map_total_dim(bmap)); + isl_int_set_si(bmap->eq[j][pos], -1); + isl_int_set(bmap->eq[j][0], value); + bmap = isl_basic_map_simplify(bmap); + return isl_basic_map_finalize(bmap); +error: + isl_basic_map_free(bmap); + return NULL; +} + struct isl_basic_map *isl_basic_map_fix_si(struct isl_basic_map *bmap, enum isl_dim_type type, unsigned pos, int value) { if (!bmap) return NULL; isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), goto error); - return isl_basic_map_fix_pos(bmap, isl_basic_map_offset(bmap, type) + pos, - value); + return isl_basic_map_fix_pos_si(bmap, + isl_basic_map_offset(bmap, type) + pos, value); +error: + isl_basic_map_free(bmap); + return NULL; +} + +__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) +{ + if (!bmap) + return NULL; + isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), goto error); + return isl_basic_map_fix_pos(bmap, + isl_basic_map_offset(bmap, type) + pos, value); error: isl_basic_map_free(bmap); return NULL; @@ -3118,6 +3151,14 @@ struct isl_basic_set *isl_basic_set_fix_si(struct isl_basic_set *bset, type, pos, value); } +__isl_give isl_basic_set *isl_basic_set_fix(__isl_take isl_basic_set *bset, + enum isl_dim_type type, unsigned pos, isl_int value) +{ + return (struct isl_basic_set *) + isl_basic_map_fix((struct isl_basic_map *)bset, + type, pos, value); +} + struct isl_basic_map *isl_basic_map_fix_input_si(struct isl_basic_map *bmap, unsigned input, int value) {