summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Verdoolaege <skimo@kotnet.org>2013-06-14 11:58:06 +0200
committerSven Verdoolaege <skimo@kotnet.org>2013-06-14 11:58:06 +0200
commitd3fe8d9228d72bbfaa1897c74a6fa1bfd87b7e60 (patch)
tree33e630857e85c268dd233bee7dc0bcf5e85f2146
parent32aabe2c05cbaa2df5907aee48d1874936266a29 (diff)
downloadisl-d3fe8d9228d72bbfaa1897c74a6fa1bfd87b7e60.tar.gz
isl-d3fe8d9228d72bbfaa1897c74a6fa1bfd87b7e60.tar.bz2
isl-d3fe8d9228d72bbfaa1897c74a6fa1bfd87b7e60.zip
isl_{in,}equality_from_aff: skip construction of isl_basic_set
Back when isl_equality_from_aff was introduced in aa6c066 (add isl_equality_from_aff, Thu May 12 15:55:15 2011 +0200), an isl_constraint was still implemented on top of an isl_basic_map and we had to construct this isl_basic_set. Now that isl_constraint is implemented on top of an isl_local_space and an isl_vec, the construction of this isl_basic_set is pure overhead. Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
-rw-r--r--isl_constraint.c58
1 files changed, 18 insertions, 40 deletions
diff --git a/isl_constraint.c b/isl_constraint.c
index 7a06fa76..1b12a196 100644
--- a/isl_constraint.c
+++ b/isl_constraint.c
@@ -1251,33 +1251,32 @@ __isl_give isl_aff *isl_constraint_get_aff(
return aff;
}
-/* Construct an equality constraint equating the given affine expression
- * to zero.
+/* Construct an inequality (eq = 0) or equality (eq = 1) constraint from "aff".
+ * In particular, construct aff >= 0 or aff = 0.
+ *
+ * The denominator of "aff" can be ignored.
*/
-__isl_give isl_constraint *isl_equality_from_aff(__isl_take isl_aff *aff)
+static __isl_give isl_constraint *isl_constraint_alloc_aff(int eq,
+ __isl_take isl_aff *aff)
{
- int k;
isl_local_space *ls;
- isl_basic_set *bset;
+ isl_vec *v;
if (!aff)
return NULL;
-
ls = isl_aff_get_domain_local_space(aff);
- bset = isl_basic_set_from_local_space(ls);
- 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);
+ v = isl_vec_drop_els(isl_vec_copy(aff->v), 0, 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;
+ return isl_constraint_alloc_vec(eq, ls, v);
+}
+
+/* Construct an equality constraint equating the given affine expression
+ * to zero.
+ */
+__isl_give isl_constraint *isl_equality_from_aff(__isl_take isl_aff *aff)
+{
+ return isl_constraint_alloc_aff(1, aff);
}
/* Construct an inequality constraint enforcing the given affine expression
@@ -1285,26 +1284,5 @@ error:
*/
__isl_give isl_constraint *isl_inequality_from_aff(__isl_take isl_aff *aff)
{
- int k;
- isl_local_space *ls;
- isl_basic_set *bset;
-
- if (!aff)
- return NULL;
-
- ls = isl_aff_get_domain_local_space(aff);
- bset = isl_basic_set_from_local_space(ls);
- 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;
+ return isl_constraint_alloc_aff(0, aff);
}