From: Sven Verdoolaege Date: Thu, 1 Apr 2010 14:39:52 +0000 (+0200) Subject: add isl_set_dim_is_bounded X-Git-Tag: isl-0.03~287 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3a18dc063950f31d05160ebb9f65cc29e89ed0e8;p=platform%2Fupstream%2Fisl.git add isl_set_dim_is_bounded --- diff --git a/include/isl_set.h b/include/isl_set.h index f92dfd0..8af864f 100644 --- a/include/isl_set.h +++ b/include/isl_set.h @@ -283,6 +283,8 @@ int isl_basic_set_fast_dim_is_fixed(struct isl_basic_set *bset, unsigned dim, int isl_set_fast_dim_is_fixed(struct isl_set *set, unsigned dim, isl_int *val); int isl_set_fast_dim_has_fixed_lower_bound(struct isl_set *set, unsigned dim, isl_int *val); +int isl_set_dim_is_bounded(__isl_keep isl_set *set, + enum isl_dim_type type, unsigned pos); struct isl_basic_set *isl_basic_set_gist(struct isl_basic_set *bset, struct isl_basic_set *context); diff --git a/isl_map.c b/isl_map.c index 7df4bcf..491287a 100644 --- a/isl_map.c +++ b/isl_map.c @@ -6386,3 +6386,59 @@ int isl_set_size(__isl_keep isl_set *set) return size; } + +int isl_basic_map_dim_is_bounded(__isl_keep isl_basic_map *bmap, + enum isl_dim_type type, unsigned pos) +{ + int i; + int lower, upper; + + if (!bmap) + return -1; + + isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), return -1); + + pos += isl_basic_map_offset(bmap, type); + + for (i = 0; i < bmap->n_eq; ++i) + if (!isl_int_is_zero(bmap->eq[i][pos])) + return 1; + + lower = upper = 0; + for (i = 0; i < bmap->n_ineq; ++i) { + int sgn = isl_int_sgn(bmap->ineq[i][pos]); + if (sgn > 0) + lower = 1; + if (sgn < 0) + upper = 1; + } + + return lower && upper; +} + +int isl_map_dim_is_bounded(__isl_keep isl_map *map, + enum isl_dim_type type, unsigned pos) +{ + int i; + + if (!map) + return -1; + + for (i = 0; i < map->n; ++i) { + int bounded; + bounded = isl_basic_map_dim_is_bounded(map->p[i], type, pos); + if (bounded < 0 || !bounded) + return bounded; + } + + return 1; +} + +/* Return 1 if the specified dim is involved in both an upper bound + * and a lower bound. + */ +int isl_set_dim_is_bounded(__isl_keep isl_set *set, + enum isl_dim_type type, unsigned pos) +{ + return isl_map_dim_is_bounded((isl_map *)set, type, pos); +}