From: Sven Verdoolaege Date: Wed, 8 Sep 2010 18:18:10 +0000 (+0200) Subject: add isl_union_set_lex_[lg][et]_union_set X-Git-Tag: isl-0.04~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4ec028e059399a90a5a40f7fa0d636dca6b3f563;p=platform%2Fupstream%2Fisl.git add isl_union_set_lex_[lg][et]_union_set Signed-off-by: Sven Verdoolaege --- diff --git a/include/isl_map.h b/include/isl_map.h index dce1f20..d26176f 100644 --- a/include/isl_map.h +++ b/include/isl_map.h @@ -423,6 +423,15 @@ __isl_give isl_map *isl_map_reaching_path_lengths(__isl_take isl_map *map, __isl_give isl_map *isl_map_transitive_closure(__isl_take isl_map *map, int *exact); +__isl_give isl_map *isl_map_lex_le_map(__isl_take isl_map *map1, + __isl_take isl_map *map2); +__isl_give isl_map *isl_map_lex_lt_map(__isl_take isl_map *map1, + __isl_take isl_map *map2); +__isl_give isl_map *isl_map_lex_ge_map(__isl_take isl_map *map1, + __isl_take isl_map *map2); +__isl_give isl_map *isl_map_lex_gt_map(__isl_take isl_map *map1, + __isl_take isl_map *map2); + #if defined(__cplusplus) } #endif diff --git a/include/isl_set.h b/include/isl_set.h index 6dccd74..f49b791 100644 --- a/include/isl_set.h +++ b/include/isl_set.h @@ -350,6 +350,15 @@ __isl_give isl_set *isl_set_box_from_points(__isl_take isl_point *pnt1, __isl_give isl_set *isl_set_lift(__isl_take isl_set *set); +__isl_give isl_map *isl_set_lex_le_set(__isl_take isl_set *set1, + __isl_take isl_set *set2); +__isl_give isl_map *isl_set_lex_lt_set(__isl_take isl_set *set1, + __isl_take isl_set *set2); +__isl_give isl_map *isl_set_lex_ge_set(__isl_take isl_set *set1, + __isl_take isl_set *set2); +__isl_give isl_map *isl_set_lex_gt_set(__isl_take isl_set *set1, + __isl_take isl_set *set2); + int isl_set_size(__isl_keep isl_set *set); #if defined(__cplusplus) diff --git a/include/isl_union_map.h b/include/isl_union_map.h index 497a88b..d62f3f1 100644 --- a/include/isl_union_map.h +++ b/include/isl_union_map.h @@ -77,6 +77,15 @@ __isl_give isl_basic_map *isl_union_map_sample(__isl_take isl_union_map *umap); __isl_give isl_union_map *isl_union_map_transitive_closure( __isl_take isl_union_map *umap, int *exact); +__isl_give isl_union_map *isl_union_map_lex_lt_union_map( + __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); +__isl_give isl_union_map *isl_union_map_lex_le_union_map( + __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); +__isl_give isl_union_map *isl_union_map_lex_gt_union_map( + __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); +__isl_give isl_union_map *isl_union_map_lex_ge_union_map( + __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2); + __isl_give isl_printer *isl_printer_print_union_map(__isl_take isl_printer *p, __isl_keep isl_union_map *umap); diff --git a/include/isl_union_set.h b/include/isl_union_set.h index 092c8e7..4cb2b58 100644 --- a/include/isl_union_set.h +++ b/include/isl_union_set.h @@ -50,6 +50,15 @@ int isl_union_set_foreach_point(__isl_keep isl_union_set *uset, __isl_give isl_basic_set *isl_union_set_sample(__isl_take isl_union_set *uset); +__isl_give isl_union_set *isl_union_set_lex_lt_union_set( + __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); +__isl_give isl_union_set *isl_union_set_lex_le_union_set( + __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); +__isl_give isl_union_set *isl_union_set_lex_gt_union_set( + __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); +__isl_give isl_union_set *isl_union_set_lex_ge_union_set( + __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2); + __isl_give isl_printer *isl_printer_print_union_set(__isl_take isl_printer *p, __isl_keep isl_union_set *uset); diff --git a/isl_map.c b/isl_map.c index 6b934f6..f218f06 100644 --- a/isl_map.c +++ b/isl_map.c @@ -3201,6 +3201,86 @@ __isl_give isl_map *isl_map_lex_ge(__isl_take isl_dim *set_dim) return map_lex_gte(isl_dim_map(set_dim), 1); } +__isl_give isl_map *isl_set_lex_le_set(__isl_take isl_set *set1, + __isl_take isl_set *set2) +{ + isl_map *map; + map = isl_map_lex_le(isl_set_get_dim(set1)); + map = isl_map_intersect_domain(map, set1); + map = isl_map_intersect_range(map, set2); + return map; +} + +__isl_give isl_map *isl_set_lex_lt_set(__isl_take isl_set *set1, + __isl_take isl_set *set2) +{ + isl_map *map; + map = isl_map_lex_lt(isl_set_get_dim(set1)); + map = isl_map_intersect_domain(map, set1); + map = isl_map_intersect_range(map, set2); + return map; +} + +__isl_give isl_map *isl_set_lex_ge_set(__isl_take isl_set *set1, + __isl_take isl_set *set2) +{ + isl_map *map; + map = isl_map_lex_ge(isl_set_get_dim(set1)); + map = isl_map_intersect_domain(map, set1); + map = isl_map_intersect_range(map, set2); + return map; +} + +__isl_give isl_map *isl_set_lex_gt_set(__isl_take isl_set *set1, + __isl_take isl_set *set2) +{ + isl_map *map; + map = isl_map_lex_gt(isl_set_get_dim(set1)); + map = isl_map_intersect_domain(map, set1); + map = isl_map_intersect_range(map, set2); + return map; +} + +__isl_give isl_map *isl_map_lex_le_map(__isl_take isl_map *map1, + __isl_take isl_map *map2) +{ + isl_map *map; + map = isl_map_lex_le(isl_dim_range(isl_map_get_dim(map1))); + map = isl_map_apply_domain(map, isl_map_reverse(map1)); + map = isl_map_apply_range(map, isl_map_reverse(map2)); + return map; +} + +__isl_give isl_map *isl_map_lex_lt_map(__isl_take isl_map *map1, + __isl_take isl_map *map2) +{ + isl_map *map; + map = isl_map_lex_lt(isl_dim_range(isl_map_get_dim(map1))); + map = isl_map_apply_domain(map, isl_map_reverse(map1)); + map = isl_map_apply_range(map, isl_map_reverse(map2)); + return map; +} + +__isl_give isl_map *isl_map_lex_ge_map(__isl_take isl_map *map1, + __isl_take isl_map *map2) +{ + isl_map *map; + map = isl_map_lex_ge(isl_dim_range(isl_map_get_dim(map1))); + map = isl_map_apply_domain(map, isl_map_reverse(map1)); + map = isl_map_apply_range(map, isl_map_reverse(map2)); + return map; +} + +__isl_give isl_map *isl_map_lex_gt_map(__isl_take isl_map *map1, + __isl_take isl_map *map2) +{ + isl_map *map; + map = isl_map_lex_gt(isl_dim_range(isl_map_get_dim(map1))); + map = isl_map_apply_domain(map, isl_map_reverse(map1)); + map = isl_map_apply_range(map, isl_map_reverse(map2)); + return map; +} + struct isl_basic_map *isl_basic_map_from_basic_set( struct isl_basic_set *bset, struct isl_dim *dim) { diff --git a/isl_union_map.c b/isl_union_map.c index f97063b..747594e 100644 --- a/isl_union_map.c +++ b/isl_union_map.c @@ -545,6 +545,54 @@ __isl_give isl_union_set *isl_union_set_gist(__isl_take isl_union_set *uset, return isl_union_map_gist(uset, context); } +static __isl_give isl_map *lex_le_set(__isl_take isl_map *set1, + __isl_take isl_map *set2) +{ + return isl_set_lex_le_set((isl_set *)set1, (isl_set *)set2); +} + +static __isl_give isl_map *lex_lt_set(__isl_take isl_map *set1, + __isl_take isl_map *set2) +{ + return isl_set_lex_lt_set((isl_set *)set1, (isl_set *)set2); +} + +__isl_give isl_union_set *isl_union_set_lex_lt_union_set( + __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) +{ + return match_bin_op(uset1, uset2, &lex_lt_set); +} + +__isl_give isl_union_set *isl_union_set_lex_le_union_set( + __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) +{ + return match_bin_op(uset1, uset2, &lex_le_set); +} + +__isl_give isl_union_set *isl_union_set_lex_gt_union_set( + __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) +{ + return isl_union_set_lex_lt_union_set(uset2, uset1); +} + +__isl_give isl_union_set *isl_union_set_lex_ge_union_set( + __isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2) +{ + return isl_union_set_lex_le_union_set(uset2, uset1); +} + +__isl_give isl_union_map *isl_union_map_lex_gt_union_map( + __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) +{ + return isl_union_map_lex_lt_union_map(umap2, umap1); +} + +__isl_give isl_union_map *isl_union_map_lex_ge_union_map( + __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) +{ + return isl_union_map_lex_le_union_map(umap2, umap1); +} + static int intersect_domain_entry(void **entry, void *user) { struct isl_union_map_gen_bin_data *data = user; @@ -674,6 +722,50 @@ __isl_give isl_union_set *isl_union_set_apply( return isl_union_map_apply_range(uset, umap); } +static int map_lex_lt_entry(void **entry, void *user) +{ + struct isl_union_map_bin_data *data = user; + isl_map *map2 = *entry; + + if (!isl_dim_tuple_match(data->map->dim, isl_dim_out, + map2->dim, isl_dim_out)) + return 0; + + map2 = isl_map_lex_lt_map(isl_map_copy(data->map), isl_map_copy(map2)); + + data->res = isl_union_map_add_map(data->res, map2); + + return 0; +} + +__isl_give isl_union_map *isl_union_map_lex_lt_union_map( + __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) +{ + return bin_op(umap1, umap2, &map_lex_lt_entry); +} + +static int map_lex_le_entry(void **entry, void *user) +{ + struct isl_union_map_bin_data *data = user; + isl_map *map2 = *entry; + + if (!isl_dim_tuple_match(data->map->dim, isl_dim_out, + map2->dim, isl_dim_out)) + return 0; + + map2 = isl_map_lex_le_map(isl_map_copy(data->map), isl_map_copy(map2)); + + data->res = isl_union_map_add_map(data->res, map2); + + return 0; +} + +__isl_give isl_union_map *isl_union_map_lex_le_union_map( + __isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2) +{ + return bin_op(umap1, umap2, &map_lex_le_entry); +} + static int product_entry(void **entry, void *user) { struct isl_union_map_bin_data *data = user;