add isl_basic_map_remove_divs
authorSven Verdoolaege <skimo@kotnet.org>
Fri, 24 Sep 2010 14:51:08 +0000 (16:51 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sat, 25 Sep 2010 16:49:48 +0000 (18:49 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl_map.h
include/isl_set.h
isl_map.c

index cbe9c36..54aebca 100644 (file)
@@ -883,6 +883,16 @@ either of the following functions.
        __isl_give isl_map *isl_map_align_divs(
                __isl_take isl_map *map);
 
+Alternatively, the existentially quantified variables can be removed
+using the following functions, which compute an overapproximation.
+
+       __isl_give isl_basic_set *isl_basic_set_remove_divs(
+               __isl_take isl_basic_set *bset);
+       __isl_give isl_basic_map *isl_basic_map_remove_divs(
+               __isl_take isl_basic_map *bmap);
+       __isl_give isl_set *isl_set_remove_divs(
+               __isl_take isl_set *set);
+
 To iterate over all the sets or maps in a union set or map, use
 
        int isl_union_set_foreach_set(__isl_keep isl_union_set *uset,
index ef7b209..229de7c 100644 (file)
@@ -358,6 +358,8 @@ __isl_give isl_basic_map *isl_basic_map_project_out(
                enum isl_dim_type type, unsigned first, unsigned n);
 __isl_give isl_map *isl_map_project_out(__isl_take isl_map *map,
                enum isl_dim_type type, unsigned first, unsigned n);
+__isl_give isl_basic_map *isl_basic_map_remove_divs(
+       __isl_take isl_basic_map *bmap);
 struct isl_map *isl_map_remove(struct isl_map *map,
        enum isl_dim_type type, unsigned first, unsigned n);
 struct isl_map *isl_map_remove_inputs(struct isl_map *map,
index 27afdc7..00372b7 100644 (file)
@@ -272,14 +272,15 @@ __isl_give isl_set *isl_set_project_out(__isl_take isl_set *set,
                enum isl_dim_type type, unsigned first, unsigned n);
 struct isl_basic_set *isl_basic_set_remove_dims(struct isl_basic_set *bset,
                unsigned first, unsigned n);
-struct isl_basic_set *isl_basic_set_remove_divs(struct isl_basic_set *bset);
+__isl_give isl_basic_set *isl_basic_set_remove_divs(
+       __isl_take isl_basic_set *bset);
 struct isl_set *isl_set_eliminate_dims(struct isl_set *set,
                unsigned first, unsigned n);
 __isl_give isl_set *isl_set_remove(__isl_take isl_set *bset,
        enum isl_dim_type type, unsigned first, unsigned n);
 struct isl_set *isl_set_remove_dims(struct isl_set *set,
                unsigned first, unsigned n);
-struct isl_set *isl_set_remove_divs(struct isl_set *set);
+__isl_give isl_set *isl_set_remove_divs(__isl_take isl_set *set);
 __isl_give isl_set *isl_set_split_dims(__isl_take isl_set *set,
        enum isl_dim_type type, unsigned first, unsigned n);
 
index cfeb94f..9ec7e58 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -1381,14 +1381,22 @@ struct isl_set *isl_set_remove_dims(struct isl_set *set,
        return set;
 }
 
-struct isl_basic_set *isl_basic_set_remove_divs(struct isl_basic_set *bset)
+__isl_give isl_basic_map *isl_basic_map_remove_divs(
+       __isl_take isl_basic_map *bmap)
 {
-       bset = isl_basic_set_eliminate_vars(bset, isl_dim_total(bset->dim),
-                                               bset->n_div);
-       if (!bset)
+       bmap = isl_basic_map_eliminate_vars(bmap, isl_dim_total(bmap->dim),
+                                               bmap->n_div);
+       if (!bmap)
                return NULL;
-       bset->n_div = 0;
-       return bset;
+       bmap->n_div = 0;
+       return bmap;
+}
+
+__isl_give isl_basic_set *isl_basic_set_remove_divs(
+       __isl_take isl_basic_set *bset)
+{
+       return (struct isl_basic_set *)isl_basic_map_remove_divs(
+                       (struct isl_basic_map *)bset);
 }
 
 struct isl_set *isl_set_remove_divs(struct isl_set *set)