From 6f0dcb6894328634fc78e42236f34b5e53aab51c Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Mon, 9 Aug 2010 17:07:10 +0200 Subject: [PATCH] add isl_basic_map_has_defining_equality Signed-off-by: Sven Verdoolaege --- include/isl_constraint.h | 3 +++ isl_constraint.c | 39 +++++++++++++++++++++++++++------------ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/include/isl_constraint.h b/include/isl_constraint.h index b7322430..de9ee4b0 100644 --- a/include/isl_constraint.h +++ b/include/isl_constraint.h @@ -58,6 +58,9 @@ __isl_give isl_basic_map *isl_basic_map_add_constraint( __isl_give isl_basic_set *isl_basic_set_add_constraint( __isl_take isl_basic_set *bset, __isl_take isl_constraint *constraint); +int isl_basic_map_has_defining_equality( + __isl_keep isl_basic_map *bmap, enum isl_dim_type type, int pos, + __isl_give isl_constraint **c); int isl_basic_set_has_defining_equality( struct isl_basic_set *bset, enum isl_dim_type type, int pos, struct isl_constraint **constraint); diff --git a/isl_constraint.c b/isl_constraint.c index 89679a03..547e935d 100644 --- a/isl_constraint.c +++ b/isl_constraint.c @@ -32,6 +32,13 @@ static unsigned offset(struct isl_constraint *c, enum isl_dim_type type) } } +static unsigned basic_map_offset(__isl_keep isl_basic_map *bmap, + enum isl_dim_type type) +{ + return type == isl_dim_div ? 1 + isl_dim_total(bmap->dim) + : 1 + isl_dim_offset(bmap->dim, type); +} + static unsigned basic_set_offset(struct isl_basic_set *bset, enum isl_dim_type type) { @@ -472,30 +479,38 @@ error: return NULL; } -int isl_basic_set_has_defining_equality( - struct isl_basic_set *bset, enum isl_dim_type type, int pos, - struct isl_constraint **c) +int isl_basic_map_has_defining_equality( + __isl_keep isl_basic_map *bmap, enum isl_dim_type type, int pos, + __isl_give isl_constraint **c) { int i; unsigned offset; unsigned total; - if (!bset) + if (!bmap) return -1; - offset = basic_set_offset(bset, type); - total = isl_basic_set_total_dim(bset); - isl_assert(bset->ctx, pos < isl_basic_set_dim(bset, type), return -1); - for (i = 0; i < bset->n_eq; ++i) - if (!isl_int_is_zero(bset->eq[i][offset + pos]) && - isl_seq_first_non_zero(bset->eq[i]+offset+pos+1, + offset = basic_map_offset(bmap, type); + total = isl_basic_map_total_dim(bmap); + isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), return -1); + for (i = 0; i < bmap->n_eq; ++i) + if (!isl_int_is_zero(bmap->eq[i][offset + pos]) && + isl_seq_first_non_zero(bmap->eq[i]+offset+pos+1, 1+total-offset-pos-1) == -1) { - *c= isl_basic_set_constraint(isl_basic_set_copy(bset), - &bset->eq[i]); + *c = isl_basic_map_constraint(isl_basic_map_copy(bmap), + &bmap->eq[i]); return 1; } return 0; } +int isl_basic_set_has_defining_equality( + __isl_keep isl_basic_set *bset, enum isl_dim_type type, int pos, + __isl_give isl_constraint **c) +{ + return isl_basic_map_has_defining_equality((isl_basic_map *)bset, + type, pos, c); +} + int isl_basic_set_has_defining_inequalities( struct isl_basic_set *bset, enum isl_dim_type type, int pos, struct isl_constraint **lower, -- 2.11.4.GIT