add isl_set_eliminate
authorSven Verdoolaege <skimo@kotnet.org>
Sun, 14 Mar 2010 21:09:15 +0000 (22:09 +0100)
committerSven Verdoolaege <skimo@kotnet.org>
Sun, 14 Mar 2010 21:09:15 +0000 (22:09 +0100)
isl_map.c
isl_map_private.h

index 6d8ded1..4f818bf 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -1177,38 +1177,56 @@ void isl_basic_map_swap_div(struct isl_basic_map *bmap, int a, int b)
 }
 
 /* Eliminate the specified n dimensions starting at first from the
- * constraints using Fourier-Motzkin, The dimensions themselves
+ * constraints using Fourier-Motzkin The dimensions themselves
  * are not removed.
  */
-struct isl_set *isl_set_eliminate_dims(struct isl_set *set,
-       unsigned first, unsigned n)
+__isl_give isl_map *isl_map_eliminate(__isl_take isl_map *map,
+       enum isl_dim_type type, unsigned first, unsigned n)
 {
        int i;
-       unsigned nparam;
 
-       if (!set)
+       if (!map)
                return NULL;
        if (n == 0)
-               return set;
+               return map;
 
-       set = isl_set_cow(set);
-       if (!set)
+       map = isl_map_cow(map);
+       if (!map)
                return NULL;
-       isl_assert(set->ctx, first+n <= isl_set_n_dim(set), goto error);
-       nparam = isl_set_n_param(set);
+       isl_assert(map->ctx, first + n <= isl_map_dim(map, type), goto error);
+       first += pos(map->dim, type) - 1;
        
-       for (i = 0; i < set->n; ++i) {
-               set->p[i] = isl_basic_set_eliminate_vars(set->p[i],
-                                                           nparam + first, n);
-               if (!set->p[i])
+       for (i = 0; i < map->n; ++i) {
+               map->p[i] = isl_basic_map_eliminate_vars(map->p[i], first, n);
+               if (!map->p[i])
                        goto error;
        }
-       return set;
+       return map;
 error:
-       isl_set_free(set);
+       isl_map_free(map);
        return NULL;
 }
 
+/* Eliminate the specified n dimensions starting at first from the
+ * constraints using Fourier-Motzkin.  The dimensions themselves
+ * are not removed.
+ */
+__isl_give isl_set *isl_set_eliminate(__isl_take isl_set *set,
+       enum isl_dim_type type, unsigned first, unsigned n)
+{
+       return (isl_set *)isl_map_eliminate((isl_map *)set, type, first, n);
+}
+
+/* Eliminate the specified n dimensions starting at first from the
+ * constraints using Fourier-Motzkin.  The dimensions themselves
+ * are not removed.
+ */
+__isl_give isl_set *isl_set_eliminate_dims(__isl_take isl_set *set,
+       unsigned first, unsigned n)
+{
+       return isl_set_eliminate(set, isl_dim_set, first, n);
+}
+
 /* Project out n dimensions starting at first using Fourier-Motzkin */
 struct isl_set *isl_set_remove_dims(struct isl_set *set,
        unsigned first, unsigned n)
index 19355e9..a3338ed 100644 (file)
@@ -128,6 +128,11 @@ struct isl_basic_map *isl_basic_map_eliminate_vars(
 struct isl_basic_set *isl_basic_set_eliminate_vars(
        struct isl_basic_set *bset, unsigned pos, unsigned n);
 
+__isl_give isl_map *isl_map_eliminate(__isl_take isl_map *map,
+       enum isl_dim_type type, unsigned first, unsigned n);
+__isl_give isl_set *isl_set_eliminate(__isl_take isl_set *set,
+       enum isl_dim_type type, unsigned first, unsigned n);
+
 int isl_basic_set_constraint_is_redundant(struct isl_basic_set **bset,
        isl_int *c, isl_int *opt_n, isl_int *opt_d);