From 333dfc8a284bb04a0c36b0c3c47a23c1d0932183 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Fri, 26 Sep 2008 10:34:15 +0200 Subject: [PATCH] add isl_set_lower_bound_dim --- include/isl_set.h | 2 ++ isl_map.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/include/isl_set.h b/include/isl_set.h index a4262d0..c1bad36 100644 --- a/include/isl_set.h +++ b/include/isl_set.h @@ -132,6 +132,8 @@ struct isl_set *isl_set_subtract(struct isl_set *set1, struct isl_set *set2); struct isl_set *isl_set_apply(struct isl_set *set, struct isl_map *map); struct isl_set *isl_set_fix_dim_si(struct isl_set *set, unsigned dim, int value); +struct isl_set *isl_set_lower_bound_dim(struct isl_set *set, + unsigned dim, isl_int value); struct isl_basic_set *isl_basic_set_remove_dims(struct isl_basic_set *bset, unsigned first, unsigned n); struct isl_set *isl_set_remove_dims(struct isl_set *set, diff --git a/isl_map.c b/isl_map.c index 47a1218..f405b96 100644 --- a/isl_map.c +++ b/isl_map.c @@ -2557,6 +2557,47 @@ error: return NULL; } +struct isl_basic_set *isl_basic_set_lower_bound_dim(struct isl_basic_set *bset, + unsigned dim, isl_int value) +{ + int j; + + bset = isl_basic_set_cow(bset); + bset = isl_basic_set_extend(bset, bset->nparam, bset->dim, 0, 0, 1); + j = isl_basic_set_alloc_inequality(bset); + if (j < 0) + goto error; + isl_seq_clr(bset->ineq[j], 1 + bset->nparam + bset->dim + bset->extra); + isl_int_set_si(bset->ineq[j][1 + bset->nparam + dim], 1); + isl_int_neg(bset->ineq[j][0], value); + bset = isl_basic_set_simplify(bset); + return isl_basic_set_finalize(bset); +error: + isl_basic_set_free(bset); + return NULL; +} + +struct isl_set *isl_set_lower_bound_dim(struct isl_set *set, unsigned dim, + isl_int value) +{ + int i; + + set = isl_set_cow(set); + if (!set) + return NULL; + + isl_assert(set->ctx, dim < set->dim, goto error); + for (i = 0; i < set->n; ++i) { + set->p[i] = isl_basic_set_lower_bound_dim(set->p[i], dim, value); + if (!set->p[i]) + goto error; + } + return set; +error: + isl_set_free(set); + return NULL; +} + struct isl_map *isl_map_reverse(struct isl_map *map) { int i; -- 2.7.4