isl_arg_parse: always print help option
[platform/upstream/isl.git] / isl_output.c
index 20d7dc6..05f36eb 100644 (file)
 
 #include <stdlib.h>
 #include <string.h>
-#include <isl_set.h>
-#include <isl_seq.h>
+#include <isl/set.h>
+#include <isl/seq.h>
 #include <isl_polynomial_private.h>
 #include <isl_printer_private.h>
 #include <isl_dim_private.h>
 #include <isl_map_private.h>
-#include <isl_union_map.h>
+#include <isl_mat_private.h>
+#include <isl/union_map.h>
 
 static const char *s_to[2] = { " -> ", " \\to " };
 static const char *s_and[2] = { " and ", " \\wedge " };
@@ -92,25 +93,39 @@ static __isl_give isl_printer *bset_print_constraints_polylib(
 }
 
 static __isl_give isl_printer *isl_basic_map_print_polylib(
-       __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p)
+       __isl_keep isl_basic_map *bmap, __isl_take isl_printer *p, int ext)
 {
        unsigned total = isl_basic_map_total_dim(bmap);
        p = isl_printer_start_line(p);
        p = isl_printer_print_int(p, bmap->n_eq + bmap->n_ineq);
        p = isl_printer_print_str(p, " ");
        p = isl_printer_print_int(p, 1 + total + 1);
+       if (ext) {
+               p = isl_printer_print_str(p, " ");
+               p = isl_printer_print_int(p,
+                                   isl_basic_map_dim(bmap, isl_dim_out));
+               p = isl_printer_print_str(p, " ");
+               p = isl_printer_print_int(p,
+                                   isl_basic_map_dim(bmap, isl_dim_in));
+               p = isl_printer_print_str(p, " ");
+               p = isl_printer_print_int(p,
+                                   isl_basic_map_dim(bmap, isl_dim_div));
+               p = isl_printer_print_str(p, " ");
+               p = isl_printer_print_int(p,
+                                   isl_basic_map_dim(bmap, isl_dim_param));
+       }
        p = isl_printer_end_line(p);
        return print_constraints_polylib(bmap, p);
 }
 
 static __isl_give isl_printer *isl_basic_set_print_polylib(
-       __isl_keep isl_basic_set *bset, __isl_take isl_printer *p)
+       __isl_keep isl_basic_set *bset, __isl_take isl_printer *p, int ext)
 {
-       return isl_basic_map_print_polylib((struct isl_basic_map *)bset, p);
+       return isl_basic_map_print_polylib((struct isl_basic_map *)bset, p, ext);
 }
 
 static __isl_give isl_printer *isl_map_print_polylib(__isl_keep isl_map *map,
-       __isl_take isl_printer *p)
+       __isl_take isl_printer *p, int ext)
 {
        int i;
 
@@ -120,15 +135,15 @@ static __isl_give isl_printer *isl_map_print_polylib(__isl_keep isl_map *map,
        for (i = 0; i < map->n; ++i) {
                p = isl_printer_start_line(p);
                p = isl_printer_end_line(p);
-               p = isl_basic_map_print_polylib(map->p[i], p);
+               p = isl_basic_map_print_polylib(map->p[i], p, ext);
        }
        return p;
 }
 
 static __isl_give isl_printer *isl_set_print_polylib(__isl_keep isl_set *set,
-       __isl_take isl_printer *p)
+       __isl_take isl_printer *p, int ext)
 {
-       return isl_map_print_polylib((struct isl_map *)set, p);
+       return isl_map_print_polylib((struct isl_map *)set, p, ext);
 }
 
 static int count_same_name(__isl_keep isl_dim *dim,
@@ -204,26 +219,41 @@ static enum isl_dim_type pos2type(__isl_keep isl_dim *dim, unsigned *pos)
        return type;
 }
 
+static __isl_give isl_printer *print_div(__isl_keep isl_dim *dim,
+       __isl_keep isl_mat *div, int pos, __isl_take isl_printer *p);
+
 static __isl_give isl_printer *print_term(__isl_keep isl_dim *dim,
+       __isl_keep isl_mat *div,
        isl_int c, unsigned pos, __isl_take isl_printer *p, int set, int latex)
 {
        enum isl_dim_type type;
+       int print_div_def;
 
        if (pos == 0)
                return isl_printer_print_isl_int(p, c);
 
+       type = pos2type(dim, &pos);
+       print_div_def = type == isl_dim_div && div &&
+                       !isl_int_is_zero(div->row[pos][0]);
+
        if (isl_int_is_one(c))
                ;
        else if (isl_int_is_negone(c))
                p = isl_printer_print_str(p, "-");
-       else
+       else {
                p = isl_printer_print_isl_int(p, c);
-       type = pos2type(dim, &pos);
-       p = print_name(dim, p, type, pos, set, latex);
+               if (p->output_format == ISL_FORMAT_C || print_div_def)
+                       p = isl_printer_print_str(p, "*");
+       }
+       if (print_div_def)
+               p = print_div(dim, div, pos, p);
+       else
+               p = print_name(dim, p, type, pos, set, latex);
        return p;
 }
 
 static __isl_give isl_printer *print_affine_of_len(__isl_keep isl_dim *dim,
+       __isl_keep isl_mat *div,
        __isl_take isl_printer *p, isl_int *c, int len, int set)
 {
        int i;
@@ -242,7 +272,7 @@ static __isl_give isl_printer *print_affine_of_len(__isl_keep isl_dim *dim,
                                p = isl_printer_print_str(p, " + ");
                }
                first = 0;
-               p = print_term(dim, c[i], i, p, set, 0);
+               p = print_term(dim, div, c[i], i, p, set, 0);
                if (flip)
                        isl_int_neg(c[i], c[i]);
        }
@@ -255,7 +285,7 @@ static __isl_give isl_printer *print_affine(__isl_keep isl_basic_map *bmap,
        __isl_keep isl_dim *dim, __isl_take isl_printer *p, isl_int *c, int set)
 {
        unsigned len = 1 + isl_basic_map_total_dim(bmap);
-       return print_affine_of_len(dim, p, c, len, set);
+       return print_affine_of_len(dim, NULL, p, c, len, set);
 }
 
 static int defining_equality(__isl_keep isl_basic_map *eq,
@@ -300,7 +330,8 @@ static __isl_give isl_printer *print_nested_var_list(__isl_take isl_printer *p,
                if (j >= 0) {
                        int pos = 1 + isl_dim_offset(global_dim, global_type)
                                    + offset + i;
-                       p = print_affine_of_len(eq->dim, p, eq->eq[j], pos, set);
+                       p = print_affine_of_len(eq->dim, NULL,
+                                               p, eq->eq[j], pos, set);
                } else {
                        p = print_name(global_dim, p, global_type, offset + i,
                                        set, latex);
@@ -369,7 +400,7 @@ static __isl_give isl_printer *print_nested_map_dim(__isl_take isl_printer *p,
 {
        p = print_nested_tuple(p, global_dim, global_type,
                        local_dim, isl_dim_in, set, latex, eq, offset);
-       p = isl_printer_print_str(p, s_to[0]);
+       p = isl_printer_print_str(p, s_to[latex]);
        p = print_nested_tuple(p, global_dim, global_type,
                        local_dim, isl_dim_out, set, latex, eq, offset);
 
@@ -384,7 +415,7 @@ static __isl_give isl_printer *print_dim(__isl_keep isl_dim *dim,
                p = print_tuple(dim, p, isl_dim_set, 1, latex, eq);
        else {
                p = print_tuple(dim, p, isl_dim_in, 0, latex, eq);
-               p = isl_printer_print_str(p, s_to[0]);
+               p = isl_printer_print_str(p, s_to[latex]);
                p = print_tuple(dim, p, isl_dim_out, 0, latex, eq);
        }
 
@@ -415,7 +446,7 @@ static __isl_give isl_printer *print_constraint(struct isl_basic_map *bmap,
 
        isl_int_abs(c[last], c[last]);
 
-       p = print_term(dim, c[last], last, p, set, latex);
+       p = print_term(dim, NULL, c[last], last, p, set, latex);
 
        p = isl_printer_print_str(p, " ");
        p = isl_printer_print_str(p, op);
@@ -931,7 +962,9 @@ __isl_give isl_printer *isl_printer_print_basic_set(__isl_take isl_printer *p,
        if (p->output_format == ISL_FORMAT_ISL)
                return isl_basic_set_print_isl(bset, p, 0);
        else if (p->output_format == ISL_FORMAT_POLYLIB)
-               return isl_basic_set_print_polylib(bset, p);
+               return isl_basic_set_print_polylib(bset, p, 0);
+       else if (p->output_format == ISL_FORMAT_EXT_POLYLIB)
+               return isl_basic_set_print_polylib(bset, p, 1);
        else if (p->output_format == ISL_FORMAT_POLYLIB_CONSTRAINTS)
                return bset_print_constraints_polylib(bset, p);
        else if (p->output_format == ISL_FORMAT_OMEGA)
@@ -968,7 +1001,9 @@ __isl_give isl_printer *isl_printer_print_set(__isl_take isl_printer *p,
        if (p->output_format == ISL_FORMAT_ISL)
                return isl_map_print_isl((isl_map *)set, p, 1);
        else if (p->output_format == ISL_FORMAT_POLYLIB)
-               return isl_set_print_polylib(set, p);
+               return isl_set_print_polylib(set, p, 0);
+       else if (p->output_format == ISL_FORMAT_EXT_POLYLIB)
+               return isl_set_print_polylib(set, p, 1);
        else if (p->output_format == ISL_FORMAT_OMEGA)
                return isl_set_print_omega(set, p);
        else if (p->output_format == ISL_FORMAT_LATEX)
@@ -1004,7 +1039,9 @@ __isl_give isl_printer *isl_printer_print_map(__isl_take isl_printer *p,
        if (p->output_format == ISL_FORMAT_ISL)
                return isl_map_print_isl(map, p, 0);
        else if (p->output_format == ISL_FORMAT_POLYLIB)
-               return isl_map_print_polylib(map, p);
+               return isl_map_print_polylib(map, p, 0);
+       else if (p->output_format == ISL_FORMAT_EXT_POLYLIB)
+               return isl_map_print_polylib(map, p, 1);
        else if (p->output_format == ISL_FORMAT_OMEGA)
                return isl_map_print_omega(map, p);
        else if (p->output_format == ISL_FORMAT_LATEX)
@@ -1130,6 +1167,65 @@ void isl_map_print(__isl_keep isl_map *map, FILE *out, int indent,
        isl_printer_free(printer);
 }
 
+void isl_union_map_dump(__isl_keep isl_union_map *umap)
+{
+       isl_printer *printer;
+
+       if (!umap)
+               return;
+
+       printer = isl_printer_to_file(isl_union_map_get_ctx(umap), stderr);
+       printer = isl_printer_print_union_map(printer, umap);
+       printer = isl_printer_end_line(printer);
+
+       isl_printer_free(printer);
+}
+
+void isl_union_set_dump(__isl_keep isl_union_set *uset)
+{
+       isl_printer *printer;
+
+       if (!uset)
+               return;
+
+       printer = isl_printer_to_file(isl_union_set_get_ctx(uset), stderr);
+       printer = isl_printer_print_union_set(printer, uset);
+       printer = isl_printer_end_line(printer);
+
+       isl_printer_free(printer);
+}
+
+void isl_union_pw_qpolynomial_dump(__isl_keep isl_union_pw_qpolynomial *upwqp)
+{
+       isl_printer *printer;
+
+       if (!upwqp)
+               return;
+
+       printer = isl_printer_to_file(isl_union_pw_qpolynomial_get_ctx(upwqp),
+                                       stderr);
+       printer = isl_printer_print_union_pw_qpolynomial(printer, upwqp);
+       printer = isl_printer_end_line(printer);
+
+       isl_printer_free(printer);
+}
+
+void isl_union_pw_qpolynomial_fold_dump(
+       __isl_keep isl_union_pw_qpolynomial_fold *upwf)
+{
+       isl_printer *printer;
+
+       if (!upwf)
+               return;
+
+       printer = isl_printer_to_file(
+                       isl_union_pw_qpolynomial_fold_get_ctx(upwf), stderr);
+       printer = isl_printer_print_union_pw_qpolynomial_fold(printer, upwf);
+       printer = isl_printer_end_line(printer);
+
+       isl_printer_free(printer);
+}
+
 static int upoly_rec_n_non_zero(__isl_keep struct isl_upoly_rec *rec)
 {
        int i;
@@ -1147,7 +1243,8 @@ static __isl_give isl_printer *print_div(__isl_keep isl_dim *dim,
 {
        int c = p->output_format == ISL_FORMAT_C;
        p = isl_printer_print_str(p, c ? "floord(" : "[(");
-       p = print_affine_of_len(dim, p, div->row[pos] + 1, div->n_col - 1, 1);
+       p = print_affine_of_len(dim, div, p,
+                               div->row[pos] + 1, div->n_col - 1, 1);
        p = isl_printer_print_str(p, c ? ", " : ")/");
        p = isl_printer_print_isl_int(p, div->row[pos][0]);
        p = isl_printer_print_str(p, c ? ")" : "]");
@@ -1193,7 +1290,7 @@ static __isl_give isl_printer *print_base(__isl_take isl_printer *p,
 
        total = isl_dim_total(dim);
        if (var < total)
-               p = print_term(dim, dim->ctx->one, 1 + var, p, 1, 0);
+               p = print_term(dim, NULL, dim->ctx->one, 1 + var, p, 1, 0);
        else
                p = print_div(dim, div, var - total, p);
        return p;
@@ -1220,9 +1317,9 @@ static __isl_give isl_printer *print_pow(__isl_take isl_printer *p,
 
 static __isl_give isl_printer *upoly_print(__isl_keep struct isl_upoly *up,
        __isl_keep isl_dim *dim, __isl_keep isl_mat *div,
-       __isl_take isl_printer *p)
+       __isl_take isl_printer *p, int outer)
 {
-       int i, n, first;
+       int i, n, first, print_parens;
        struct isl_upoly_rec *rec;
 
        if (!p || !up || !dim || !div)
@@ -1235,7 +1332,8 @@ static __isl_give isl_printer *upoly_print(__isl_keep struct isl_upoly *up,
        if (!rec)
                goto error;
        n = upoly_rec_n_non_zero(rec);
-       if (n > 1)
+       print_parens = n > 1 || (outer && rec->up.var >= isl_dim_total(dim));
+       if (print_parens)
                p = isl_printer_print_str(p, "(");
        for (i = 0, first = 1; i < rec->n; ++i) {
                if (isl_upoly_is_zero(rec->p[i]))
@@ -1254,7 +1352,7 @@ static __isl_give isl_printer *upoly_print(__isl_keep struct isl_upoly *up,
                        if (!first)
                                p = isl_printer_print_str(p, " + ");
                        if (i == 0 || !isl_upoly_is_one(rec->p[i]))
-                               p = upoly_print(rec->p[i], dim, div, p);
+                               p = upoly_print(rec->p[i], dim, div, p, 0);
                }
                first = 0;
                if (i == 0)
@@ -1264,7 +1362,7 @@ static __isl_give isl_printer *upoly_print(__isl_keep struct isl_upoly *up,
                        p = isl_printer_print_str(p, " * ");
                p = print_pow(p, dim, div, rec->up.var, i);
        }
-       if (n > 1)
+       if (print_parens)
                p = isl_printer_print_str(p, ")");
        return p;
 error:
@@ -1277,7 +1375,7 @@ __isl_give isl_printer *isl_printer_print_qpolynomial(__isl_take isl_printer *p,
 {
        if (!p || !qp)
                goto error;
-       p = upoly_print(qp->upoly, qp->dim, qp->div, p);
+       p = upoly_print(qp->upoly, qp->dim, qp->div, p, 1);
        return p;
 error:
        isl_printer_free(p);
@@ -1353,8 +1451,8 @@ static __isl_give isl_printer *isl_pwqp_print_isl_body(
        for (i = 0; i < pwqp->n; ++i) {
                if (i)
                        p = isl_printer_print_str(p, "; ");
-               if (isl_dim_size(pwqp->p[i].set->dim, isl_dim_set) > 0 ||
-                   isl_dim_get_tuple_name(pwqp->p[i].set->dim, isl_dim_set)) {
+               if (isl_dim_size(pwqp->dim, isl_dim_set) > 0 ||
+                   isl_dim_is_named_or_nested(pwqp->dim, isl_dim_set)) {
                        p = print_dim(pwqp->p[i].set->dim, p, 1, 0, NULL);
                        p = isl_printer_print_str(p, " -> ");
                }
@@ -1377,7 +1475,8 @@ static __isl_give isl_printer *print_pw_qpolynomial_isl(
        }
        p = isl_printer_print_str(p, "{ ");
        if (pwqp->n == 0) {
-               if (isl_dim_size(pwqp->dim, isl_dim_set) > 0) {
+               if (isl_dim_size(pwqp->dim, isl_dim_set) > 0 ||
+                   isl_dim_is_named_or_nested(pwqp->dim, isl_dim_set)) {
                        p = print_dim(pwqp->dim, p, 1, 0, NULL);
                        p = isl_printer_print_str(p, " -> ");
                }
@@ -1414,7 +1513,8 @@ static __isl_give isl_printer *isl_pwf_print_isl_body(
        for (i = 0; i < pwf->n; ++i) {
                if (i)
                        p = isl_printer_print_str(p, "; ");
-               if (isl_dim_size(pwf->p[i].set->dim, isl_dim_set) > 0) {
+               if (isl_dim_size(pwf->dim, isl_dim_set) > 0 ||
+                   isl_dim_is_named_or_nested(pwf->dim, isl_dim_set)) {
                        p = print_dim(pwf->p[i].set->dim, p, 1, 0, NULL);
                        p = isl_printer_print_str(p, " -> ");
                }
@@ -1434,7 +1534,8 @@ static __isl_give isl_printer *print_pw_qpolynomial_fold_isl(
        }
        p = isl_printer_print_str(p, "{ ");
        if (pwf->n == 0) {
-               if (isl_dim_size(pwf->dim, isl_dim_set) > 0) {
+               if (isl_dim_size(pwf->dim, isl_dim_set) > 0 ||
+                   isl_dim_is_named_or_nested(pwf->dim, isl_dim_set)) {
                        p = print_dim(pwf->dim, p, 1, 0, NULL);
                        p = isl_printer_print_str(p, " -> ");
                }
@@ -1446,21 +1547,22 @@ static __isl_give isl_printer *print_pw_qpolynomial_fold_isl(
 }
 
 static __isl_give isl_printer *print_affine_c(__isl_take isl_printer *p,
-       __isl_keep isl_basic_set *bset, isl_int *c);
+       __isl_keep isl_dim *dim, __isl_keep isl_basic_set *bset, isl_int *c);
 
 static __isl_give isl_printer *print_name_c(__isl_take isl_printer *p,
+       __isl_keep isl_dim *dim,
        __isl_keep isl_basic_set *bset, enum isl_dim_type type, unsigned pos)
 {
        if (type == isl_dim_div) {
                p = isl_printer_print_str(p, "floord(");
-               p = print_affine_c(p, bset, bset->div[pos] + 1);
+               p = print_affine_c(p, dim, bset, bset->div[pos] + 1);
                p = isl_printer_print_str(p, ", ");
                p = isl_printer_print_isl_int(p, bset->div[pos][0]);
                p = isl_printer_print_str(p, ")");
        } else {
                const char *name;
 
-               name = isl_dim_get_name(bset->dim, type, pos);
+               name = isl_dim_get_name(dim, type, pos);
                if (!name)
                        name = "UNNAMED";
                p = isl_printer_print_str(p, name);
@@ -1469,6 +1571,7 @@ static __isl_give isl_printer *print_name_c(__isl_take isl_printer *p,
 }
 
 static __isl_give isl_printer *print_term_c(__isl_take isl_printer *p,
+       __isl_keep isl_dim *dim,
        __isl_keep isl_basic_set *bset, isl_int c, unsigned pos)
 {
        enum isl_dim_type type;
@@ -1485,17 +1588,17 @@ static __isl_give isl_printer *print_term_c(__isl_take isl_printer *p,
                p = isl_printer_print_isl_int(p, c);
                p = isl_printer_print_str(p, "*");
        }
-       type = pos2type(bset->dim, &pos);
-       p = print_name_c(p, bset, type, pos);
+       type = pos2type(dim, &pos);
+       p = print_name_c(p, dim, bset, type, pos);
        return p;
 }
 
-static __isl_give isl_printer *print_affine_c(__isl_take isl_printer *p,
-       __isl_keep isl_basic_set *bset, isl_int *c)
+static __isl_give isl_printer *print_partial_affine_c(__isl_take isl_printer *p,
+       __isl_keep isl_dim *dim,
+       __isl_keep isl_basic_set *bset, isl_int *c, unsigned len)
 {
        int i;
        int first;
-       unsigned len = 1 + isl_basic_set_total_dim(bset);
 
        for (i = 0, first = 1; i < len; ++i) {
                int flip = 0;
@@ -1510,7 +1613,7 @@ static __isl_give isl_printer *print_affine_c(__isl_take isl_printer *p,
                                p = isl_printer_print_str(p, " + ");
                }
                first = 0;
-               p = print_term_c(p, bset, c[i], i);
+               p = print_term_c(p, dim, bset, c[i], i);
                if (flip)
                        isl_int_neg(c[i], c[i]);
        }
@@ -1519,13 +1622,21 @@ static __isl_give isl_printer *print_affine_c(__isl_take isl_printer *p,
        return p;
 }
 
+static __isl_give isl_printer *print_affine_c(__isl_take isl_printer *p,
+       __isl_keep isl_dim *dim, __isl_keep isl_basic_set *bset, isl_int *c)
+{
+       unsigned len = 1 + isl_basic_set_total_dim(bset);
+       return print_partial_affine_c(p, dim, bset, c, len);
+}
+
 static __isl_give isl_printer *print_constraint_c(__isl_take isl_printer *p,
+       __isl_keep isl_dim *dim,
        __isl_keep isl_basic_set *bset, isl_int *c, const char *op, int first)
 {
        if (!first)
                p = isl_printer_print_str(p, " && ");
 
-       p = print_affine_c(p, bset, c);
+       p = print_affine_c(p, dim, bset, c);
        p = isl_printer_print_str(p, " ");
        p = isl_printer_print_str(p, op);
        p = isl_printer_print_str(p, " 0");
@@ -1533,20 +1644,37 @@ static __isl_give isl_printer *print_constraint_c(__isl_take isl_printer *p,
 }
 
 static __isl_give isl_printer *print_basic_set_c(__isl_take isl_printer *p,
-       __isl_keep isl_basic_set *bset)
+       __isl_keep isl_dim *dim, __isl_keep isl_basic_set *bset)
 {
-       int i;
-
-       for (i = 0; i < bset->n_eq; ++i)
-               p = print_constraint_c(p, bset, bset->eq[i], "==", !i);
+       int i, j;
+       unsigned n_div = isl_basic_set_dim(bset, isl_dim_div);
+       unsigned total = isl_basic_set_total_dim(bset) - n_div;
+
+       for (i = 0; i < bset->n_eq; ++i) {
+               j = isl_seq_last_non_zero(bset->eq[i] + 1 + total, n_div);
+               if (j < 0)
+                       p = print_constraint_c(p, dim, bset,
+                                               bset->eq[i], "==", !i);
+               else {
+                       if (i)
+                               p = isl_printer_print_str(p, " && ");
+                       p = isl_printer_print_str(p, "(");
+                       p = print_partial_affine_c(p, dim, bset, bset->eq[i],
+                                                  1 + total + j);
+                       p = isl_printer_print_str(p, ") % ");
+                       p = isl_printer_print_isl_int(p,
+                                               bset->eq[i][1 + total + j]);
+                       p = isl_printer_print_str(p, " == 0");
+               }
+       }
        for (i = 0; i < bset->n_ineq; ++i)
-               p = print_constraint_c(p, bset, bset->ineq[i], ">=",
+               p = print_constraint_c(p, dim, bset, bset->ineq[i], ">=",
                                        !bset->n_eq && !i);
        return p;
 }
 
 static __isl_give isl_printer *print_set_c(__isl_take isl_printer *p,
-       __isl_keep isl_set *set)
+       __isl_keep isl_dim *dim, __isl_keep isl_set *set)
 {
        int i;
 
@@ -1558,7 +1686,7 @@ static __isl_give isl_printer *print_set_c(__isl_take isl_printer *p,
                        p = isl_printer_print_str(p, " || ");
                if (set->n > 1)
                        p = isl_printer_print_str(p, "(");
-               p = print_basic_set_c(p, set->p[i]);
+               p = print_basic_set_c(p, dim, set->p[i]);
                if (set->n > 1)
                        p = isl_printer_print_str(p, ")");
        }
@@ -1566,7 +1694,7 @@ static __isl_give isl_printer *print_set_c(__isl_take isl_printer *p,
 }
 
 static __isl_give isl_printer *print_qpolynomial_c(__isl_take isl_printer *p,
-       __isl_keep isl_qpolynomial *qp)
+       __isl_keep isl_dim *dim, __isl_keep isl_qpolynomial *qp)
 {
        isl_int den;
 
@@ -1581,7 +1709,7 @@ static __isl_give isl_printer *print_qpolynomial_c(__isl_take isl_printer *p,
                qp = isl_qpolynomial_mul(qp, f);
        }
        if (qp)
-               p = upoly_print(qp->upoly, qp->dim, qp->div, p);
+               p = upoly_print(qp->upoly, dim, qp->div, p, 0);
        if (!isl_int_is_one(den)) {
                p = isl_printer_print_str(p, ")/");
                p = isl_printer_print_isl_int(p, den);
@@ -1592,18 +1720,18 @@ static __isl_give isl_printer *print_qpolynomial_c(__isl_take isl_printer *p,
 }
 
 static __isl_give isl_printer *print_pw_qpolynomial_c(
-       __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwpq)
+       __isl_take isl_printer *p, __isl_keep isl_pw_qpolynomial *pwqp)
 {
        int i;
 
-       if (pwpq->n == 1 && isl_set_fast_is_universe(pwpq->p[0].set))
-               return print_qpolynomial_c(p, pwpq->p[0].qp);
+       if (pwqp->n == 1 && isl_set_fast_is_universe(pwqp->p[0].set))
+               return print_qpolynomial_c(p, pwqp->dim, pwqp->p[0].qp);
 
-       for (i = 0; i < pwpq->n; ++i) {
+       for (i = 0; i < pwqp->n; ++i) {
                p = isl_printer_print_str(p, "(");
-               p = print_set_c(p, pwpq->p[i].set);
+               p = print_set_c(p, pwqp->dim, pwqp->p[i].set);
                p = isl_printer_print_str(p, ") ? (");
-               p = print_qpolynomial_c(p, pwpq->p[i].qp);
+               p = print_qpolynomial_c(p, pwqp->dim, pwqp->p[i].qp);
                p = isl_printer_print_str(p, ") : ");
        }
 
@@ -1678,7 +1806,8 @@ error:
 }
 
 static __isl_give isl_printer *print_qpolynomial_fold_c(
-       __isl_take isl_printer *p, __isl_keep isl_qpolynomial_fold *fold)
+       __isl_take isl_printer *p, __isl_keep isl_dim *dim,
+       __isl_keep isl_qpolynomial_fold *fold)
 {
        int i;
 
@@ -1691,7 +1820,7 @@ static __isl_give isl_printer *print_qpolynomial_fold_c(
        for (i = 0; i < fold->n; ++i) {
                if (i)
                        p = isl_printer_print_str(p, ", ");
-               p = print_qpolynomial_c(p, fold->qp[i]);
+               p = print_qpolynomial_c(p, dim, fold->qp[i]);
                if (i)
                        p = isl_printer_print_str(p, ")");
        }
@@ -1704,13 +1833,13 @@ static __isl_give isl_printer *print_pw_qpolynomial_fold_c(
        int i;
 
        if (pwf->n == 1 && isl_set_fast_is_universe(pwf->p[0].set))
-               return print_qpolynomial_fold_c(p, pwf->p[0].fold);
+               return print_qpolynomial_fold_c(p, pwf->dim, pwf->p[0].fold);
 
        for (i = 0; i < pwf->n; ++i) {
                p = isl_printer_print_str(p, "(");
-               p = print_set_c(p, pwf->p[i].set);
+               p = print_set_c(p, pwf->dim, pwf->p[i].set);
                p = isl_printer_print_str(p, ") ? (");
-               p = print_qpolynomial_fold_c(p, pwf->p[i].fold);
+               p = print_qpolynomial_fold_c(p, pwf->dim, pwf->p[i].fold);
                p = isl_printer_print_str(p, ") : ");
        }