add isl_qpolynomial_project_domain_on_params
authorSven Verdoolaege <skimo@kotnet.org>
Fri, 26 Aug 2011 20:21:31 +0000 (22:21 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sat, 3 Sep 2011 10:04:55 +0000 (12:04 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/polynomial.h
isl_polynomial.c

index 5ffbf66..9fd3b4b 100644 (file)
@@ -3124,6 +3124,9 @@ are returned in C<*n> and C<*d>, respectively.
                __isl_take isl_qpolynomial *qp,
                __isl_take isl_space *model);
 
+       __isl_give isl_qpolynomial *isl_qpolynomial_project_domain_on_params(
+               __isl_take isl_qpolynomial *qp);
+
        __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_coalesce(
                __isl_take isl_union_pw_qpolynomial *upwqp);
 
index c3a177a..05f034b 100644 (file)
@@ -78,6 +78,8 @@ __isl_give isl_qpolynomial *isl_qpolynomial_move_dims(
        __isl_take isl_qpolynomial *qp,
        enum isl_dim_type dst_type, unsigned dst_pos,
        enum isl_dim_type src_type, unsigned src_pos, unsigned n);
+__isl_give isl_qpolynomial *isl_qpolynomial_project_domain_on_params(
+       __isl_take isl_qpolynomial *qp);
 __isl_give isl_qpolynomial *isl_qpolynomial_drop_dims(
        __isl_take isl_qpolynomial *qp,
        enum isl_dim_type type, unsigned first, unsigned n);
index 1597a63..2ed05a0 100644 (file)
@@ -2407,6 +2407,31 @@ error:
        return NULL;
 }
 
+/* Project the domain of the quasi-polynomial onto its parameter space.
+ * The quasi-polynomial may not involve any of the domain dimensions.
+ */
+__isl_give isl_qpolynomial *isl_qpolynomial_project_domain_on_params(
+       __isl_take isl_qpolynomial *qp)
+{
+       isl_space *space;
+       unsigned n;
+       int involves;
+
+       n = isl_qpolynomial_dim(qp, isl_dim_set);
+       involves = isl_qpolynomial_involves_dims(qp, isl_dim_set, 0, n);
+       if (involves < 0)
+               return isl_qpolynomial_free(qp);
+       if (involves)
+               isl_die(isl_qpolynomial_get_ctx(qp), isl_error_invalid,
+                       "polynomial involves some of the domain dimensions",
+                       return isl_qpolynomial_free(qp));
+       qp = isl_qpolynomial_drop_dims(qp, isl_dim_set, 0, n);
+       space = isl_qpolynomial_get_space(qp);
+       space = isl_space_params(space);
+       qp = isl_qpolynomial_reset_space(qp, space);
+       return qp;
+}
+
 static __isl_give isl_qpolynomial *isl_qpolynomial_substitute_equalities_lifted(
        __isl_take isl_qpolynomial *qp, __isl_take isl_basic_set *eq)
 {