diff options
Diffstat (limited to 'polly/lib/External/isl/isl_pw_templ.c')
-rw-r--r-- | polly/lib/External/isl/isl_pw_templ.c | 63 |
1 files changed, 44 insertions, 19 deletions
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); |