From f11bc5b9a5d7698e599656bab20ce0e7ac246ab8 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Wed, 10 Nov 2010 21:49:23 +0100 Subject: [PATCH] isl_set_split_dims: extract out half-space creation Signed-off-by: Sven Verdoolaege --- isl_map.c | 69 ++++++++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 21 deletions(-) diff --git a/isl_map.c b/isl_map.c index 93ffa583..44f213d9 100644 --- a/isl_map.c +++ b/isl_map.c @@ -5571,12 +5571,54 @@ error: return NULL; } +/* Construct the half-space x_pos >= 0. + */ +static __isl_give isl_basic_set *nonneg_halfspace(__isl_take isl_dim *dim, + int pos) +{ + int k; + isl_basic_set *nonneg; + + nonneg = isl_basic_set_alloc_dim(dim, 0, 0, 1); + k = isl_basic_set_alloc_inequality(nonneg); + if (k < 0) + goto error; + isl_seq_clr(nonneg->ineq[k], 1 + isl_basic_set_total_dim(nonneg)); + isl_int_set_si(nonneg->ineq[k][pos], 1); + + return isl_basic_set_finalize(nonneg); +error: + isl_basic_set_free(nonneg); + return NULL; +} + +/* Construct the half-space x_pos <= -1. + */ +static __isl_give isl_basic_set *neg_halfspace(__isl_take isl_dim *dim, int pos) +{ + int k; + isl_basic_set *neg; + + neg = isl_basic_set_alloc_dim(dim, 0, 0, 1); + k = isl_basic_set_alloc_inequality(neg); + if (k < 0) + goto error; + isl_seq_clr(neg->ineq[k], 1 + isl_basic_set_total_dim(neg)); + isl_int_set_si(neg->ineq[k][0], -1); + isl_int_set_si(neg->ineq[k][pos], -1); + + return isl_basic_set_finalize(neg); +error: + isl_basic_set_free(neg); + return NULL; +} + __isl_give isl_set *isl_set_split_dims(__isl_take isl_set *set, enum isl_dim_type type, unsigned first, unsigned n) { int i; - isl_basic_set *nonneg = NULL; - isl_basic_set *neg = NULL; + isl_basic_set *nonneg; + isl_basic_set *neg; if (!set) return NULL; @@ -5586,31 +5628,16 @@ __isl_give isl_set *isl_set_split_dims(__isl_take isl_set *set, isl_assert(set->ctx, first + n <= isl_set_dim(set, type), goto error); for (i = 0; i < n; ++i) { - int k; - - neg = NULL; - nonneg = isl_basic_set_alloc_dim(isl_set_get_dim(set), 0, 0, 1); - k = isl_basic_set_alloc_inequality(nonneg); - if (k < 0) - goto error; - isl_seq_clr(nonneg->ineq[k], 1 + isl_basic_set_total_dim(nonneg)); - isl_int_set_si(nonneg->ineq[k][pos(set->dim, type) + first + i], 1); - - neg = isl_basic_set_alloc_dim(isl_set_get_dim(set), 0, 0, 1); - k = isl_basic_set_alloc_inequality(neg); - if (k < 0) - goto error; - isl_seq_clr(neg->ineq[k], 1 + isl_basic_set_total_dim(neg)); - isl_int_set_si(neg->ineq[k][0], -1); - isl_int_set_si(neg->ineq[k][pos(set->dim, type) + first + i], -1); + nonneg = nonneg_halfspace(isl_set_get_dim(set), + pos(set->dim, type) + first + i); + neg = neg_halfspace(isl_set_get_dim(set), + pos(set->dim, type) + first + i); set = isl_set_intersect(set, isl_basic_set_union(nonneg, neg)); } return set; error: - isl_basic_set_free(nonneg); - isl_basic_set_free(neg); isl_set_free(set); return NULL; } -- 2.11.4.GIT