summaryrefslogtreecommitdiffstats
path: root/polly/lib/External/isl/isl_pw_templ.c
diff options
context:
space:
mode:
Diffstat (limited to 'polly/lib/External/isl/isl_pw_templ.c')
-rw-r--r--polly/lib/External/isl/isl_pw_templ.c63
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);
OpenPOWER on IntegriCloud