add isl_qpolynomial_gist_params
[platform/upstream/isl.git] / isl_polynomial.c
index 737eb15..83724ad 100644 (file)
@@ -2567,6 +2567,15 @@ error:
        return NULL;
 }
 
+__isl_give isl_qpolynomial *isl_qpolynomial_gist_params(
+       __isl_take isl_qpolynomial *qp, __isl_take isl_set *context)
+{
+       isl_space *space = isl_qpolynomial_get_domain_space(qp);
+       isl_set *dom_context = isl_set_universe(space);
+       dom_context = isl_set_intersect_params(dom_context, context);
+       return isl_qpolynomial_gist(qp, dom_context);
+}
+
 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_from_qpolynomial(
        __isl_take isl_qpolynomial *qp)
 {
@@ -2623,6 +2632,13 @@ int isl_pw_qpolynomial_is_one(__isl_keep isl_pw_qpolynomial *pwqp)
        return isl_qpolynomial_is_one(pwqp->p[0].qp);
 }
 
+__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add(
+       __isl_take isl_pw_qpolynomial *pwqp1,
+       __isl_take isl_pw_qpolynomial *pwqp2)
+{
+       return isl_pw_qpolynomial_union_add_(pwqp1, pwqp2);
+}
+
 __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_mul(
        __isl_take isl_pw_qpolynomial *pwqp1,
        __isl_take isl_pw_qpolynomial *pwqp2)
@@ -3866,7 +3882,7 @@ __isl_give isl_qpolynomial *isl_qpolynomial_morph_domain(
        int n_sub;
        isl_ctx *ctx;
        struct isl_upoly **subs;
-       isl_mat *mat;
+       isl_mat *mat, *diag;
 
        qp = isl_qpolynomial_cow(qp);
        if (!qp || !morph)
@@ -3896,8 +3912,10 @@ __isl_give isl_qpolynomial *isl_qpolynomial_morph_domain(
                isl_upoly_free(subs[i]);
        free(subs);
 
-       mat = isl_mat_diagonal(isl_mat_identity(ctx, 1), isl_mat_copy(morph->inv));
-       mat = isl_mat_diagonal(mat, isl_mat_identity(ctx, qp->div->n_row));
+       diag = isl_mat_diag(ctx, 1, morph->inv->row[0][0]);
+       mat = isl_mat_diagonal(diag, isl_mat_copy(morph->inv));
+       diag = isl_mat_diag(ctx, qp->div->n_row, morph->inv->row[0][0]);
+       mat = isl_mat_diagonal(mat, diag);
        qp->div = isl_mat_product(qp->div, mat);
        isl_space_free(qp->dim);
        qp->dim = isl_space_copy(morph->ran->dim);