summaryrefslogtreecommitdiff
path: root/polly/lib/External/isl/isl_pw_pullback_templ.c
diff options
context:
space:
mode:
Diffstat (limited to 'polly/lib/External/isl/isl_pw_pullback_templ.c')
-rw-r--r--polly/lib/External/isl/isl_pw_pullback_templ.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/polly/lib/External/isl/isl_pw_pullback_templ.c b/polly/lib/External/isl/isl_pw_pullback_templ.c
index 6f1bda9a6b94..5486061edd72 100644
--- a/polly/lib/External/isl/isl_pw_pullback_templ.c
+++ b/polly/lib/External/isl/isl_pw_pullback_templ.c
@@ -36,26 +36,29 @@ __isl_give PW *FN(PW,pullback_multi_aff)(__isl_take PW *pw,
__isl_take isl_multi_aff *ma)
{
int i;
+ isl_size n;
isl_space *space = NULL;
FN(PW,align_params_multi_aff)(&pw, &ma);
ma = isl_multi_aff_align_divs(ma);
- pw = FN(PW,cow)(pw);
- if (!pw || !ma)
+ n = FN(PW,n_piece)(pw);
+ if (n < 0 || !ma)
goto error;
space = isl_space_join(isl_multi_aff_get_space(ma),
FN(PW,get_space)(pw));
- for (i = 0; i < pw->n; ++i) {
- pw->p[i].set = isl_set_preimage_multi_aff(pw->p[i].set,
- isl_multi_aff_copy(ma));
- if (!pw->p[i].set)
- goto error;
- pw->p[i].FIELD = FN(EL,pullback_multi_aff)(pw->p[i].FIELD,
+ for (i = 0; i < n; ++i) {
+ isl_set *domain;
+ EL *el;
+
+ domain = FN(PW,take_domain_at)(pw, i);
+ domain = isl_set_preimage_multi_aff(domain,
isl_multi_aff_copy(ma));
- if (!pw->p[i].FIELD)
- goto error;
+ pw = FN(PW,restore_domain_at)(pw, i, domain);
+ el = FN(PW,take_base_at)(pw, i);
+ el = FN(EL,pullback_multi_aff)(el, isl_multi_aff_copy(ma));
+ pw = FN(PW,restore_base_at)(pw, i, el);
}
pw = FN(PW,reset_space)(pw, space);