add isl_equality_from_aff
authorSven Verdoolaege <skimo@kotnet.org>
Thu, 12 May 2011 13:55:15 +0000 (15:55 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Mon, 16 May 2011 16:16:29 +0000 (18:16 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/constraint.h
isl_constraint.c

index bec4f9d..7528d14 100644 (file)
@@ -2049,6 +2049,12 @@ 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
+
+       __isl_give isl_constraint *isl_equality_from_aff(
+               __isl_take isl_aff *aff);
+
 The expression can be inspected using
 
        #include <isl/aff.h>
index 7d20bab..39c5c3b 100644 (file)
@@ -113,6 +113,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_printer *isl_printer_print_constraint(__isl_take isl_printer *p,
        __isl_keep isl_constraint *c);
index ecc1a0d..5d55c81 100644 (file)
@@ -1004,3 +1004,30 @@ __isl_give isl_aff *isl_constraint_get_bound(
 
        return aff;
 }
+
+/* Construct an equality constraint equating the given affine expression
+ * to zero.
+ */
+__isl_give isl_constraint *isl_equality_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, 1, 0);
+       k = isl_basic_set_alloc_equality(bset);
+       if (k < 0)
+               goto error;
+
+       isl_seq_cpy(bset->eq[k], aff->v->el + 1, aff->v->size - 1);
+       isl_aff_free(aff);
+
+       return isl_basic_set_constraint(bset, &bset->eq[k]);
+error:
+       isl_aff_free(aff);
+       isl_basic_set_free(bset);
+       return NULL;
+}