fix isl_pw_qpolynomial_reset_dim
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 3 Aug 2010 15:36:28 +0000 (17:36 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Wed, 4 Aug 2010 20:49:30 +0000 (22:49 +0200)
The original implementation would only reset the dims of
the domains and not of the quasi-polynomials.

Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
include/isl_polynomial.h
isl_fold.c
isl_polynomial.c
isl_pw_templ.c

index 1cfc801..4515183 100644 (file)
@@ -19,6 +19,8 @@ typedef struct isl_qpolynomial isl_qpolynomial;
 
 isl_ctx *isl_qpolynomial_get_ctx(__isl_keep isl_qpolynomial *qp);
 __isl_give isl_dim *isl_qpolynomial_get_dim(__isl_keep isl_qpolynomial *qp);
+__isl_give isl_qpolynomial *isl_qpolynomial_reset_dim(
+       __isl_take isl_qpolynomial *qp, __isl_take isl_dim *dim);
 unsigned isl_qpolynomial_dim(__isl_keep isl_qpolynomial *qp,
        enum isl_dim_type type);
 int isl_qpolynomial_involves_dims(__isl_keep isl_qpolynomial *qp,
@@ -214,6 +216,9 @@ __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_copy(
        __isl_keep isl_qpolynomial_fold *fold);
 void isl_qpolynomial_fold_free(__isl_take isl_qpolynomial_fold *fold);
 
+__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_dim(
+       __isl_take isl_qpolynomial_fold *fold, __isl_take isl_dim *dim);
+
 int isl_qpolynomial_fold_is_empty(__isl_keep isl_qpolynomial_fold *fold);
 int isl_qpolynomial_fold_is_equal(__isl_keep isl_qpolynomial_fold *fold1,
        __isl_keep isl_qpolynomial_fold *fold2);
index e7c9dfb..8f9ce11 100644 (file)
@@ -43,6 +43,22 @@ error:
        return NULL;
 }
 
+__isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_reset_dim(
+       __isl_take isl_qpolynomial_fold *fold, __isl_take isl_dim *dim)
+{
+       if (!fold || !dim)
+               goto error;
+
+       isl_dim_free(fold->dim);
+       fold->dim = dim;
+
+       return fold;
+error:
+       isl_qpolynomial_fold_free(fold);
+       isl_dim_free(dim);
+       return NULL;
+}
+
 int isl_qpolynomial_fold_involves_dims(__isl_keep isl_qpolynomial_fold *fold,
        enum isl_dim_type type, unsigned first, unsigned n)
 {
index 69126d2..1bfff5c 100644 (file)
@@ -319,6 +319,22 @@ __isl_give struct isl_upoly_rec *isl_upoly_alloc_rec(struct isl_ctx *ctx,
        return rec;
 }
 
+__isl_give isl_qpolynomial *isl_qpolynomial_reset_dim(
+       __isl_take isl_qpolynomial *qp, __isl_take isl_dim *dim)
+{
+       if (!qp || !dim)
+               goto error;
+
+       isl_dim_free(qp->dim);
+       qp->dim = dim;
+
+       return qp;
+error:
+       isl_qpolynomial_free(qp);
+       isl_dim_free(dim);
+       return NULL;
+}
+
 isl_ctx *isl_qpolynomial_get_ctx(__isl_keep isl_qpolynomial *qp)
 {
        return qp ? qp->dim->ctx : NULL;
index ec18ea9..7aa329b 100644 (file)
@@ -568,6 +568,10 @@ __isl_give PW *FN(PW,reset_dim)(__isl_take PW *pw, __isl_take isl_dim *dim)
                                                 isl_dim_copy(dim));
                if (!pw->p[i].set)
                        goto error;
+               pw->p[i].FIELD = FN(EL,reset_dim)(pw->p[i].FIELD,
+                                                 isl_dim_copy(dim));
+               if (!pw->p[i].FIELD)
+                       goto error;
        }
        isl_dim_free(pw->dim);
        pw->dim = dim;