add isl_set_upper_bound_si
authorSven Verdoolaege <skimo@kotnet.org>
Wed, 2 Nov 2011 15:52:54 +0000 (16:52 +0100)
committerSven Verdoolaege <skimo@kotnet.org>
Wed, 2 Nov 2011 15:52:54 +0000 (16:52 +0100)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/map.h
include/isl/set.h
isl_map.c

index 6862e2b..15e66fc 100644 (file)
@@ -1793,6 +1793,12 @@ dimension has the fixed given value.
        __isl_give isl_map *isl_map_lower_bound_si(
                __isl_take isl_map *map,
                enum isl_dim_type type, unsigned pos, int value);
+       __isl_give isl_set *isl_set_upper_bound_si(
+               __isl_take isl_set *set,
+               enum isl_dim_type type, unsigned pos, int value);
+       __isl_give isl_map *isl_map_upper_bound_si(
+               __isl_take isl_map *map,
+               enum isl_dim_type type, unsigned pos, int value);
 
 Intersect the set or relation with the half-space where the given
 dimension has a value bounded the fixed given value.
index 3240b94..bd554d3 100644 (file)
@@ -364,6 +364,8 @@ __isl_give isl_map *isl_map_fix_si(__isl_take isl_map *map,
                enum isl_dim_type type, unsigned pos, int value);
 __isl_give isl_map *isl_map_lower_bound_si(__isl_take isl_map *map,
                enum isl_dim_type type, unsigned pos, int value);
+__isl_give isl_map *isl_map_upper_bound_si(__isl_take isl_map *map,
+       enum isl_dim_type type, unsigned pos, int value);
 __isl_export
 __isl_give isl_basic_set *isl_basic_map_deltas(__isl_take isl_basic_map *bmap);
 __isl_export
index 6ff6cd5..c7f499a 100644 (file)
@@ -155,6 +155,8 @@ __isl_give isl_set *isl_set_fix_si(__isl_take isl_set *set,
                enum isl_dim_type type, unsigned pos, int value);
 __isl_give isl_set *isl_set_lower_bound_si(__isl_take isl_set *set,
                enum isl_dim_type type, unsigned pos, int value);
+__isl_give isl_set *isl_set_upper_bound_si(__isl_take isl_set *set,
+       enum isl_dim_type type, unsigned pos, int value);
 
 __isl_give isl_set *isl_set_equate(__isl_take isl_set *set,
        enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2);
index 4446106..69a41d6 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -4975,9 +4975,9 @@ struct isl_set *isl_set_fix_dim_si(struct isl_set *set, unsigned dim, int value)
                isl_map_fix_si((struct isl_map *)set, isl_dim_set, dim, value);
 }
 
-__isl_give isl_basic_map *isl_basic_map_lower_bound_si(
-               __isl_take isl_basic_map *bmap,
-               enum isl_dim_type type, unsigned pos, int value)
+static __isl_give isl_basic_map *basic_map_bound_si(
+       __isl_take isl_basic_map *bmap,
+       enum isl_dim_type type, unsigned pos, int value, int upper)
 {
        int j;
 
@@ -4991,8 +4991,13 @@ __isl_give isl_basic_map *isl_basic_map_lower_bound_si(
        if (j < 0)
                goto error;
        isl_seq_clr(bmap->ineq[j], 1 + isl_basic_map_total_dim(bmap));
-       isl_int_set_si(bmap->ineq[j][pos], 1);
-       isl_int_set_si(bmap->ineq[j][0], -value);
+       if (upper) {
+               isl_int_set_si(bmap->ineq[j][pos], -1);
+               isl_int_set_si(bmap->ineq[j][0], value);
+       } else {
+               isl_int_set_si(bmap->ineq[j][pos], 1);
+               isl_int_set_si(bmap->ineq[j][0], -value);
+       }
        bmap = isl_basic_map_simplify(bmap);
        return isl_basic_map_finalize(bmap);
 error:
@@ -5000,6 +5005,13 @@ error:
        return NULL;
 }
 
+__isl_give isl_basic_map *isl_basic_map_lower_bound_si(
+       __isl_take isl_basic_map *bmap,
+       enum isl_dim_type type, unsigned pos, int value)
+{
+       return basic_map_bound_si(bmap, type, pos, value, 0);
+}
+
 struct isl_basic_set *isl_basic_set_lower_bound_dim(struct isl_basic_set *bset,
        unsigned dim, isl_int value)
 {
@@ -5020,8 +5032,8 @@ error:
        return NULL;
 }
 
-__isl_give isl_map *isl_map_lower_bound_si(__isl_take isl_map *map,
-               enum isl_dim_type type, unsigned pos, int value)
+static __isl_give isl_map *map_bound_si(__isl_take isl_map *map,
+       enum isl_dim_type type, unsigned pos, int value, int upper)
 {
        int i;
 
@@ -5031,8 +5043,8 @@ __isl_give isl_map *isl_map_lower_bound_si(__isl_take isl_map *map,
 
        isl_assert(map->ctx, pos < isl_map_dim(map, type), goto error);
        for (i = 0; i < map->n; ++i) {
-               map->p[i] = isl_basic_map_lower_bound_si(map->p[i],
-                                                        type, pos, value);
+               map->p[i] = basic_map_bound_si(map->p[i],
+                                                type, pos, value, upper);
                if (!map->p[i])
                        goto error;
        }
@@ -5043,6 +5055,18 @@ error:
        return NULL;
 }
 
+__isl_give isl_map *isl_map_lower_bound_si(__isl_take isl_map *map,
+       enum isl_dim_type type, unsigned pos, int value)
+{
+       return map_bound_si(map, type, pos, value, 0);
+}
+
+__isl_give isl_map *isl_map_upper_bound_si(__isl_take isl_map *map,
+       enum isl_dim_type type, unsigned pos, int value)
+{
+       return map_bound_si(map, type, pos, value, 1);
+}
+
 __isl_give isl_set *isl_set_lower_bound_si(__isl_take isl_set *set,
                enum isl_dim_type type, unsigned pos, int value)
 {
@@ -5050,6 +5074,12 @@ __isl_give isl_set *isl_set_lower_bound_si(__isl_take isl_set *set,
                isl_map_lower_bound_si((struct isl_map *)set, type, pos, value);
 }
 
+__isl_give isl_set *isl_set_upper_bound_si(__isl_take isl_set *set,
+       enum isl_dim_type type, unsigned pos, int value)
+{
+       return isl_map_upper_bound_si(set, type, pos, value);
+}
+
 struct isl_set *isl_set_lower_bound_dim(struct isl_set *set, unsigned dim,
                                        isl_int value)
 {