From aa6c06612cec721cca434cbc63febcdc501a400a Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Thu, 12 May 2011 15:55:15 +0200 Subject: [PATCH] add isl_equality_from_aff Signed-off-by: Sven Verdoolaege --- doc/user.pod | 6 ++++++ include/isl/constraint.h | 1 + isl_constraint.c | 27 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index bec4f9df..7528d14b 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -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 diff --git a/include/isl/constraint.h b/include/isl/constraint.h index 7d20bab6..39c5c3b0 100644 --- a/include/isl/constraint.h +++ b/include/isl/constraint.h @@ -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); diff --git a/isl_constraint.c b/isl_constraint.c index ecc1a0d6..5d55c81b 100644 --- a/isl_constraint.c +++ b/isl_constraint.c @@ -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; +} -- 2.11.4.GIT