From: Sven Verdoolaege Date: Sat, 20 Sep 2008 18:37:27 +0000 (+0200) Subject: isl_basic_map_affine_hull: allow computation of affine hull of rational sets X-Git-Tag: isl-0.01~395 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;ds=sidebyside;h=d19b0cd16a1789365fa091555733290ff4b6650d;p=platform%2Fupstream%2Fisl.git isl_basic_map_affine_hull: allow computation of affine hull of rational sets --- diff --git a/isl_affine_hull.c b/isl_affine_hull.c index 038f4cc..ea08d02 100644 --- a/isl_affine_hull.c +++ b/isl_affine_hull.c @@ -11,7 +11,9 @@ struct isl_basic_map *isl_basic_map_implicit_equalities( struct isl_basic_map *bmap) { int i; + int rational; isl_int opt; + isl_int opt_denom; struct isl_ctx *ctx; if (!bmap) @@ -23,10 +25,15 @@ struct isl_basic_map *isl_basic_map_implicit_equalities( return bmap; ctx = bmap->ctx; + rational = F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL); isl_int_init(opt); + isl_int_init(opt_denom); + if (!rational) + isl_int_set_si(opt_denom, 1); for (i = 0; i < bmap->n_ineq; ++i) { enum isl_lp_result res; - res = isl_solve_lp(bmap, 1, bmap->ineq[i]+1, ctx->one, &opt, NULL); + res = isl_solve_lp(bmap, 1, bmap->ineq[i]+1, ctx->one, + &opt, rational ? &opt_denom : NULL); if (res == isl_lp_unbounded) continue; if (res == isl_lp_error) @@ -35,12 +42,15 @@ struct isl_basic_map *isl_basic_map_implicit_equalities( bmap = isl_basic_map_set_to_empty(bmap); break; } + if (!isl_int_is_one(opt_denom)) + continue; isl_int_add(opt, opt, bmap->ineq[i][0]); if (isl_int_is_zero(opt)) { isl_basic_map_inequality_to_equality(bmap, i); --i; } } + isl_int_clear(opt_denom); isl_int_clear(opt); F_SET(bmap, ISL_BASIC_MAP_NO_IMPLICIT); @@ -304,6 +314,12 @@ struct isl_basic_map *isl_basic_map_affine_hull(struct isl_basic_map *bmap) if (bmap->n_ineq == 0) return bmap; + if (F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL)) { + bmap = isl_basic_map_cow(bmap); + isl_basic_map_free_inequality(bmap, bmap->n_ineq); + return bmap; + } + bset = isl_basic_map_underlying_set(isl_basic_map_copy(bmap)); bset = isl_basic_set_remove_equalities(bset, NULL, &T2);