From 70b5b5a5058f82cf1c7b3f23402048ec49f9eb24 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sun, 27 Jul 2014 17:23:26 +0200 Subject: [PATCH] add isl_set_align_divs_to_basic_set_list This will be useful for isl_set_unshifted_simple_hull_from_basic_set_list. Signed-off-by: Sven Verdoolaege --- isl_map.c | 30 ++++++++++++++++++++++++++++++ isl_map_private.h | 2 ++ 2 files changed, 32 insertions(+) diff --git a/isl_map.c b/isl_map.c index dec5ff4f..b519a8d1 100644 --- a/isl_map.c +++ b/isl_map.c @@ -8351,6 +8351,36 @@ struct isl_set *isl_set_align_divs(struct isl_set *set) return (struct isl_set *)isl_map_align_divs((struct isl_map *)set); } +/* Align the divs of the basic sets in "set" to those + * of the basic sets in "list", as well as to the other basic sets in "set". + * The elements in "list" are assumed to have known divs. + */ +__isl_give isl_set *isl_set_align_divs_to_basic_set_list( + __isl_take isl_set *set, __isl_keep isl_basic_set_list *list) +{ + int i, n; + + set = isl_set_compute_divs(set); + set = isl_set_cow(set); + if (!set || !list) + return isl_set_free(set); + if (set->n == 0) + return set; + + n = isl_basic_set_list_n_basic_set(list); + for (i = 0; i < n; ++i) { + isl_basic_set *bset; + + bset = isl_basic_set_list_get_basic_set(list, i); + set->p[0] = isl_basic_set_align_divs(set->p[0], bset); + isl_basic_set_free(bset); + } + if (!set->p[0]) + return isl_set_free(set); + + return isl_set_align_divs(set); +} + static __isl_give isl_set *set_apply( __isl_take isl_set *set, __isl_take isl_map *map) { diff --git a/isl_map_private.h b/isl_map_private.h index f003c046..caa29c19 100644 --- a/isl_map_private.h +++ b/isl_map_private.h @@ -208,6 +208,8 @@ struct isl_basic_map *isl_basic_map_align_divs( struct isl_basic_map *dst, struct isl_basic_map *src); struct isl_basic_set *isl_basic_set_align_divs( struct isl_basic_set *dst, struct isl_basic_set *src); +__isl_give isl_set *isl_set_align_divs_to_basic_set_list( + __isl_take isl_set *set, __isl_keep isl_basic_set_list *list); __isl_give isl_basic_map *isl_basic_map_sort_divs( __isl_take isl_basic_map *bmap); __isl_give isl_map *isl_map_sort_divs(__isl_take isl_map *map); -- 2.11.4.GIT