From d302772fe8b5d405ccd384d0294de29e00c15b78 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Mon, 18 Jul 2011 17:09:54 +0200 Subject: [PATCH] add isl_map_involves_dims Signed-off-by: Sven Verdoolaege --- doc/user.pod | 15 +++++++++++++++ include/isl/map.h | 5 +++++ isl_map.c | 42 +++++++++++++++++++++++++++--------------- 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/doc/user.pod b/doc/user.pod index ef11d92..413a470 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -1243,6 +1243,21 @@ different kinds of variables appear in the resulting matrix and should be a permutation of C, C, C, C and C. +To check whether the description of a set or relation depends +on one or more given dimensions, it is not necessary to iterate over all +constraints. Instead the following functions can be used. + + int isl_basic_set_involves_dims( + __isl_keep isl_basic_set *bset, + enum isl_dim_type type, unsigned first, unsigned n); + int isl_set_involves_dims(__isl_keep isl_set *set, + enum isl_dim_type type, unsigned first, unsigned n); + int isl_basic_map_involves_dims( + __isl_keep isl_basic_map *bmap, + enum isl_dim_type type, unsigned first, unsigned n); + int isl_map_involves_dims(__isl_keep isl_map *map, + enum isl_dim_type type, unsigned first, unsigned n); + The names of the domain and range spaces of a set or relation can be read off or set using the following functions. diff --git a/include/isl/map.h b/include/isl/map.h index 4678227..8e53ba5 100644 --- a/include/isl/map.h +++ b/include/isl/map.h @@ -401,6 +401,11 @@ __isl_give isl_map *isl_basic_map_compute_divs(__isl_take isl_basic_map *bmap); __isl_give isl_map *isl_map_compute_divs(__isl_take isl_map *map); __isl_give isl_map *isl_map_align_divs(__isl_take isl_map *map); +int isl_basic_map_involves_dims(__isl_keep isl_basic_map *bmap, + enum isl_dim_type type, unsigned first, unsigned n); +int isl_map_involves_dims(__isl_keep isl_map *map, + enum isl_dim_type type, unsigned first, unsigned n); + void isl_map_print_internal(__isl_keep isl_map *map, FILE *out, int indent); int isl_map_plain_input_is_fixed(__isl_keep isl_map *map, diff --git a/isl_map.c b/isl_map.c index 1e75c54..919c308 100644 --- a/isl_map.c +++ b/isl_map.c @@ -1543,43 +1543,43 @@ __isl_give isl_set *isl_set_remove_divs_involving_dims(__isl_take isl_set *set, type, first, n); } -int isl_basic_set_involves_dims(__isl_keep isl_basic_set *bset, +int isl_basic_map_involves_dims(__isl_keep isl_basic_map *bmap, enum isl_dim_type type, unsigned first, unsigned n) { int i; - if (!bset) + if (!bmap) return -1; - if (first + n > isl_basic_set_dim(bset, type)) - isl_die(bset->ctx, isl_error_invalid, + if (first + n > isl_basic_map_dim(bmap, type)) + isl_die(bmap->ctx, isl_error_invalid, "index out of bounds", return -1); - first += isl_basic_set_offset(bset, type); - for (i = 0; i < bset->n_eq; ++i) - if (isl_seq_first_non_zero(bset->eq[i] + first, n) >= 0) + first += isl_basic_map_offset(bmap, type); + for (i = 0; i < bmap->n_eq; ++i) + if (isl_seq_first_non_zero(bmap->eq[i] + first, n) >= 0) return 1; - for (i = 0; i < bset->n_ineq; ++i) - if (isl_seq_first_non_zero(bset->ineq[i] + first, n) >= 0) + for (i = 0; i < bmap->n_ineq; ++i) + if (isl_seq_first_non_zero(bmap->ineq[i] + first, n) >= 0) return 1; return 0; } -int isl_set_involves_dims(__isl_keep isl_set *set, +int isl_map_involves_dims(__isl_keep isl_map *map, enum isl_dim_type type, unsigned first, unsigned n) { int i; - if (!set) + if (!map) return -1; - if (first + n > isl_set_dim(set, type)) - isl_die(set->ctx, isl_error_invalid, + if (first + n > isl_map_dim(map, type)) + isl_die(map->ctx, isl_error_invalid, "index out of bounds", return -1); - for (i = 0; i < set->n; ++i) { - int involves = isl_basic_set_involves_dims(set->p[i], + for (i = 0; i < map->n; ++i) { + int involves = isl_basic_map_involves_dims(map->p[i], type, first, n); if (involves < 0 || !involves) return involves; @@ -1588,6 +1588,18 @@ int isl_set_involves_dims(__isl_keep isl_set *set, return 1; } +int isl_basic_set_involves_dims(__isl_keep isl_basic_set *bset, + enum isl_dim_type type, unsigned first, unsigned n) +{ + return isl_basic_map_involves_dims(bset, type, first, n); +} + +int isl_set_involves_dims(__isl_keep isl_set *set, + enum isl_dim_type type, unsigned first, unsigned n) +{ + return isl_map_involves_dims(set, type, first, n); +} + /* Return true if the definition of the given div is unknown or depends * on unknown divs. */ -- 2.7.4