add isl_aff_neg_basic_set
[platform/upstream/isl.git] / isl_factorization.c
index 5ca1487..22384fe 100644 (file)
  * ZAC des vignes, 4 rue Jacques Monod, 91893 Orsay, France 
  */
 
+#include <isl_map_private.h>
 #include <isl_factorization.h>
-#include <isl_dim_private.h>
+#include <isl_space_private.h>
 #include <isl_mat_private.h>
-#include <isl_map_private.h>
 
 static __isl_give isl_factorizer *isl_factorizer_alloc(
        __isl_take isl_morph *morph, int n_group)
@@ -65,7 +65,7 @@ void isl_factorizer_dump(__isl_take isl_factorizer *f, FILE *out)
        if (!f)
                return;
 
-       isl_morph_dump(f->morph, out);
+       isl_morph_print_internal(f->morph, out);
        fprintf(out, "[");
        for (i = 0; i < f->n_group; ++i) {
                if (i)
@@ -86,7 +86,7 @@ __isl_give isl_factorizer *isl_factorizer_groups(__isl_keep isl_basic_set *bset,
        int i;
        unsigned nvar;
        unsigned ovar;
-       isl_dim *dim;
+       isl_space *dim;
        isl_basic_set *dom;
        isl_basic_set *ran;
        isl_morph *morph;
@@ -96,16 +96,16 @@ __isl_give isl_factorizer *isl_factorizer_groups(__isl_keep isl_basic_set *bset,
        if (!bset || !Q || !U)
                goto error;
 
-       ovar = 1 + isl_dim_offset(bset->dim, isl_dim_set);
+       ovar = 1 + isl_space_offset(bset->dim, isl_dim_set);
        id = isl_mat_identity(bset->ctx, ovar);
        Q = isl_mat_diagonal(isl_mat_copy(id), Q);
        U = isl_mat_diagonal(id, U);
 
        nvar = isl_basic_set_dim(bset, isl_dim_set);
-       dim = isl_basic_set_get_dim(bset);
-       dom = isl_basic_set_universe(isl_dim_copy(dim));
-       dim = isl_dim_drop(dim, isl_dim_set, 0, nvar);
-       dim = isl_dim_add(dim, isl_dim_set, nvar);
+       dim = isl_basic_set_get_space(bset);
+       dom = isl_basic_set_universe(isl_space_copy(dim));
+       dim = isl_space_drop_dims(dim, isl_dim_set, 0, nvar);
+       dim = isl_space_add_dims(dim, isl_dim_set, nvar);
        ran = isl_basic_set_universe(dim);
        morph = isl_morph_alloc(dom, ran, Q, U);
        f = isl_factorizer_alloc(morph, n);
@@ -229,6 +229,8 @@ static int update_groups(struct isl_factor_groups *g, __isl_keep isl_mat *H)
                                return -1;
                }
        }
+       for (i = 1; i < H->n_col; ++i)
+               update_group(g, i);
 
        return 0;
 }
@@ -274,9 +276,9 @@ __isl_give isl_factorizer *isl_basic_set_factorizer(
        if (!H)
                return NULL;
        isl_mat_sub_copy(bset->ctx, H->row, bset->eq, bset->n_eq,
-               0, 1 + isl_dim_offset(bset->dim, isl_dim_set), nvar);
+               0, 1 + isl_space_offset(bset->dim, isl_dim_set), nvar);
        isl_mat_sub_copy(bset->ctx, H->row + bset->n_eq, bset->ineq, bset->n_ineq,
-               0, 1 + isl_dim_offset(bset->dim, isl_dim_set), nvar);
+               0, 1 + isl_space_offset(bset->dim, isl_dim_set), nvar);
        H = isl_mat_left_hermite(H, 0, &U, &Q);
 
        if (init_groups(&g, H) < 0)
@@ -303,6 +305,9 @@ __isl_give isl_factorizer *isl_basic_set_factorizer(
                        for (j = done + g.cnt[group]; j < nvar; ++j)
                                if (g.group[j] == group)
                                        break;
+                       if (j == nvar)
+                               isl_die(bset->ctx, isl_error_internal,
+                                       "internal error", goto error);
                        g.group[j] = g.group[done + i];
                        Q = isl_mat_swap_rows(Q, done + i, j);
                        U = isl_mat_swap_cols(U, done + i, j);