diff options
-rw-r--r-- | polly/lib/External/isl/AUTHORS | 2 | ||||
-rw-r--r-- | polly/lib/External/isl/GIT_HEAD_ID | 2 | ||||
-rw-r--r-- | polly/lib/External/isl/doc/user.pod | 37 | ||||
-rw-r--r-- | polly/lib/External/isl/include/isl/aff.h | 6 | ||||
-rw-r--r-- | polly/lib/External/isl/include/isl/map.h | 3 | ||||
-rw-r--r-- | polly/lib/External/isl/include/isl/polynomial.h | 6 | ||||
-rw-r--r-- | polly/lib/External/isl/include/isl/set.h | 3 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_aff.c | 22 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_aff_private.h | 3 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_map.c | 81 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_pw_templ.c | 63 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_space.c | 2 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_test.c | 59 |
13 files changed, 248 insertions, 41 deletions
diff --git a/polly/lib/External/isl/AUTHORS b/polly/lib/External/isl/AUTHORS index 411b2bd954a..f2c3393553e 100644 --- a/polly/lib/External/isl/AUTHORS +++ b/polly/lib/External/isl/AUTHORS @@ -42,7 +42,7 @@ Alexander Matz Sebastian Pop Louis-Noel Pouchet Benoit Pradelle -Uday Kumar Reddy +Uday Bondhugula Andreas Simbuerger Malhar Thakkar Sven van Haastregt diff --git a/polly/lib/External/isl/GIT_HEAD_ID b/polly/lib/External/isl/GIT_HEAD_ID index 31fafb98490..2079c0dae5a 100644 --- a/polly/lib/External/isl/GIT_HEAD_ID +++ b/polly/lib/External/isl/GIT_HEAD_ID @@ -1 +1 @@ -isl-0.19-107-gc4fe33d8 +isl-0.19-114-g385262af diff --git a/polly/lib/External/isl/doc/user.pod b/polly/lib/External/isl/doc/user.pod index 99e09be8cdb..8498e02b1ad 100644 --- a/polly/lib/External/isl/doc/user.pod +++ b/polly/lib/External/isl/doc/user.pod @@ -4056,6 +4056,9 @@ the following functions can be used. isl_bool isl_multi_aff_involves_dims( __isl_keep isl_multi_aff *ma, enum isl_dim_type type, unsigned first, unsigned n); + isl_bool isl_pw_multi_aff_involves_dims( + __isl_keep isl_pw_multi_aff *pma, + enum isl_dim_type type, unsigned first, unsigned n); isl_bool isl_multi_pw_aff_involves_dims( __isl_keep isl_multi_pw_aff *mpa, enum isl_dim_type type, unsigned first, unsigned n); @@ -5680,6 +5683,40 @@ All parameters need to be named. __isl_take isl_qpolynomial *qp, __isl_take isl_space *model); +=item * Drop unused parameters + +Drop parameters that are not referenced by the isl object. +All parameters need to be named. + + #include <isl/set.h> + __isl_give isl_basic_set * + isl_basic_set_drop_unused_params( + __isl_take isl_basic_set *bset); + __isl_give isl_set *isl_set_drop_unused_params( + __isl_take isl_set *set); + + #include <isl/map.h> + __isl_give isl_basic_map * + isl_basic_map_drop_unused_params( + __isl_take isl_basic_map *bmap); + __isl_give isl_map *isl_map_drop_unused_params( + __isl_take isl_map *map); + + #include <isl/aff.h> + __isl_give isl_pw_aff *isl_pw_aff_drop_unused_params( + __isl_take isl_pw_aff *pa); + __isl_give isl_pw_multi_aff * + isl_pw_multi_aff_drop_unused_params( + __isl_take isl_pw_multi_aff *pma); + + #include <isl/polynomial.h> + __isl_give isl_pw_qpolynomial * + isl_pw_qpolynomial_drop_unused_params( + __isl_take isl_pw_qpolynomial *pwqp); + __isl_give isl_pw_qpolynomial_fold * + isl_pw_qpolynomial_fold_drop_unused_params( + __isl_take isl_pw_qpolynomial_fold *pwf); + =item * Unary Arithmetic Operations #include <isl/set.h> diff --git a/polly/lib/External/isl/include/isl/aff.h b/polly/lib/External/isl/include/isl/aff.h index d8d81b40c32..91a143d7379 100644 --- a/polly/lib/External/isl/include/isl/aff.h +++ b/polly/lib/External/isl/include/isl/aff.h @@ -246,6 +246,8 @@ __isl_give isl_pw_aff *isl_pw_aff_project_domain_on_params( __isl_give isl_pw_aff *isl_pw_aff_align_params(__isl_take isl_pw_aff *pwaff, __isl_take isl_space *model); +__isl_give isl_pw_aff *isl_pw_aff_drop_unused_params( + __isl_take isl_pw_aff *pa); isl_bool isl_pw_aff_has_tuple_id(__isl_keep isl_pw_aff *pa, enum isl_dim_type type); @@ -486,6 +488,8 @@ __isl_null isl_pw_multi_aff *isl_pw_multi_aff_free( unsigned isl_pw_multi_aff_dim(__isl_keep isl_pw_multi_aff *pma, enum isl_dim_type type); +isl_bool isl_pw_multi_aff_involves_dims(__isl_keep isl_pw_multi_aff *pma, + enum isl_dim_type type, unsigned first, unsigned n); __isl_give isl_pw_aff *isl_pw_multi_aff_get_pw_aff( __isl_keep isl_pw_multi_aff *pma, int pos); __isl_give isl_pw_multi_aff *isl_pw_multi_aff_set_pw_aff( @@ -600,6 +604,8 @@ __isl_give isl_pw_multi_aff *isl_pw_multi_aff_project_domain_on_params( __isl_give isl_pw_multi_aff *isl_pw_multi_aff_align_params( __isl_take isl_pw_multi_aff *pma, __isl_take isl_space *model); +__isl_give isl_pw_multi_aff *isl_pw_multi_aff_drop_unused_params( + __isl_take isl_pw_multi_aff *pma); __isl_give isl_pw_multi_aff *isl_pw_multi_aff_coalesce( __isl_take isl_pw_multi_aff *pma); diff --git a/polly/lib/External/isl/include/isl/map.h b/polly/lib/External/isl/include/isl/map.h index e89b72b6054..cbfa8d67c7c 100644 --- a/polly/lib/External/isl/include/isl/map.h +++ b/polly/lib/External/isl/include/isl/map.h @@ -642,6 +642,9 @@ __isl_give isl_basic_map *isl_basic_map_align_params( __isl_take isl_basic_map *bmap, __isl_take isl_space *model); __isl_give isl_map *isl_map_align_params(__isl_take isl_map *map, __isl_take isl_space *model); +__isl_give isl_basic_map *isl_basic_map_drop_unused_params( + __isl_take isl_basic_map *bmap); +__isl_give isl_map *isl_map_drop_unused_params(__isl_take isl_map *map); __isl_give isl_mat *isl_basic_map_equalities_matrix( __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, diff --git a/polly/lib/External/isl/include/isl/polynomial.h b/polly/lib/External/isl/include/isl/polynomial.h index 72b015d2d46..80babc5ee3b 100644 --- a/polly/lib/External/isl/include/isl/polynomial.h +++ b/polly/lib/External/isl/include/isl/polynomial.h @@ -195,6 +195,9 @@ __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_split_dims( __isl_take isl_pw_qpolynomial *pwqp, enum isl_dim_type type, unsigned first, unsigned n); +__isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_drop_unused_params( + __isl_take isl_pw_qpolynomial *pwqp); + __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_add( __isl_take isl_pw_qpolynomial *pwqp1, __isl_take isl_pw_qpolynomial *pwqp2); @@ -423,6 +426,9 @@ __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_move_dims( enum isl_dim_type dst_type, unsigned dst_pos, enum isl_dim_type src_type, unsigned src_pos, unsigned n); +__isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_drop_unused_params( + __isl_take isl_pw_qpolynomial_fold *pwf); + __isl_give isl_val *isl_pw_qpolynomial_fold_eval( __isl_take isl_pw_qpolynomial_fold *pwf, __isl_take isl_point *pnt); diff --git a/polly/lib/External/isl/include/isl/set.h b/polly/lib/External/isl/include/isl/set.h index 02db2c928ce..407914ac589 100644 --- a/polly/lib/External/isl/include/isl/set.h +++ b/polly/lib/External/isl/include/isl/set.h @@ -482,6 +482,9 @@ __isl_give isl_basic_set *isl_basic_set_align_params( __isl_take isl_basic_set *bset, __isl_take isl_space *model); __isl_give isl_set *isl_set_align_params(__isl_take isl_set *set, __isl_take isl_space *model); +__isl_give isl_basic_set *isl_basic_set_drop_unused_params( + __isl_take isl_basic_set *bset); +__isl_give isl_set *isl_set_drop_unused_params(__isl_take isl_set *set); __isl_give isl_mat *isl_basic_set_equalities_matrix( __isl_keep isl_basic_set *bset, enum isl_dim_type c1, diff --git a/polly/lib/External/isl/isl_aff.c b/polly/lib/External/isl/isl_aff.c index c56f85e74c6..cb98e9bd23f 100644 --- a/polly/lib/External/isl/isl_aff.c +++ b/polly/lib/External/isl/isl_aff.c @@ -2716,10 +2716,9 @@ static __isl_give isl_set *align_params_pw_pw_set_and( goto error; if (equal_params) return fn(pwaff1, pwaff2); - if (!isl_space_has_named_params(pwaff1->dim) || - !isl_space_has_named_params(pwaff2->dim)) - isl_die(isl_pw_aff_get_ctx(pwaff1), isl_error_invalid, - "unaligned unnamed parameters", goto error); + if (isl_pw_aff_check_named_params(pwaff1) < 0 || + isl_pw_aff_check_named_params(pwaff2) < 0) + goto error; pwaff1 = isl_pw_aff_align_params(pwaff1, isl_pw_aff_get_space(pwaff2)); pwaff2 = isl_pw_aff_align_params(pwaff2, isl_pw_aff_get_space(pwaff1)); return fn(pwaff1, pwaff2); @@ -2746,10 +2745,9 @@ static __isl_give isl_map *align_params_pw_pw_map_and( goto error; if (equal_params) return fn(pa1, pa2); - if (!isl_space_has_named_params(pa1->dim) || - !isl_space_has_named_params(pa2->dim)) - isl_die(isl_pw_aff_get_ctx(pa1), isl_error_invalid, - "unaligned unnamed parameters", goto error); + if (isl_pw_aff_check_named_params(pa1) < 0 || + isl_pw_aff_check_named_params(pa2) < 0) + goto error; pa1 = isl_pw_aff_align_params(pa1, isl_pw_aff_get_space(pa2)); pa2 = isl_pw_aff_align_params(pa2, isl_pw_aff_get_space(pa1)); return fn(pa1, pa2); @@ -4287,7 +4285,6 @@ __isl_give isl_set *isl_multi_aff_lex_gt_set(__isl_take isl_multi_aff *ma1, #define NO_SUB #define NO_OPT -#define NO_INVOLVES_DIMS #define NO_INSERT_DIMS #define NO_LIFT #define NO_MORPH @@ -6257,10 +6254,9 @@ __isl_give isl_pw_multi_aff *isl_pw_multi_aff_set_pw_aff( goto error; if (equal_params) return pw_multi_aff_set_pw_aff(pma, pos, pa); - if (!isl_space_has_named_params(pma->dim) || - !isl_space_has_named_params(pa->dim)) - isl_die(isl_pw_multi_aff_get_ctx(pma), isl_error_invalid, - "unaligned unnamed parameters", goto error); + if (isl_pw_multi_aff_check_named_params(pma) < 0 || + isl_pw_aff_check_named_params(pa) < 0) + goto error; pma = isl_pw_multi_aff_align_params(pma, isl_pw_aff_get_space(pa)); pa = isl_pw_aff_align_params(pa, isl_pw_multi_aff_get_space(pma)); return pw_multi_aff_set_pw_aff(pma, pos, pa); diff --git a/polly/lib/External/isl/isl_aff_private.h b/polly/lib/External/isl/isl_aff_private.h index 6da0e024c35..22a9e17e561 100644 --- a/polly/lib/External/isl/isl_aff_private.h +++ b/polly/lib/External/isl/isl_aff_private.h @@ -162,6 +162,9 @@ __isl_give isl_pw_multi_aff *isl_pw_multi_aff_substitute( __isl_take isl_pw_multi_aff *pma, enum isl_dim_type type, unsigned pos, __isl_keep isl_pw_aff *subs); +isl_stat isl_pw_aff_check_named_params(__isl_keep isl_pw_aff *pa); +isl_stat isl_pw_multi_aff_check_named_params(__isl_keep isl_pw_multi_aff *pma); + isl_bool isl_pw_aff_matching_params(__isl_keep isl_pw_aff *pa, __isl_keep isl_space *space); isl_stat isl_pw_aff_check_match_domain_space(__isl_keep isl_pw_aff *pa, diff --git a/polly/lib/External/isl/isl_map.c b/polly/lib/External/isl/isl_map.c index f949248c49b..31945f5b09c 100644 --- a/polly/lib/External/isl/isl_map.c +++ b/polly/lib/External/isl/isl_map.c @@ -1349,6 +1349,14 @@ isl_stat isl_map_check_named_params(__isl_keep isl_map *map) return isl_space_check_named_params(isl_map_peek_space(map)); } +/* Check that "bmap" has only named parameters, reporting an error + * if it does not. + */ +static isl_stat isl_basic_map_check_named_params(__isl_keep isl_basic_map *bmap) +{ + return isl_space_check_named_params(isl_basic_map_peek_space(bmap)); +} + /* Check that "bmap1" and "bmap2" have the same parameters, * reporting an error if they do not. */ @@ -11760,9 +11768,8 @@ __isl_give isl_basic_map *isl_basic_map_align_params( if (!isl_space_has_named_params(model)) isl_die(ctx, isl_error_invalid, "model has unnamed parameters", goto error); - if (!isl_space_has_named_params(bmap->dim)) - isl_die(ctx, isl_error_invalid, - "relation has unnamed parameters", goto error); + if (isl_basic_map_check_named_params(bmap) < 0) + goto error; equal_params = isl_space_has_equal_params(bmap->dim, model); if (equal_params < 0) goto error; @@ -11832,6 +11839,69 @@ __isl_give isl_basic_set *isl_basic_set_align_params( return isl_basic_map_align_params(bset, model); } +/* Drop all parameters not referenced by "map". + */ +__isl_give isl_map *isl_map_drop_unused_params(__isl_take isl_map *map) +{ + int i; + + if (isl_map_check_named_params(map) < 0) + return isl_map_free(map); + + for (i = isl_map_dim(map, isl_dim_param) - 1; i >= 0; i--) { + isl_bool involves; + + involves = isl_map_involves_dims(map, isl_dim_param, i, 1); + if (involves < 0) + return isl_map_free(map); + if (!involves) + map = isl_map_project_out(map, isl_dim_param, i, 1); + } + + return map; +} + +/* Drop all parameters not referenced by "set". + */ +__isl_give isl_set *isl_set_drop_unused_params( + __isl_take isl_set *set) +{ + return set_from_map(isl_map_drop_unused_params(set_to_map(set))); +} + +/* Drop all parameters not referenced by "bmap". + */ +__isl_give isl_basic_map *isl_basic_map_drop_unused_params( + __isl_take isl_basic_map *bmap) +{ + int i; + + if (isl_basic_map_check_named_params(bmap) < 0) + return isl_basic_map_free(bmap); + + for (i = isl_basic_map_dim(bmap, isl_dim_param) - 1; i >= 0; i--) { + isl_bool involves; + + involves = isl_basic_map_involves_dims(bmap, + isl_dim_param, i, 1); + if (involves < 0) + return isl_basic_map_free(bmap); + if (!involves) + bmap = isl_basic_map_drop(bmap, isl_dim_param, i, 1); + } + + return bmap; +} + +/* Drop all parameters not referenced by "bset". + */ +__isl_give isl_basic_set *isl_basic_set_drop_unused_params( + __isl_take isl_basic_set *bset) +{ + return bset_from_bmap(isl_basic_map_drop_unused_params( + bset_to_bmap(bset))); +} + __isl_give isl_mat *isl_basic_map_equalities_matrix( __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, enum isl_dim_type c2, enum isl_dim_type c3, @@ -13369,9 +13439,8 @@ __isl_give isl_map *isl_map_preimage_pw_multi_aff(__isl_take isl_map *map, if (isl_map_check_named_params(map) < 0) goto error; - if (!isl_space_has_named_params(pma->dim)) - isl_die(map->ctx, isl_error_invalid, - "unaligned unnamed parameters", goto error); + if (isl_pw_multi_aff_check_named_params(pma) < 0) + goto error; map = isl_map_align_params(map, isl_pw_multi_aff_get_space(pma)); pma = isl_pw_multi_aff_align_params(pma, isl_map_get_space(map)); diff --git a/polly/lib/External/isl/isl_pw_templ.c b/polly/lib/External/isl/isl_pw_templ.c index ab19dd30e9e..6d09682aaec 100644 --- a/polly/lib/External/isl/isl_pw_templ.c +++ b/polly/lib/External/isl/isl_pw_templ.c @@ -300,6 +300,14 @@ error: return NULL; } +/* Check that "pw" has only named parameters, reporting an error + * if it does not. + */ +isl_stat FN(PW,check_named_params)(__isl_keep PW *pw) +{ + return isl_space_check_named_params(FN(PW,peek_space)(pw)); +} + /* Align the parameters of "pw" to those of "model". */ __isl_give PW *FN(PW,align_params)(__isl_take PW *pw, __isl_take isl_space *model) @@ -314,9 +322,8 @@ __isl_give PW *FN(PW,align_params)(__isl_take PW *pw, __isl_take isl_space *mode if (!isl_space_has_named_params(model)) isl_die(ctx, isl_error_invalid, "model has unnamed parameters", goto error); - if (!isl_space_has_named_params(pw->dim)) - isl_die(ctx, isl_error_invalid, - "input has unnamed parameters", goto error); + if (FN(PW,check_named_params)(pw) < 0) + goto error; equal_params = isl_space_has_equal_params(pw->dim, model); if (equal_params < 0) goto error; @@ -356,10 +363,9 @@ static __isl_give PW *FN(PW,align_params_pw_pw_and)(__isl_take PW *pw1, if (equal_params) return fn(pw1, pw2); ctx = FN(PW,get_ctx)(pw1); - if (!isl_space_has_named_params(pw1->dim) || - !isl_space_has_named_params(pw2->dim)) - isl_die(ctx, isl_error_invalid, - "unaligned unnamed parameters", goto error); + if (FN(PW,check_named_params)(pw1) < 0 || + FN(PW,check_named_params)(pw2) < 0) + goto error; pw1 = FN(PW,align_params)(pw1, FN(PW,get_space)(pw2)); pw2 = FN(PW,align_params)(pw2, FN(PW,get_space)(pw1)); return fn(pw1, pw2); @@ -384,8 +390,9 @@ static __isl_give PW *FN(PW,align_params_pw_set_and)(__isl_take PW *pw, if (aligned) return fn(pw, set); ctx = FN(PW,get_ctx)(pw); - if (!isl_space_has_named_params(pw->dim) || - !isl_space_has_named_params(set->dim)) + if (FN(PW,check_named_params)(pw) < 0) + goto error; + if (!isl_space_has_named_params(set->dim)) isl_die(ctx, isl_error_invalid, "unaligned unnamed parameters", goto error); pw = FN(PW,align_params)(pw, isl_set_get_space(set)); @@ -1141,7 +1148,6 @@ isl_ctx *FN(PW,get_ctx)(__isl_keep PW *pw) return pw ? isl_space_get_ctx(pw->dim) : NULL; } -#ifndef NO_INVOLVES_DIMS isl_bool FN(PW,involves_dims)(__isl_keep PW *pw, enum isl_dim_type type, unsigned first, unsigned n) { @@ -1167,7 +1173,6 @@ isl_bool FN(PW,involves_dims)(__isl_keep PW *pw, enum isl_dim_type type, } return isl_bool_false; } -#endif __isl_give PW *FN(PW,set_dim_name)(__isl_take PW *pw, enum isl_dim_type type, unsigned pos, const char *s) @@ -1201,7 +1206,6 @@ error: return NULL; } -#ifndef NO_DROP_DIMS __isl_give PW *FN(PW,drop_dims)(__isl_take PW *pw, enum isl_dim_type type, unsigned first, unsigned n) { @@ -1292,7 +1296,28 @@ __isl_give PW *FN(PW,project_domain_on_params)(__isl_take PW *pw) pw = FN(PW,reset_domain_space)(pw, space); return pw; } -#endif + +/* Drop all parameters not referenced by "pw". + */ +__isl_give PW *FN(PW,drop_unused_params)(__isl_take PW *pw) +{ + int i; + + if (FN(PW,check_named_params)(pw) < 0) + return FN(PW,free)(pw); + + for (i = FN(PW,dim)(pw, isl_dim_param) - 1; i >= 0; i--) { + isl_bool involves; + + involves = FN(PW,involves_dims)(pw, isl_dim_param, i, 1); + if (involves < 0) + return FN(PW,free)(pw); + if (!involves) + pw = FN(PW,drop_dims)(pw, isl_dim_param, i, 1); + } + + return pw; +} #ifndef NO_INSERT_DIMS __isl_give PW *FN(PW,insert_dims)(__isl_take PW *pw, enum isl_dim_type type, @@ -2073,8 +2098,9 @@ static __isl_give PW *FN(PW,align_params_pw_multi_aff_and)(__isl_take PW *pw, return fn(pw, ma); } ctx = FN(PW,get_ctx)(pw); - if (!isl_space_has_named_params(pw->dim) || - !isl_space_has_named_params(ma_space)) + if (FN(PW,check_named_params)(pw) < 0) + goto error; + if (!isl_space_has_named_params(ma_space)) isl_die(ctx, isl_error_invalid, "unaligned unnamed parameters", goto error); pw = FN(PW,align_params)(pw, ma_space); @@ -2107,10 +2133,9 @@ static __isl_give PW *FN(PW,align_params_pw_pw_multi_aff_and)(__isl_take PW *pw, return fn(pw, pma); } ctx = FN(PW,get_ctx)(pw); - if (!isl_space_has_named_params(pw->dim) || - !isl_space_has_named_params(pma_space)) - isl_die(ctx, isl_error_invalid, - "unaligned unnamed parameters", goto error); + if (FN(PW,check_named_params)(pw) < 0 || + isl_pw_multi_aff_check_named_params(pma) < 0) + goto error; pw = FN(PW,align_params)(pw, pma_space); pma = isl_pw_multi_aff_align_params(pma, FN(PW,get_space)(pw)); return fn(pw, pma); diff --git a/polly/lib/External/isl/isl_space.c b/polly/lib/External/isl/isl_space.c index e8797ff7557..e9e0054cd94 100644 --- a/polly/lib/External/isl/isl_space.c +++ b/polly/lib/External/isl/isl_space.c @@ -2546,7 +2546,7 @@ isl_stat isl_space_check_named_params(__isl_keep isl_space *space) return isl_stat_error; if (!named) isl_die(isl_space_get_ctx(space), isl_error_invalid, - "unaligned unnamed parameters", return isl_stat_error); + "unexpected unnamed parameters", return isl_stat_error); return isl_stat_ok; } diff --git a/polly/lib/External/isl/isl_test.c b/polly/lib/External/isl/isl_test.c index 63e84a7cba3..b8976821c73 100644 --- a/polly/lib/External/isl/isl_test.c +++ b/polly/lib/External/isl/isl_test.c @@ -7168,6 +7168,64 @@ int test_align_parameters(isl_ctx *ctx) return 0; } +/* Check that isl_*_drop_unused_params actually drops the unused parameters + * by comparing the result using isl_*_plain_is_equal. + * Note that this assumes that isl_*_plain_is_equal does not consider + * objects that only differ by unused parameters to be equal. + */ +int test_drop_unused_parameters(isl_ctx *ctx) +{ + const char *str_with, *str_without; + isl_basic_set *bset1, *bset2; + isl_set *set1, *set2; + isl_pw_aff *pwa1, *pwa2; + int equal; + + str_with = "[n, m, o] -> { [m] }"; + str_without = "[m] -> { [m] }"; + + bset1 = isl_basic_set_read_from_str(ctx, str_with); + bset2 = isl_basic_set_read_from_str(ctx, str_without); + bset1 = isl_basic_set_drop_unused_params(bset1); + equal = isl_basic_set_plain_is_equal(bset1, bset2); + isl_basic_set_free(bset1); + isl_basic_set_free(bset2); + + if (equal < 0) + return -1; + if (!equal) + isl_die(ctx, isl_error_unknown, + "result not as expected", return -1); + + set1 = isl_set_read_from_str(ctx, str_with); + set2 = isl_set_read_from_str(ctx, str_without); + set1 = isl_set_drop_unused_params(set1); + equal = isl_set_plain_is_equal(set1, set2); + isl_set_free(set1); + isl_set_free(set2); + + if (equal < 0) + return -1; + if (!equal) + isl_die(ctx, isl_error_unknown, + "result not as expected", return -1); + + pwa1 = isl_pw_aff_read_from_str(ctx, str_with); + pwa2 = isl_pw_aff_read_from_str(ctx, str_without); + pwa1 = isl_pw_aff_drop_unused_params(pwa1); + equal = isl_pw_aff_plain_is_equal(pwa1, pwa2); + isl_pw_aff_free(pwa1); + isl_pw_aff_free(pwa2); + + if (equal < 0) + return -1; + if (!equal) + isl_die(ctx, isl_error_unknown, + "result not as expected", return -1); + + return 0; +} + static int test_list(isl_ctx *ctx) { isl_id *a, *b, *c, *d, *id; @@ -8908,6 +8966,7 @@ struct { { "conversion", &test_conversion }, { "list", &test_list }, { "align parameters", &test_align_parameters }, + { "drop unused parameters", &test_drop_unused_parameters }, { "preimage", &test_preimage }, { "pullback", &test_pullback }, { "AST", &test_ast }, |