add isl_basic_set_full_compression
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 25 May 2010 08:23:58 +0000 (10:23 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sat, 12 Jun 2010 11:16:36 +0000 (13:16 +0200)
isl_morph.c
isl_morph.h
isl_range.c

index 048fc72..80ec05a 100644 (file)
@@ -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;
+}
index ca23e6a..4ab41dd 100644 (file)
@@ -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);
index 70c7d5d..c2f8126 100644 (file)
@@ -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,