add isl_inequality_from_aff
authorSven Verdoolaege <skimo@kotnet.org>
Thu, 2 Jun 2011 12:04:44 +0000 (14:04 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Thu, 2 Jun 2011 13:40:59 +0000 (15:40 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/constraint.h
isl_constraint.c

index e3277a3..1ff5198 100644 (file)
@@ -2062,11 +2062,14 @@ a non-zero coefficient for the specified dimension.
                __isl_keep isl_constraint *constraint,
                enum isl_dim_type type, int pos);
 
-Conversely, an equality constraint can be constructed, equating
-the affine expression to zero, using
+Conversely, an equality constraint equating
+the affine expression to zero or an inequality constraint enforcing
+the affine expression to be non-negative, can be constructed using
 
        __isl_give isl_constraint *isl_equality_from_aff(
                __isl_take isl_aff *aff);
+       __isl_give isl_constraint *isl_inequality_from_aff(
+               __isl_take isl_aff *aff);
 
 The expression can be inspected using
 
index 5b591da..f1ba6a8 100644 (file)
@@ -118,6 +118,7 @@ struct isl_basic_set *isl_basic_set_from_constraint(
 __isl_give isl_aff *isl_constraint_get_bound(
        __isl_keep isl_constraint *constraint, enum isl_dim_type type, int pos);
 __isl_give isl_constraint *isl_equality_from_aff(__isl_take isl_aff *aff);
+__isl_give isl_constraint *isl_inequality_from_aff(__isl_take isl_aff *aff);
 
 __isl_give isl_printer *isl_printer_print_constraint(__isl_take isl_printer *p,
        __isl_keep isl_constraint *c);
index 6b3ed93..f65297d 100644 (file)
@@ -1048,3 +1048,30 @@ error:
        isl_basic_set_free(bset);
        return NULL;
 }
+
+/* Construct an inequality constraint enforcing the given affine expression
+ * to be non-negative.
+ */
+__isl_give isl_constraint *isl_inequality_from_aff(__isl_take isl_aff *aff)
+{
+       int k;
+       isl_basic_set *bset;
+
+       if (!aff)
+               return NULL;
+
+       bset = isl_basic_set_from_local_space(isl_aff_get_local_space(aff));
+       bset = isl_basic_set_extend_constraints(bset, 0, 1);
+       k = isl_basic_set_alloc_inequality(bset);
+       if (k < 0)
+               goto error;
+
+       isl_seq_cpy(bset->ineq[k], aff->v->el + 1, aff->v->size - 1);
+       isl_aff_free(aff);
+
+       return isl_basic_set_constraint(bset, &bset->ineq[k]);
+error:
+       isl_aff_free(aff);
+       isl_basic_set_free(bset);
+       return NULL;
+}