diff options
Diffstat (limited to 'polly/lib/External/isl/isl_pw_pullback_templ.c')
-rw-r--r-- | polly/lib/External/isl/isl_pw_pullback_templ.c | 23 |
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); |