isl_qpolynomial_morph: properly handle denominators in morph
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 20 Sep 2011 13:59:19 +0000 (15:59 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Thu, 22 Sep 2011 11:14:45 +0000 (13:14 +0200)
Before, the denominator would get ignored during the morphing of the divs.

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

index 7e486a6..75908af 100644 (file)
@@ -3741,7 +3741,7 @@ __isl_give isl_qpolynomial *isl_qpolynomial_morph(__isl_take isl_qpolynomial *qp
        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)
@@ -3771,8 +3771,10 @@ __isl_give isl_qpolynomial *isl_qpolynomial_morph(__isl_take isl_qpolynomial *qp
                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_dim_free(qp->dim);
        qp->dim = isl_dim_copy(morph->ran->dim);