From 06d2cc2b40210f254d9b164780ffa4b23e857a31 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Wed, 16 Sep 2009 11:06:24 +0200 Subject: [PATCH] add isl_map_lex_le and isl_map_lex_ge --- doc/user.pod | 7 ++++++- include/isl_map.h | 2 ++ isl_map.c | 28 ++++++++++++++++++++++------ 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/doc/user.pod b/doc/user.pod index 76bd4ca..b515bbf 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -523,13 +523,18 @@ and return an identity relation between two such sets. __isl_give isl_map *isl_map_lex_lt( __isl_take isl_dim *set_dim); + __isl_give isl_map *isl_map_lex_le( + __isl_take isl_dim *set_dim); __isl_give isl_map *isl_map_lex_gt( __isl_take isl_dim *set_dim); + __isl_give isl_map *isl_map_lex_ge( + __isl_take isl_dim *set_dim); These functions take a dimension specification for a B and return maps that map elements of a set of the given dimension to elements that are lexicograhically less -(C) or lexicograhically greater (C). +(C), less or equal (C), +greater (C) or greater or equal (C). =back diff --git a/include/isl_map.h b/include/isl_map.h index d8e396a..062bf4d 100644 --- a/include/isl_map.h +++ b/include/isl_map.h @@ -229,7 +229,9 @@ __isl_give isl_map *isl_map_identity(__isl_take isl_dim *set_dim); struct isl_map *isl_map_identity_like(struct isl_map *model); struct isl_map *isl_map_identity_like_basic_map(struct isl_basic_map *model); __isl_give isl_map *isl_map_lex_lt(__isl_take isl_dim *set_dim); +__isl_give isl_map *isl_map_lex_le(__isl_take isl_dim *set_dim); __isl_give isl_map *isl_map_lex_gt(__isl_take isl_dim *set_dim); +__isl_give isl_map *isl_map_lex_ge(__isl_take isl_dim *set_dim); struct isl_map *isl_map_finalize(struct isl_map *map); void isl_map_free(__isl_take isl_map *map); __isl_give isl_map *isl_map_copy(__isl_keep isl_map *map); diff --git a/isl_map.c b/isl_map.c index 0562220..02f4a24 100644 --- a/isl_map.c +++ b/isl_map.c @@ -2318,7 +2318,7 @@ struct isl_basic_map *isl_basic_map_more_at(struct isl_dim *dim, unsigned pos) return isl_basic_map_finalize(bmap); } -static __isl_give isl_map *map_lex_lt(__isl_take isl_dim *dims) +static __isl_give isl_map *map_lex_lte(__isl_take isl_dim *dims, int equal) { struct isl_map *map; unsigned dim; @@ -2327,11 +2327,14 @@ static __isl_give isl_map *map_lex_lt(__isl_take isl_dim *dims) if (!dims) return NULL; dim = dims->n_out; - map = isl_map_alloc_dim(isl_dim_copy(dims), dim, ISL_MAP_DISJOINT); + map = isl_map_alloc_dim(isl_dim_copy(dims), dim + equal, ISL_MAP_DISJOINT); for (i = 0; i < dim; ++i) map = isl_map_add(map, isl_basic_map_less_at(isl_dim_copy(dims), i)); + if (equal) + map = isl_map_add(map, + isl_basic_map_equal(isl_dim_copy(dims), dim)); isl_dim_free(dims); return map; @@ -2339,10 +2342,15 @@ static __isl_give isl_map *map_lex_lt(__isl_take isl_dim *dims) __isl_give isl_map *isl_map_lex_lt(__isl_take isl_dim *set_dim) { - return map_lex_lt(isl_dim_map(set_dim)); + return map_lex_lte(isl_dim_map(set_dim), 0); +} + +__isl_give isl_map *isl_map_lex_le(__isl_take isl_dim *set_dim) +{ + return map_lex_lte(isl_dim_map(set_dim), 1); } -static __isl_give isl_map *map_lex_gt(__isl_take isl_dim *dims) +static __isl_give isl_map *map_lex_gte(__isl_take isl_dim *dims, int equal) { struct isl_map *map; unsigned dim; @@ -2351,11 +2359,14 @@ static __isl_give isl_map *map_lex_gt(__isl_take isl_dim *dims) if (!dims) return NULL; dim = dims->n_out; - map = isl_map_alloc_dim(isl_dim_copy(dims), dim, ISL_MAP_DISJOINT); + map = isl_map_alloc_dim(isl_dim_copy(dims), dim + equal, ISL_MAP_DISJOINT); for (i = 0; i < dim; ++i) map = isl_map_add(map, isl_basic_map_more_at(isl_dim_copy(dims), i)); + if (equal) + map = isl_map_add(map, + isl_basic_map_equal(isl_dim_copy(dims), dim)); isl_dim_free(dims); return map; @@ -2363,7 +2374,12 @@ static __isl_give isl_map *map_lex_gt(__isl_take isl_dim *dims) __isl_give isl_map *isl_map_lex_gt(__isl_take isl_dim *set_dim) { - return map_lex_gt(isl_dim_map(set_dim)); + return map_lex_gte(isl_dim_map(set_dim), 0); +} + +__isl_give isl_map *isl_map_lex_ge(__isl_take isl_dim *set_dim) +{ + return map_lex_gte(isl_dim_map(set_dim), 1); } struct isl_basic_map *isl_basic_map_from_basic_set( -- 2.7.4