Merge branch 'maint'
[platform/upstream/isl.git] / isl_map_simplify.c
index a596cd5..db025eb 100644 (file)
@@ -7,12 +7,14 @@
  * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
  */
 
+#include <strings.h>
+#include <isl_ctx_private.h>
+#include <isl_map_private.h>
 #include "isl_equalities.h"
-#include "isl_map.h"
-#include "isl_map_private.h"
-#include "isl_seq.h"
+#include <isl/map.h>
+#include <isl/seq.h>
 #include "isl_tab.h"
-#include <isl_dim_private.h>
+#include <isl_space_private.h>
 #include <isl_mat_private.h>
 
 static void swap_equality(struct isl_basic_map *bmap, int a, int b)
@@ -31,11 +33,6 @@ static void swap_inequality(struct isl_basic_map *bmap, int a, int b)
        }
 }
 
-static void set_swap_inequality(struct isl_basic_set *bset, int a, int b)
-{
-       swap_inequality((struct isl_basic_map *)bset, a, b);
-}
-
 static void constraint_drop_vars(isl_int *c, unsigned n, unsigned rem)
 {
        isl_seq_cpy(c, c + n, rem);
@@ -59,7 +56,7 @@ struct isl_basic_set *isl_basic_set_drop_dims(
 
        isl_assert(bset->ctx, first + n <= bset->dim->n_out, goto error);
 
-       if (n == 0 && !isl_dim_get_tuple_name(bset->dim, isl_dim_set))
+       if (n == 0 && !isl_space_get_tuple_name(bset->dim, isl_dim_set))
                return bset;
 
        bset = isl_basic_set_cow(bset);
@@ -78,7 +75,7 @@ struct isl_basic_set *isl_basic_set_drop_dims(
                constraint_drop_vars(bset->div[i]+1+1+bset->dim->nparam+first, n,
                                     (bset->dim->n_out-first-n)+bset->extra);
 
-       bset->dim = isl_dim_drop_outputs(bset->dim, first, n);
+       bset->dim = isl_space_drop_outputs(bset->dim, first, n);
        if (!bset->dim)
                goto error;
 
@@ -100,12 +97,12 @@ struct isl_set *isl_set_drop_dims(
 
        isl_assert(set->ctx, first + n <= set->dim->n_out, goto error);
 
-       if (n == 0 && !isl_dim_get_tuple_name(set->dim, isl_dim_set))
+       if (n == 0 && !isl_space_get_tuple_name(set->dim, isl_dim_set))
                return set;
        set = isl_set_cow(set);
        if (!set)
                goto error;
-       set->dim = isl_dim_drop_outputs(set->dim, first, n);
+       set->dim = isl_space_drop_outputs(set->dim, first, n);
        if (!set->dim)
                goto error;
 
@@ -170,7 +167,7 @@ struct isl_basic_map *isl_basic_map_drop(struct isl_basic_map *bmap,
        dim = isl_basic_map_dim(bmap, type);
        isl_assert(bmap->ctx, first + n <= dim, goto error);
 
-       if (n == 0 && !isl_dim_get_tuple_name(bmap->dim, type))
+       if (n == 0 && !isl_space_is_named_or_nested(bmap->dim, type))
                return bmap;
 
        bmap = isl_basic_map_cow(bmap);
@@ -194,7 +191,7 @@ struct isl_basic_map *isl_basic_map_drop(struct isl_basic_map *bmap,
                        goto error;
                isl_basic_map_free_div(bmap, n);
        } else
-               bmap->dim = isl_dim_drop(bmap->dim, type, first, n);
+               bmap->dim = isl_space_drop_dims(bmap->dim, type, first, n);
        if (!bmap->dim)
                goto error;
 
@@ -229,12 +226,12 @@ struct isl_map *isl_map_drop(struct isl_map *map,
 
        isl_assert(map->ctx, first + n <= isl_map_dim(map, type), goto error);
 
-       if (n == 0 && !isl_dim_get_tuple_name(map->dim, type))
+       if (n == 0 && !isl_space_get_tuple_name(map->dim, type))
                return map;
        map = isl_map_cow(map);
        if (!map)
                goto error;
-       map->dim = isl_dim_drop(map->dim, type, first, n);
+       map->dim = isl_space_drop_dims(map->dim, type, first, n);
        if (!map->dim)
                goto error;
 
@@ -275,7 +272,7 @@ static struct isl_basic_map *isl_basic_map_drop_div(
        if (!bmap)
                goto error;
 
-       pos = 1 + isl_dim_total(bmap->dim) + div;
+       pos = 1 + isl_space_dim(bmap->dim, isl_dim_all) + div;
 
        isl_assert(bmap->ctx, div < bmap->n_div, goto error);
 
@@ -379,12 +376,13 @@ static void eliminate_var_using_equality(struct isl_basic_map *bmap,
        unsigned pos, isl_int *eq, int keep_divs, int *progress)
 {
        unsigned total;
+       unsigned space_total;
        int k;
        int last_div;
 
        total = isl_basic_map_total_dim(bmap);
-       last_div = isl_seq_last_non_zero(eq + 1 + isl_dim_total(bmap->dim),
-                                               bmap->n_div);
+       space_total = isl_space_dim(bmap->dim, isl_dim_all);
+       last_div = isl_seq_last_non_zero(eq + 1 + space_total, bmap->n_div);
        for (k = 0; k < bmap->n_eq; ++k) {
                if (bmap->eq[k] == eq)
                        continue;
@@ -434,7 +432,7 @@ static void eliminate_var_using_equality(struct isl_basic_map *bmap,
 static void eliminate_div(struct isl_basic_map *bmap, isl_int *eq,
        unsigned div, int keep_divs)
 {
-       unsigned pos = isl_dim_total(bmap->dim) + div;
+       unsigned pos = isl_space_dim(bmap->dim, isl_dim_all) + div;
 
        eliminate_var_using_equality(bmap, pos, eq, keep_divs, NULL);
 
@@ -449,10 +447,10 @@ static int ok_to_eliminate_div(struct isl_basic_map *bmap, isl_int *eq,
 {
        int k;
        int last_div;
-       unsigned pos = isl_dim_total(bmap->dim) + div;
+       unsigned space_total = isl_space_dim(bmap->dim, isl_dim_all);
+       unsigned pos = space_total + div;
 
-       last_div = isl_seq_last_non_zero(eq + 1 + isl_dim_total(bmap->dim),
-                                               bmap->n_div);
+       last_div = isl_seq_last_non_zero(eq + 1 + space_total, bmap->n_div);
        if (last_div < 0 || last_div <= div)
                return 1;
 
@@ -481,7 +479,7 @@ static struct isl_basic_map *eliminate_divs_eq(
        if (!bmap)
                return NULL;
 
-       off = 1 + isl_dim_total(bmap->dim);
+       off = 1 + isl_space_dim(bmap->dim, isl_dim_all);
 
        for (d = bmap->n_div - 1; d >= 0 ; --d) {
                for (i = 0; i < bmap->n_eq; ++i) {
@@ -516,7 +514,7 @@ static struct isl_basic_map *eliminate_divs_ineq(
                return NULL;
 
        ctx = bmap->ctx;
-       off = 1 + isl_dim_total(bmap->dim);
+       off = 1 + isl_space_dim(bmap->dim, isl_dim_all);
 
        for (d = bmap->n_div - 1; d >= 0 ; --d) {
                for (i = 0; i < bmap->n_eq; ++i)
@@ -656,7 +654,7 @@ static struct isl_basic_map *remove_duplicate_divs(
        if (!bmap || bmap->n_div <= 1)
                return bmap;
 
-       total_var = isl_dim_total(bmap->dim);
+       total_var = isl_space_dim(bmap->dim, isl_dim_all);
        total = total_var + bmap->n_div;
 
        ctx = bmap->ctx;
@@ -719,7 +717,7 @@ static int n_pure_div_eq(struct isl_basic_map *bmap)
        int i, j;
        unsigned total;
 
-       total = isl_dim_total(bmap->dim);
+       total = isl_space_dim(bmap->dim, isl_dim_all);
        for (i = 0, j = bmap->n_div-1; i < bmap->n_eq; ++i) {
                while (j >= 0 && isl_int_is_zero(bmap->eq[i][1 + total + j]))
                        --j;
@@ -806,13 +804,13 @@ static struct isl_basic_map *normalize_divs(
        if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS))
                return bmap;
 
-       total = isl_dim_total(bmap->dim);
+       total = isl_space_dim(bmap->dim, isl_dim_all);
        div_eq = n_pure_div_eq(bmap);
        if (div_eq == 0)
                return bmap;
 
        if (div_eq < bmap->n_eq) {
-               B = isl_mat_sub_alloc(bmap->ctx, bmap->eq, div_eq,
+               B = isl_mat_sub_alloc6(bmap->ctx, bmap->eq, div_eq,
                                        bmap->n_eq - div_eq, 0, 1 + total);
                C = isl_mat_variable_compression(B, &C2);
                if (!C || !C2)
@@ -833,7 +831,7 @@ static struct isl_basic_map *normalize_divs(
                        --j;
                isl_int_set(d->block.data[i], bmap->eq[i][1 + total + j]);
        }
-       B = isl_mat_sub_alloc(bmap->ctx, bmap->eq, 0, div_eq, 0, 1 + total);
+       B = isl_mat_sub_alloc6(bmap->ctx, bmap->eq, 0, div_eq, 0, 1 + total);
 
        if (C) {
                B = isl_mat_product(B, C);
@@ -881,7 +879,7 @@ static struct isl_basic_map *normalize_divs(
                        needed++;
        }
        if (needed > dropped) {
-               bmap = isl_basic_map_extend_dim(bmap, isl_dim_copy(bmap->dim),
+               bmap = isl_basic_map_extend_space(bmap, isl_space_copy(bmap->dim),
                                needed, needed, 0);
                if (!bmap)
                        goto error;
@@ -931,7 +929,7 @@ error:
 static struct isl_basic_map *set_div_from_lower_bound(
        struct isl_basic_map *bmap, int div, int ineq)
 {
-       unsigned total = 1 + isl_dim_total(bmap->dim);
+       unsigned total = 1 + isl_space_dim(bmap->dim, isl_dim_all);
 
        isl_seq_neg(bmap->div[div] + 1, bmap->ineq[ineq], total + bmap->n_div);
        isl_int_set(bmap->div[div][0], bmap->ineq[ineq][total + div]);
@@ -952,7 +950,7 @@ static int ok_to_set_div_from_bound(struct isl_basic_map *bmap,
        int div, int ineq)
 {
        int j;
-       unsigned total = 1 + isl_dim_total(bmap->dim);
+       unsigned total = 1 + isl_space_dim(bmap->dim, isl_dim_all);
 
        /* Not defined in terms of unknown divs */
        for (j = 0; j < bmap->n_div; ++j) {
@@ -992,7 +990,7 @@ static struct isl_basic_map *check_for_div_constraints(
        struct isl_basic_map *bmap, int k, int l, isl_int sum, int *progress)
 {
        int i;
-       unsigned total = 1 + isl_dim_total(bmap->dim);
+       unsigned total = 1 + isl_space_dim(bmap->dim, isl_dim_all);
 
        for (i = 0; i < bmap->n_div; ++i) {
                if (!isl_int_is_zero(bmap->div[i][0]))
@@ -1023,12 +1021,14 @@ static struct isl_basic_map *remove_duplicate_constraints(
        int bits;
        unsigned total = isl_basic_map_total_dim(bmap);
        isl_int sum;
+       isl_ctx *ctx;
 
        if (!bmap || bmap->n_ineq <= 1)
                return bmap;
 
        size = round_up(4 * (bmap->n_ineq+1) / 3 - 1);
        bits = ffs(size) - 1;
+       ctx = isl_basic_map_get_ctx(bmap);
        index = isl_calloc_array(ctx, isl_int **, size);
        if (!index)
                return bmap;
@@ -1118,7 +1118,7 @@ int isl_basic_map_is_div_constraint(__isl_keep isl_basic_map *bmap,
        if (!bmap)
                return -1;
 
-       pos = 1 + isl_dim_total(bmap->dim) + div;
+       pos = 1 + isl_space_dim(bmap->dim, isl_dim_all) + div;
 
        if (isl_int_eq(constraint[pos], bmap->div[div][0])) {
                int neg;
@@ -1158,7 +1158,7 @@ int isl_basic_map_is_div_constraint(__isl_keep isl_basic_map *bmap,
 static int div_is_redundant(struct isl_basic_map *bmap, int div)
 {
        int i;
-       unsigned pos = 1 + isl_dim_total(bmap->dim) + div;
+       unsigned pos = 1 + isl_space_dim(bmap->dim, isl_dim_all) + div;
 
        for (i = 0; i < bmap->n_eq; ++i)
                if (!isl_int_is_zero(bmap->eq[i][pos]))
@@ -1372,7 +1372,7 @@ static void compute_elimination_index(struct isl_basic_map *bmap, int *elim)
        int d, i;
        unsigned total;
 
-       total = isl_dim_total(bmap->dim);
+       total = isl_space_dim(bmap->dim, isl_dim_all);
        for (d = 0; d < total; ++d)
                elim[d] = -1;
        for (i = 0; i < bmap->n_eq; ++i) {
@@ -1397,7 +1397,7 @@ static int reduced_using_equalities(isl_int *dst, isl_int *src,
        int copied = 0;
        unsigned total;
 
-       total = isl_dim_total(bmap->dim);
+       total = isl_space_dim(bmap->dim, isl_dim_all);
        for (d = total - 1; d >= 0; --d) {
                if (isl_int_is_zero(src[1+d]))
                        continue;
@@ -1465,12 +1465,14 @@ static struct isl_basic_set *remove_shifted_constraints(
        isl_int ***index;
        int bits;
        int k, h, l;
+       isl_ctx *ctx;
 
        if (!bset)
                return NULL;
 
        size = round_up(4 * (context->n_ineq+1) / 3 - 1);
        bits = ffs(size) - 1;
+       ctx = isl_basic_set_get_ctx(bset);
        index = isl_calloc_array(ctx, isl_int **, size);
        if (!index)
                return bset;
@@ -1499,94 +1501,6 @@ error:
        return bset;
 }
 
-/* Tighten (decrease) the constant terms of the inequalities based
- * on the equalities, without removing any integer points.
- * For example, if there is an equality
- *
- *             i = 3 * j
- *
- * and an inequality
- *
- *             i >= 1
- *
- * then we want to replace the inequality by
- *
- *             i >= 3
- *
- * We do this by computing a variable compression and translating
- * the constraints to the compressed space.
- * If any constraint has coefficients (except the contant term)
- * with a common factor "f", then we can replace the constant term "c"
- * by
- *
- *             f * floor(c/f)
- *
- * That is, we add
- *
- *             f * floor(c/f) - c = -fract(c/f)
- *
- * and we can add the same value to the original constraint.
- *
- * In the example, the compressed space only contains "j",
- * and the inequality translates to
- *
- *             3 * j - 1 >= 0
- *
- * We add -fract(-1/3) = -2 to the original constraint to obtain
- *
- *             i - 3 >= 0
- */
-static struct isl_basic_set *normalize_constraints_in_compressed_space(
-       struct isl_basic_set *bset)
-{
-       int i;
-       unsigned total;
-       struct isl_mat *B, *C;
-       isl_int gcd;
-
-       if (!bset)
-               return NULL;
-
-       if (ISL_F_ISSET(bset, ISL_BASIC_SET_RATIONAL))
-               return bset;
-
-       if (!bset->n_ineq)
-               return bset;
-
-       bset = isl_basic_set_cow(bset);
-       if (!bset)
-               return NULL;
-
-       total = isl_basic_set_total_dim(bset);
-       B = isl_mat_sub_alloc(bset->ctx, bset->eq, 0, bset->n_eq, 0, 1 + total);
-       C = isl_mat_variable_compression(B, NULL);
-       if (!C)
-               return bset;
-       if (C->n_col == 0) {
-               isl_mat_free(C);
-               return isl_basic_set_set_to_empty(bset);
-       }
-       B = isl_mat_sub_alloc(bset->ctx, bset->ineq,
-                                               0, bset->n_ineq, 0, 1 + total);
-       C = isl_mat_product(B, C);
-       if (!C)
-               return bset;
-
-       isl_int_init(gcd);
-       for (i = 0; i < bset->n_ineq; ++i) {
-               isl_seq_gcd(C->row[i] + 1, C->n_col - 1, &gcd);
-               if (isl_int_is_one(gcd))
-                       continue;
-               isl_int_fdiv_r(C->row[i][0], C->row[i][0], gcd);
-               isl_int_sub(bset->ineq[i][0], bset->ineq[i][0], C->row[i][0]);
-       }
-       isl_int_clear(gcd);
-
-       isl_mat_free(C);
-
-       return bset;
-}
-
 /* Remove all information from bset that is redundant in the context
  * of context.  Both bset and context are assumed to be full-dimensional.
  *
@@ -1702,6 +1616,13 @@ error:
  * We first compute the integer affine hull of the intersection,
  * compute the gist inside this affine hull and then add back
  * those equalities that are not implied by the context.
+ *
+ * If two constraints are mutually redundant, then uset_gist_full
+ * will remove the second of those constraints.  We therefore first
+ * sort the constraints so that constraints not involving existentially
+ * quantified variables are given precedence over those that do.
+ * We have to perform this sorting before the variable compression,
+ * because that may effect the order of the variables.
  */
 static __isl_give isl_basic_set *uset_gist(__isl_take isl_basic_set *bset,
        __isl_take isl_basic_set *context)
@@ -1716,14 +1637,15 @@ static __isl_give isl_basic_set *uset_gist(__isl_take isl_basic_set *bset,
                goto error;
 
        bset = isl_basic_set_intersect(bset, isl_basic_set_copy(context));
-       if (isl_basic_set_fast_is_empty(bset)) {
+       if (isl_basic_set_plain_is_empty(bset)) {
                isl_basic_set_free(context);
                return bset;
        }
+       bset = isl_basic_set_sort_constraints(bset);
        aff = isl_basic_set_affine_hull(isl_basic_set_copy(bset));
        if (!aff)
                goto error;
-       if (isl_basic_set_fast_is_empty(aff)) {
+       if (isl_basic_set_plain_is_empty(aff)) {
                isl_basic_set_free(aff);
                isl_basic_set_free(context);
                return bset;
@@ -1733,7 +1655,7 @@ static __isl_give isl_basic_set *uset_gist(__isl_take isl_basic_set *bset,
                return uset_gist_full(bset, context);
        }
        total = isl_basic_set_total_dim(bset);
-       eq = isl_mat_sub_alloc(bset->ctx, aff->eq, 0, aff->n_eq, 0, 1 + total);
+       eq = isl_mat_sub_alloc6(bset->ctx, aff->eq, 0, aff->n_eq, 0, 1 + total);
        eq = isl_mat_cow(eq);
        T = isl_mat_variable_compression(eq, &T2);
        if (T && T->n_col == 0) {
@@ -1815,13 +1737,13 @@ struct isl_basic_map *isl_basic_map_gist(struct isl_basic_map *bmap,
                isl_basic_map_free(context);
                return bmap;
        }
-       if (isl_basic_map_fast_is_empty(context)) {
-               struct isl_dim *dim = isl_dim_copy(bmap->dim);
+       if (isl_basic_map_plain_is_empty(context)) {
+               isl_space *dim = isl_space_copy(bmap->dim);
                isl_basic_map_free(context);
                isl_basic_map_free(bmap);
                return isl_basic_map_universe(dim);
        }
-       if (isl_basic_map_fast_is_empty(bmap)) {
+       if (isl_basic_map_plain_is_empty(bmap)) {
                isl_basic_map_free(context);
                return bmap;
        }
@@ -1856,8 +1778,8 @@ __isl_give isl_map *isl_map_gist_basic_map(__isl_take isl_map *map,
        if (!map || !context)
                goto error;;
 
-       if (isl_basic_map_fast_is_empty(context)) {
-               struct isl_dim *dim = isl_dim_copy(map->dim);
+       if (isl_basic_map_plain_is_empty(context)) {
+               isl_space *dim = isl_space_copy(map->dim);
                isl_basic_map_free(context);
                isl_map_free(map);
                return isl_map_universe(dim);
@@ -1867,7 +1789,7 @@ __isl_give isl_map *isl_map_gist_basic_map(__isl_take isl_map *map,
        map = isl_map_cow(map);
        if (!map || !context)
                goto error;;
-       isl_assert(map->ctx, isl_dim_equal(map->dim, context->dim), goto error);
+       isl_assert(map->ctx, isl_space_is_equal(map->dim, context->dim), goto error);
        map = isl_map_compute_divs(map);
        for (i = 0; i < map->n; ++i)
                context = isl_basic_map_align_divs(context, map->p[i]);
@@ -1876,7 +1798,7 @@ __isl_give isl_map *isl_map_gist_basic_map(__isl_take isl_map *map,
                                                isl_basic_map_copy(context));
                if (!map->p[i])
                        goto error;
-               if (isl_basic_map_fast_is_empty(map->p[i])) {
+               if (isl_basic_map_plain_is_empty(map->p[i])) {
                        isl_basic_map_free(map->p[i]);
                        if (i != map->n - 1)
                                map->p[i] = map->p[map->n - 1];
@@ -1892,13 +1814,19 @@ error:
        return NULL;
 }
 
-__isl_give isl_map *isl_map_gist(__isl_take isl_map *map,
+static __isl_give isl_map *map_gist(__isl_take isl_map *map,
        __isl_take isl_map *context)
 {
        context = isl_map_compute_divs(context);
        return isl_map_gist_basic_map(map, isl_map_simple_hull(context));
 }
 
+__isl_give isl_map *isl_map_gist(__isl_take isl_map *map,
+       __isl_take isl_map *context)
+{
+       return isl_map_align_params_map_map_and(map, context, &map_gist);
+}
+
 struct isl_basic_set *isl_basic_set_gist(struct isl_basic_set *bset,
                                                struct isl_basic_set *context)
 {
@@ -1920,13 +1848,27 @@ __isl_give isl_set *isl_set_gist(__isl_take isl_set *set,
                                        (struct isl_map *)context);
 }
 
+__isl_give isl_map *isl_map_gist_params(__isl_take isl_map *map,
+       __isl_take isl_set *context)
+{
+       isl_map *map_context = isl_map_universe(isl_map_get_space(map));
+       map_context = isl_map_intersect_params(map_context, context);
+       return isl_map_gist(map, map_context);
+}
+
+__isl_give isl_set *isl_set_gist_params(__isl_take isl_set *set,
+       __isl_take isl_set *context)
+{
+       return isl_map_gist_params(set, context);
+}
+
 /* Quick check to see if two basic maps are disjoint.
  * In particular, we reduce the equalities and inequalities of
  * one basic map in the context of the equalities of the other
  * basic map and check if we get a contradiction.
  */
-int isl_basic_map_fast_is_disjoint(struct isl_basic_map *bmap1,
-       struct isl_basic_map *bmap2)
+int isl_basic_map_plain_is_disjoint(__isl_keep isl_basic_map *bmap1,
+       __isl_keep isl_basic_map *bmap2)
 {
        struct isl_vec *v = NULL;
        int *elim = NULL;
@@ -1935,14 +1877,14 @@ int isl_basic_map_fast_is_disjoint(struct isl_basic_map *bmap1,
 
        if (!bmap1 || !bmap2)
                return -1;
-       isl_assert(bmap1->ctx, isl_dim_equal(bmap1->dim, bmap2->dim),
+       isl_assert(bmap1->ctx, isl_space_is_equal(bmap1->dim, bmap2->dim),
                        return -1);
        if (bmap1->n_div || bmap2->n_div)
                return 0;
        if (!bmap1->n_eq && !bmap2->n_eq)
                return 0;
 
-       total = isl_dim_total(bmap1->dim);
+       total = isl_space_dim(bmap1->dim, isl_dim_all);
        if (total == 0)
                return 0;
        v = isl_vec_alloc(bmap1->ctx, 1 + total);
@@ -1990,26 +1932,27 @@ error:
        return -1;
 }
 
-int isl_basic_set_fast_is_disjoint(struct isl_basic_set *bset1,
-       struct isl_basic_set *bset2)
+int isl_basic_set_plain_is_disjoint(__isl_keep isl_basic_set *bset1,
+       __isl_keep isl_basic_set *bset2)
 {
-       return isl_basic_map_fast_is_disjoint((struct isl_basic_map *)bset1,
+       return isl_basic_map_plain_is_disjoint((struct isl_basic_map *)bset1,
                                              (struct isl_basic_map *)bset2);
 }
 
-int isl_map_fast_is_disjoint(struct isl_map *map1, struct isl_map *map2)
+int isl_map_plain_is_disjoint(__isl_keep isl_map *map1,
+       __isl_keep isl_map *map2)
 {
        int i, j;
 
        if (!map1 || !map2)
                return -1;
 
-       if (isl_map_fast_is_equal(map1, map2))
+       if (isl_map_plain_is_equal(map1, map2))
                return 0;
 
        for (i = 0; i < map1->n; ++i) {
                for (j = 0; j < map2->n; ++j) {
-                       int d = isl_basic_map_fast_is_disjoint(map1->p[i],
+                       int d = isl_basic_map_plain_is_disjoint(map1->p[i],
                                                               map2->p[j]);
                        if (d != 1)
                                return d;
@@ -2018,12 +1961,18 @@ int isl_map_fast_is_disjoint(struct isl_map *map1, struct isl_map *map2)
        return 1;
 }
 
-int isl_set_fast_is_disjoint(struct isl_set *set1, struct isl_set *set2)
+int isl_set_plain_is_disjoint(__isl_keep isl_set *set1,
+       __isl_keep isl_set *set2)
 {
-       return isl_map_fast_is_disjoint((struct isl_map *)set1,
+       return isl_map_plain_is_disjoint((struct isl_map *)set1,
                                        (struct isl_map *)set2);
 }
 
+int isl_set_fast_is_disjoint(__isl_keep isl_set *set1, __isl_keep isl_set *set2)
+{
+       return isl_set_plain_is_disjoint(set1, set2);
+}
+
 /* Check if we can combine a given div with lower bound l and upper
  * bound u with some other div and if so return that other div.
  * Otherwise return -1.
@@ -2061,7 +2010,7 @@ static int div_find_coalesce(struct isl_basic_map *bmap, int *pairs,
 
        if (bmap->n_div <= 1)
                return -1;
-       dim = isl_dim_total(bmap->dim);
+       dim = isl_space_dim(bmap->dim, isl_dim_all);
        if (isl_seq_first_non_zero(bmap->ineq[l] + 1 + dim, div) != -1)
                return -1;
        if (isl_seq_first_non_zero(bmap->ineq[l] + 1 + dim + div + 1,
@@ -2164,7 +2113,7 @@ static void construct_test_ineq(struct isl_basic_map *bmap, int i,
        int l, int u, isl_int *ineq, isl_int g, isl_int fl, isl_int fu)
 {
        unsigned dim;
-       dim = isl_dim_total(bmap->dim);
+       dim = isl_space_dim(bmap->dim, isl_dim_all);
 
        isl_int_gcd(g, bmap->ineq[l][1 + dim + i], bmap->ineq[u][1 + dim + i]);
        isl_int_divexact(fl, bmap->ineq[l][1 + dim + i], g);
@@ -2202,7 +2151,7 @@ static struct isl_basic_map *drop_more_redundant_divs(
        if (!bmap)
                goto error;
 
-       dim = isl_dim_total(bmap->dim);
+       dim = isl_space_dim(bmap->dim, isl_dim_all);
        vec = isl_vec_alloc(bmap->ctx, 1 + dim + bmap->n_div);
        if (!vec)
                goto error;
@@ -2333,7 +2282,7 @@ static struct isl_basic_map *coalesce_divs(struct isl_basic_map *bmap,
        unsigned dim, total;
        int i;
 
-       dim = isl_dim_total(bmap->dim);
+       dim = isl_space_dim(bmap->dim, isl_dim_all);
        total = 1 + dim + bmap->n_div;
 
        isl_int_init(a);
@@ -2393,7 +2342,7 @@ static struct isl_basic_map *coalesce_or_drop_more_redundant_divs(
        int i, l, u;
        unsigned dim;
 
-       dim = isl_dim_total(bmap->dim);
+       dim = isl_space_dim(bmap->dim, isl_dim_all);
 
        for (i = 0; i < bmap->n_div; ++i) {
                if (!pairs[i])
@@ -2447,7 +2396,7 @@ struct isl_basic_map *isl_basic_map_drop_redundant_divs(
        if (!bmap)
                goto error;
 
-       off = isl_dim_total(bmap->dim);
+       off = isl_space_dim(bmap->dim, isl_dim_all);
        pairs = isl_calloc_array(bmap->ctx, int, bmap->n_div);
        if (!pairs)
                goto error;