From 626782d07926b9514a45c0d4dc57086692bb6c13 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Tue, 25 May 2010 10:23:58 +0200 Subject: [PATCH] add isl_basic_set_full_compression --- isl_morph.c | 23 +++++++++++++++++++++++ isl_morph.h | 2 ++ isl_range.c | 21 +++++++-------------- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/isl_morph.c b/isl_morph.c index 048fc72f..80ec05ac 100644 --- a/isl_morph.c +++ b/isl_morph.c @@ -717,3 +717,26 @@ __isl_give isl_morph *isl_morph_inverse(__isl_take isl_morph *morph) return morph; } + +__isl_give isl_morph *isl_basic_set_full_compression( + __isl_keep isl_basic_set *bset) +{ + isl_morph *morph, *morph2; + + bset = isl_basic_set_copy(bset); + + morph = isl_basic_set_variable_compression(bset, isl_dim_param); + bset = isl_morph_basic_set(isl_morph_copy(morph), bset); + + morph2 = isl_basic_set_parameter_compression(bset); + bset = isl_morph_basic_set(isl_morph_copy(morph2), bset); + + morph = isl_morph_compose(morph2, morph); + + morph2 = isl_basic_set_variable_compression(bset, isl_dim_set); + isl_basic_set_free(bset); + + morph = isl_morph_compose(morph2, morph); + + return morph; +} diff --git a/isl_morph.h b/isl_morph.h index ca23e6af..4ab41ddb 100644 --- a/isl_morph.h +++ b/isl_morph.h @@ -59,6 +59,8 @@ __isl_give isl_morph *isl_basic_set_variable_compression( __isl_keep isl_basic_set *bset, enum isl_dim_type type); __isl_give isl_morph *isl_basic_set_parameter_compression( __isl_keep isl_basic_set *bset); +__isl_give isl_morph *isl_basic_set_full_compression( + __isl_keep isl_basic_set *bset); __isl_give isl_basic_set *isl_morph_basic_set(__isl_take isl_morph *morph, __isl_take isl_basic_set *bset); diff --git a/isl_range.c b/isl_range.c index 70c7d5da..c2f81264 100644 --- a/isl_range.c +++ b/isl_range.c @@ -463,8 +463,8 @@ static int guarded_poly_bound(__isl_take isl_basic_set *bset, isl_pw_qpolynomial_fold *top_pwf; isl_pw_qpolynomial_fold *top_pwf_exact; isl_dim *dim; - isl_morph *morph, *morph2; - unsigned orig_nvar; + isl_morph *morph; + unsigned orig_nvar, final_nvar; int r; bset = isl_basic_set_detect_equalities(bset); @@ -477,19 +477,12 @@ static int guarded_poly_bound(__isl_take isl_basic_set *bset, orig_nvar = isl_basic_set_dim(bset, isl_dim_set); - morph = isl_basic_set_variable_compression(bset, isl_dim_param); - bset = isl_morph_basic_set(isl_morph_copy(morph), bset); - - morph2 = isl_basic_set_parameter_compression(bset); - bset = isl_morph_basic_set(isl_morph_copy(morph2), bset); + morph = isl_basic_set_full_compression(bset); - morph = isl_morph_compose(morph2, morph); - - morph2 = isl_basic_set_variable_compression(bset, isl_dim_set); - bset = isl_morph_basic_set(isl_morph_copy(morph2), bset); + bset = isl_morph_basic_set(isl_morph_copy(morph), bset); + poly = isl_qpolynomial_morph(poly, isl_morph_copy(morph)); - morph2 = isl_morph_compose(morph2, isl_morph_copy(morph)); - poly = isl_qpolynomial_morph(poly, morph2); + final_nvar = isl_basic_set_dim(bset, isl_dim_set); dim = isl_morph_get_ran_dim(morph); dim = isl_dim_drop(dim, isl_dim_set, 0, isl_dim_size(dim, isl_dim_set)); @@ -503,7 +496,7 @@ static int guarded_poly_bound(__isl_take isl_basic_set *bset, r = compressed_guarded_poly_bound(bset, poly, user); morph = isl_morph_remove_dom_dims(morph, isl_dim_set, 0, orig_nvar); - morph = isl_morph_remove_ran_dims(morph, isl_dim_set, 0, orig_nvar); + morph = isl_morph_remove_ran_dims(morph, isl_dim_set, 0, final_nvar); morph = isl_morph_inverse(morph); data->pwf = isl_pw_qpolynomial_fold_morph(data->pwf, -- 2.11.4.GIT