From 283c13f6fc7359d720395a20cdac80ad4a6b4bb2 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Wed, 8 Jan 2014 21:44:30 +0100 Subject: [PATCH] add isl_multi_union_pw_aff_pullback_union_pw_multi_aff Signed-off-by: Sven Verdoolaege --- doc/user.pod | 4 ++++ include/isl/aff.h | 5 +++++ isl_aff.c | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index 900b4079..d289410d 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -5787,6 +5787,10 @@ into the set description or into the domain/range of the map. isl_union_pw_multi_aff_pullback_union_pw_multi_aff( __isl_take isl_union_pw_multi_aff *upma1, __isl_take isl_union_pw_multi_aff *upma2); + __isl_give isl_multi_union_pw_aff * + isl_multi_union_pw_aff_pullback_union_pw_multi_aff( + __isl_take isl_multi_union_pw_aff *mupa, + __isl_take isl_union_pw_multi_aff *upma); These functions precompose the first expression by the second function. In other words, the second function is plugged diff --git a/include/isl/aff.h b/include/isl/aff.h index 2471e53f..ab1167d2 100644 --- a/include/isl/aff.h +++ b/include/isl/aff.h @@ -850,6 +850,11 @@ __isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_apply_pw_multi_aff( __isl_take isl_multi_union_pw_aff *mupa, __isl_take isl_pw_multi_aff *pma); +__isl_give isl_multi_union_pw_aff * +isl_multi_union_pw_aff_pullback_union_pw_multi_aff( + __isl_take isl_multi_union_pw_aff *mupa, + __isl_take isl_union_pw_multi_aff *upma); + __isl_give isl_union_pw_multi_aff * isl_union_pw_multi_aff_from_multi_union_pw_aff( __isl_take isl_multi_union_pw_aff *mupa); diff --git a/isl_aff.c b/isl_aff.c index 0d0c12ba..3767f50c 100644 --- a/isl_aff.c +++ b/isl_aff.c @@ -8324,3 +8324,41 @@ error: isl_pw_multi_aff_free(pma); return NULL; } + +/* Compute the pullback of "mupa" by the function represented by "upma". + * In other words, plug in "upma" in "mupa". The result contains + * expressions defined over the domain space of "upma". + * + * Run over all elements of "mupa" and plug in "upma" in each of them. + */ +__isl_give isl_multi_union_pw_aff * +isl_multi_union_pw_aff_pullback_union_pw_multi_aff( + __isl_take isl_multi_union_pw_aff *mupa, + __isl_take isl_union_pw_multi_aff *upma) +{ + int i, n; + + mupa = isl_multi_union_pw_aff_align_params(mupa, + isl_union_pw_multi_aff_get_space(upma)); + upma = isl_union_pw_multi_aff_align_params(upma, + isl_multi_union_pw_aff_get_space(mupa)); + if (!mupa || !upma) + goto error; + + n = isl_multi_union_pw_aff_dim(mupa, isl_dim_set); + for (i = 0; i < n; ++i) { + isl_union_pw_aff *upa; + + upa = isl_multi_union_pw_aff_get_union_pw_aff(mupa, i); + upa = isl_union_pw_aff_pullback_union_pw_multi_aff(upa, + isl_union_pw_multi_aff_copy(upma)); + mupa = isl_multi_union_pw_aff_set_union_pw_aff(mupa, i, upa); + } + + isl_union_pw_multi_aff_free(upma); + return mupa; +error: + isl_multi_union_pw_aff_free(mupa); + isl_union_pw_multi_aff_free(upma); + return NULL; +} -- 2.11.4.GIT