isl_basic_set_project_out: drop redundant divs in result
authorSven Verdoolaege <skimo@kotnet.org>
Thu, 13 Aug 2009 14:49:43 +0000 (16:49 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Fri, 28 Aug 2009 17:42:19 +0000 (19:42 +0200)
isl_map.c
isl_map_private.h
isl_map_simplify.c

index 11d3ea5..210327e 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -1877,6 +1877,7 @@ struct isl_basic_set *isl_basic_set_project_out(
        if (!bset->dim)
                goto error;
        bset = isl_basic_set_simplify(bset);
+       bset = isl_basic_set_drop_redundant_divs(bset);
        return isl_basic_set_finalize(bset);
 error:
        isl_basic_set_free(bset);
index e149d7a..23e0bc7 100644 (file)
@@ -115,6 +115,8 @@ int isl_basic_set_constraint_is_redundant(struct isl_basic_set **bset,
 
 struct isl_basic_map *isl_basic_map_drop_redundant_divs(
        struct isl_basic_map *bmap);
+struct isl_basic_set *isl_basic_set_drop_redundant_divs(
+       struct isl_basic_set *bset);
 
 struct isl_basic_set *isl_basic_set_recession_cone(struct isl_basic_set *bset);
 struct isl_basic_set *isl_basic_set_lineality_space(struct isl_basic_set *bset);
index 41aeb1e..c8636dc 100644 (file)
@@ -2356,3 +2356,34 @@ error:
        isl_basic_map_free(bmap);
        return NULL;
 }
+
+struct isl_basic_set *isl_basic_set_drop_redundant_divs(
+       struct isl_basic_set *bset)
+{
+       return (struct isl_basic_set *)
+           isl_basic_map_drop_redundant_divs((struct isl_basic_map *)bset);
+}
+
+struct isl_map *isl_map_drop_redundant_divs(struct isl_map *map)
+{
+       int i;
+
+       if (!map)
+               return NULL;
+       for (i = 0; i < map->n; ++i) {
+               map->p[i] = isl_basic_map_drop_redundant_divs(map->p[i]);
+               if (!map->p[i])
+                       goto error;
+       }
+       ISL_F_CLR(map, ISL_MAP_NORMALIZED);
+       return map;
+error:
+       isl_map_free(map);
+       return NULL;
+}
+
+struct isl_set *isl_set_drop_redundant_divs(struct isl_set *set)
+{
+       return (struct isl_set *)
+           isl_map_drop_redundant_divs((struct isl_map *)set);
+}