add isl_set_lower_bound_dim
authorSven Verdoolaege <skimo@kotnet.org>
Fri, 26 Sep 2008 08:34:15 +0000 (10:34 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Mon, 13 Oct 2008 22:35:53 +0000 (00:35 +0200)
include/isl_set.h
isl_map.c

index a4262d0..c1bad36 100644 (file)
@@ -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,
index 47a1218..f405b96 100644 (file)
--- 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;