From da67b6367996cf58f94fa40c8bd0014a3a9590b1 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Fri, 6 May 2011 15:41:31 +0200 Subject: [PATCH] add isl_qpolynomial_align_params Signed-off-by: Sven Verdoolaege --- doc/user.pod | 4 ++++ include/isl/polynomial.h | 3 +++ isl_polynomial.c | 27 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index 0b2f37d9..5912e161 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -2314,6 +2314,10 @@ are returned in C<*n> and C<*d>, respectively. __isl_take isl_union_pw_qpolynomial *upwpq, __isl_take isl_union_set *uset); + __isl_give isl_qpolynomial *isl_qpolynomial_align_params( + __isl_take isl_qpolynomial *qp, + __isl_take isl_dim *model); + __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_coalesce( __isl_take isl_union_pw_qpolynomial *upwqp); diff --git a/include/isl/polynomial.h b/include/isl/polynomial.h index 43f9dc8a..303f6984 100644 --- a/include/isl/polynomial.h +++ b/include/isl/polynomial.h @@ -94,6 +94,9 @@ int isl_qpolynomial_as_polynomial_on_domain(__isl_keep isl_qpolynomial *qp, __isl_give isl_qpolynomial *isl_qpolynomial_homogenize( __isl_take isl_qpolynomial *poly); +__isl_give isl_qpolynomial *isl_qpolynomial_align_params( + __isl_take isl_qpolynomial *qp, __isl_take isl_dim *model); + struct isl_term; typedef struct isl_term isl_term; diff --git a/isl_polynomial.c b/isl_polynomial.c index 5ad0952f..42d4e3f2 100644 --- a/isl_polynomial.c +++ b/isl_polynomial.c @@ -3878,6 +3878,33 @@ error: return NULL; } +__isl_give isl_qpolynomial *isl_qpolynomial_align_params( + __isl_take isl_qpolynomial *qp, __isl_take isl_dim *model) +{ + if (!qp || !model) + goto error; + + if (!isl_dim_match(qp->dim, isl_dim_param, model, isl_dim_param)) { + isl_reordering *exp; + + model = isl_dim_drop(model, isl_dim_in, + 0, isl_dim_size(model, isl_dim_in)); + model = isl_dim_drop(model, isl_dim_out, + 0, isl_dim_size(model, isl_dim_out)); + exp = isl_parameter_alignment_reordering(qp->dim, model); + exp = isl_reordering_extend_dim(exp, + isl_qpolynomial_get_dim(qp)); + qp = isl_qpolynomial_realign(qp, exp); + } + + isl_dim_free(model); + return qp; +error: + isl_dim_free(model); + isl_qpolynomial_free(qp); + return NULL; +} + struct isl_split_periods_data { int max_periods; isl_pw_qpolynomial *res; -- 2.11.4.GIT