decouple isl_qpolynomial_substitute_equalities
authorSven Verdoolaege <skimo@kotnet.org>
Thu, 14 Jul 2011 15:53:28 +0000 (17:53 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Wed, 20 Jul 2011 09:12:06 +0000 (11:12 +0200)
isl_qpolynomial_substitute_equalities was being called from within
two contexts, one where the space of the equalities includes the
divs and one where it does not.
Split isl_qpolynomial_substitute_equalities into two functions,
one for each of these two cases.

Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
isl_polynomial.c

index 524aa6f..abd752b 100644 (file)
@@ -2380,7 +2380,7 @@ error:
        return NULL;
 }
 
-__isl_give isl_qpolynomial *isl_qpolynomial_substitute_equalities(
+static __isl_give isl_qpolynomial *isl_qpolynomial_substitute_equalities_lifted(
        __isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq)
 {
        int i, j, k;
@@ -2446,6 +2446,22 @@ error:
        return NULL;
 }
 
+/* Exploit the equalities in "eq" to simplify the quasi-polynomial.
+ */
+__isl_give isl_qpolynomial *isl_qpolynomial_substitute_equalities(
+       __isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq)
+{
+       if (!qp || !eq)
+               goto error;
+       if (qp->div->n_row > 0)
+               eq = isl_basic_set_add(eq, isl_dim_set, qp->div->n_row);
+       return isl_qpolynomial_substitute_equalities_lifted(qp, eq);
+error:
+       isl_basic_set_free(eq);
+       isl_qpolynomial_free(qp);
+       return NULL;
+}
+
 static __isl_give isl_basic_set *add_div_constraints(
        __isl_take isl_basic_set *bset, __isl_take isl_mat *div)
 {
@@ -2495,7 +2511,7 @@ __isl_give isl_qpolynomial *isl_qpolynomial_gist(
        }
 
        aff = isl_set_affine_hull(context);
-       return isl_qpolynomial_substitute_equalities(qp, aff);
+       return isl_qpolynomial_substitute_equalities_lifted(qp, aff);
 error:
        isl_qpolynomial_free(qp);
        isl_set_free(context);