summaryrefslogtreecommitdiff
path: root/polly/lib/External/isl/isl_multi_apply_templ.c
diff options
context:
space:
mode:
Diffstat (limited to 'polly/lib/External/isl/isl_multi_apply_templ.c')
-rw-r--r--polly/lib/External/isl/isl_multi_apply_templ.c21
1 files changed, 8 insertions, 13 deletions
diff --git a/polly/lib/External/isl/isl_multi_apply_templ.c b/polly/lib/External/isl/isl_multi_apply_templ.c
index 870f2676c423..31e27f26fb41 100644
--- a/polly/lib/External/isl/isl_multi_apply_templ.c
+++ b/polly/lib/External/isl/isl_multi_apply_templ.c
@@ -19,24 +19,19 @@ __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),apply_aligned),APPLY_DOMBASE)(
__isl_take MULTI(BASE) *multi, __isl_take APPLY_DOM *set,
__isl_give EL *(*fn)(EL *el, __isl_take APPLY_DOM *set))
{
+ isl_size n;
int i;
- if (!multi || !set)
+ n = FN(MULTI(BASE),size)(multi);
+ if (n < 0 || !set)
goto error;
- if (multi->n == 0) {
- FN(APPLY_DOM,free)(set);
- return multi;
- }
-
- multi = FN(MULTI(BASE),cow)(multi);
- if (!multi)
- goto error;
+ for (i = 0; i < n; ++i) {
+ EL *el;
- for (i = 0; i < multi->n; ++i) {
- multi->u.p[i] = fn(multi->u.p[i], FN(APPLY_DOM,copy)(set));
- if (!multi->u.p[i])
- goto error;
+ el = FN(MULTI(BASE),take_at)(multi, i);
+ el = fn(el, FN(APPLY_DOM,copy)(set));
+ multi = FN(MULTI(BASE),restore_at)(multi, i, el);
}
FN(APPLY_DOM,free)(set);