add isl_set_lower_bound_val and isl_set_upper_bound_val
authorSven Verdoolaege <skimo@kotnet.org>
Sat, 23 Feb 2013 12:41:49 +0000 (13:41 +0100)
committerSven Verdoolaege <skimo@kotnet.org>
Tue, 28 May 2013 18:42:47 +0000 (20:42 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/set.h
isl_map.c

index b696ac0..ab1081e 100644 (file)
@@ -2329,6 +2329,10 @@ dimension has the fixed given 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_lower_bound_val(
+               __isl_take isl_set *set,
+               enum isl_dim_type type, unsigned pos,
+               __isl_take isl_val *value);
        __isl_give isl_map *isl_map_lower_bound_si(
                __isl_take isl_map *map,
                enum isl_dim_type type, unsigned pos, int value);
@@ -2339,12 +2343,16 @@ dimension has the fixed given 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_upper_bound_val(
+               __isl_take isl_set *set,
+               enum isl_dim_type type, unsigned pos,
+               __isl_take isl_val *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 by the fixed given value.
+dimension has a value bounded by the fixed given integer value.
 
        __isl_give isl_set *isl_set_equate(__isl_take isl_set *set,
                enum isl_dim_type type1, int pos1,
index d9af196..31d4e35 100644 (file)
@@ -171,10 +171,14 @@ __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_lower_bound(__isl_take isl_set *set,
        enum isl_dim_type type, unsigned pos, isl_int value);
+__isl_give isl_set *isl_set_lower_bound_val(__isl_take isl_set *set,
+       enum isl_dim_type type, unsigned pos, __isl_take isl_val *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_upper_bound(__isl_take isl_set *set,
        enum isl_dim_type type, unsigned pos, isl_int value);
+__isl_give isl_set *isl_set_upper_bound_val(__isl_take isl_set *set,
+       enum isl_dim_type type, unsigned pos, __isl_take isl_val *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 f71cda1..f5e95d1 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -5755,6 +5755,46 @@ __isl_give isl_set *isl_set_upper_bound(__isl_take isl_set *set,
        return isl_map_upper_bound(set, type, pos, value);
 }
 
+/* Force the values of the variable at position "pos" of type "type" of "set"
+ * to be no smaller than "value".
+ */
+__isl_give isl_set *isl_set_lower_bound_val(__isl_take isl_set *set,
+       enum isl_dim_type type, unsigned pos, __isl_take isl_val *value)
+{
+       if (!value)
+               goto error;
+       if (!isl_val_is_int(value))
+               isl_die(isl_set_get_ctx(set), isl_error_invalid,
+                       "expecting integer value", goto error);
+       set = isl_set_lower_bound(set, type, pos, value->n);
+       isl_val_free(value);
+       return set;
+error:
+       isl_val_free(value);
+       isl_set_free(set);
+       return NULL;
+}
+
+/* Force the values of the variable at position "pos" of type "type" of "set"
+ * to be no greater than "value".
+ */
+__isl_give isl_set *isl_set_upper_bound_val(__isl_take isl_set *set,
+       enum isl_dim_type type, unsigned pos, __isl_take isl_val *value)
+{
+       if (!value)
+               goto error;
+       if (!isl_val_is_int(value))
+               isl_die(isl_set_get_ctx(set), isl_error_invalid,
+                       "expecting integer value", goto error);
+       set = isl_set_upper_bound(set, type, pos, value->n);
+       isl_val_free(value);
+       return set;
+error:
+       isl_val_free(value);
+       isl_set_free(set);
+       return NULL;
+}
+
 struct isl_set *isl_set_lower_bound_dim(struct isl_set *set, unsigned dim,
                                        isl_int value)
 {