From 306ba610995d6ff778e1494c7621bf39319850a6 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Fri, 24 Sep 2010 16:51:08 +0200 Subject: [PATCH] add isl_basic_map_remove_divs Signed-off-by: Sven Verdoolaege --- doc/user.pod | 10 ++++++++++ include/isl_map.h | 2 ++ include/isl_set.h | 5 +++-- isl_map.c | 20 ++++++++++++++------ 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/doc/user.pod b/doc/user.pod index cbe9c36..54aebca 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -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, diff --git a/include/isl_map.h b/include/isl_map.h index ef7b209..229de7c 100644 --- a/include/isl_map.h +++ b/include/isl_map.h @@ -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, diff --git a/include/isl_set.h b/include/isl_set.h index 27afdc7..00372b7 100644 --- a/include/isl_set.h +++ b/include/isl_set.h @@ -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); diff --git a/isl_map.c b/isl_map.c index cfeb94f..9ec7e58 100644 --- 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) -- 2.7.4