add isl_set_project_out
authorSven Verdoolaege <skimo@kotnet.org>
Thu, 1 Oct 2009 09:42:19 +0000 (11:42 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Fri, 2 Oct 2009 05:43:45 +0000 (07:43 +0200)
doc/user.pod
include/isl_set.h
isl_map.c

index de51235..62a9681 100644 (file)
@@ -700,6 +700,8 @@ is already known to be empty.
        __isl_give isl_basic_set *isl_basic_set_project_out(
                __isl_take isl_basic_set *bset,
                enum isl_dim_type type, unsigned first, unsigned n);
+       __isl_give isl_set *isl_set_project_out(__isl_take isl_set *set,
+               enum isl_dim_type type, unsigned first, unsigned n);
        __isl_give isl_basic_set *isl_basic_map_domain(
                __isl_take isl_basic_map *bmap);
        __isl_give isl_basic_set *isl_basic_map_range(
index eb4f72f..c42a0a3 100644 (file)
@@ -200,6 +200,8 @@ struct isl_set *isl_set_lower_bound_dim(struct isl_set *set,
 __isl_give isl_basic_set *isl_basic_set_project_out(
                __isl_take isl_basic_set *bset,
                enum isl_dim_type type, unsigned first, unsigned n);
+__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);
index 5dfea5b..c1953e6 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -1883,6 +1883,39 @@ error:
        return NULL;
 }
 
+/* Turn final n dimensions into existentially quantified variables.
+ */
+__isl_give isl_set *isl_set_project_out(__isl_take isl_set *set,
+               enum isl_dim_type type, unsigned first, unsigned n)
+{
+       int i;
+
+       if (!set)
+               return NULL;
+
+       isl_assert(set->ctx, type == isl_dim_set, goto error);
+       isl_assert(set->ctx, first + n == isl_set_n_dim(set), goto error);
+
+       if (n == 0)
+               return set;
+
+       set = isl_set_cow(set);
+       if (!set)
+               goto error;
+       set->dim = isl_dim_drop_outputs(set->dim, first, n);
+       for (i = 0; i < set->n; ++i) {
+               set->p[i] = isl_basic_set_project_out(set->p[i], type, first, n);
+               if (!set->p[i])
+                       goto error;
+       }
+
+       ISL_F_CLR(set, ISL_SET_NORMALIZED);
+       return set;
+error:
+       isl_set_free(set);
+       return NULL;
+}
+
 static struct isl_basic_map *add_divs(struct isl_basic_map *bmap, unsigned n)
 {
        int i, j;