From f18db96be9c24b3a9dec77091683ef31477304a5 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Mon, 23 Oct 2017 17:04:19 +0200 Subject: [PATCH] generalize isl_multi_union_pw_aff_multi_aff_on_domain to take isl_pw_multi_aff Signed-off-by: Sven Verdoolaege --- doc/user.pod | 6 +++++- include/isl/aff.h | 3 +++ isl_aff.c | 63 ++++++++++++++++++++++++++++++++++--------------------- 3 files changed, 47 insertions(+), 25 deletions(-) diff --git a/doc/user.pod b/doc/user.pod index 262d4e83..32d453fd 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -2851,7 +2851,7 @@ function. Similarly, a multiple union piecewise affine expression can be created from a multiple value with a given domain or -a multiple affine expression with a given domain +a (piecewise) multiple affine expression with a given domain using the following functions. #include @@ -2863,6 +2863,10 @@ using the following functions. isl_multi_union_pw_aff_multi_aff_on_domain( __isl_take isl_union_set *domain, __isl_take isl_multi_aff *ma); + __isl_give isl_multi_union_pw_aff * + isl_multi_union_pw_aff_pw_multi_aff_on_domain( + __isl_take isl_union_set *domain, + __isl_take isl_pw_multi_aff *pma); Multiple expressions can be copied and freed using the following functions. diff --git a/include/isl/aff.h b/include/isl/aff.h index 0d8898f4..2a87a5d1 100644 --- a/include/isl/aff.h +++ b/include/isl/aff.h @@ -963,6 +963,9 @@ __isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_multi_val_on_domain( __isl_take isl_union_set *domain, __isl_take isl_multi_val *mv); __isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_multi_aff_on_domain( __isl_take isl_union_set *domain, __isl_take isl_multi_aff *ma); +__isl_give isl_multi_union_pw_aff * +isl_multi_union_pw_aff_pw_multi_aff_on_domain(__isl_take isl_union_set *domain, + __isl_take isl_pw_multi_aff *pma); __isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_floor( __isl_take isl_multi_union_pw_aff *mupa); diff --git a/isl_aff.c b/isl_aff.c index fb7806c5..fab1a6ce 100644 --- a/isl_aff.c +++ b/isl_aff.c @@ -8299,65 +8299,80 @@ error: } /* Return a multiple union piecewise affine expression - * that is equal to "ma" on "domain", assuming "domain" and "ma" + * that is equal to "ma" on "domain". + */ +__isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_multi_aff_on_domain( + __isl_take isl_union_set *domain, __isl_take isl_multi_aff *ma) +{ + isl_pw_multi_aff *pma; + + pma = isl_pw_multi_aff_from_multi_aff(ma); + return isl_multi_union_pw_aff_pw_multi_aff_on_domain(domain, pma); +} + +/* Return a multiple union piecewise affine expression + * that is equal to "pma" on "domain", assuming "domain" and "pma" * have been aligned. */ static __isl_give isl_multi_union_pw_aff * -isl_multi_union_pw_aff_multi_aff_on_domain_aligned( - __isl_take isl_union_set *domain, __isl_take isl_multi_aff *ma) +isl_multi_union_pw_aff_pw_multi_aff_on_domain_aligned( + __isl_take isl_union_set *domain, __isl_take isl_pw_multi_aff *pma) { int i, n; isl_space *space; isl_multi_union_pw_aff *mupa; - if (!domain || !ma) + if (!domain || !pma) goto error; - n = isl_multi_aff_dim(ma, isl_dim_set); - space = isl_multi_aff_get_space(ma); + n = isl_pw_multi_aff_dim(pma, isl_dim_set); + space = isl_pw_multi_aff_get_space(pma); mupa = isl_multi_union_pw_aff_alloc(space); for (i = 0; i < n; ++i) { - isl_aff *aff; + isl_pw_aff *pa; isl_union_pw_aff *upa; - aff = isl_multi_aff_get_aff(ma, i); - upa = isl_union_pw_aff_aff_on_domain(isl_union_set_copy(domain), - aff); + pa = isl_pw_multi_aff_get_pw_aff(pma, i); + upa = isl_union_pw_aff_pw_aff_on_domain( + isl_union_set_copy(domain), pa); mupa = isl_multi_union_pw_aff_set_union_pw_aff(mupa, i, upa); } isl_union_set_free(domain); - isl_multi_aff_free(ma); + isl_pw_multi_aff_free(pma); return mupa; error: isl_union_set_free(domain); - isl_multi_aff_free(ma); + isl_pw_multi_aff_free(pma); return NULL; } /* Return a multiple union piecewise affine expression - * that is equal to "ma" on "domain". + * that is equal to "pma" on "domain". */ -__isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_multi_aff_on_domain( - __isl_take isl_union_set *domain, __isl_take isl_multi_aff *ma) +__isl_give isl_multi_union_pw_aff * +isl_multi_union_pw_aff_pw_multi_aff_on_domain(__isl_take isl_union_set *domain, + __isl_take isl_pw_multi_aff *pma) { isl_bool equal_params; + isl_space *space; - if (!ma) - goto error; - equal_params = isl_union_set_space_has_equal_params(domain, ma->space); + space = isl_pw_multi_aff_peek_space(pma); + equal_params = isl_union_set_space_has_equal_params(domain, space); if (equal_params < 0) goto error; if (equal_params) - return isl_multi_union_pw_aff_multi_aff_on_domain_aligned( - domain, ma); + return isl_multi_union_pw_aff_pw_multi_aff_on_domain_aligned( + domain, pma); domain = isl_union_set_align_params(domain, - isl_multi_aff_get_space(ma)); - ma = isl_multi_aff_align_params(ma, isl_union_set_get_space(domain)); - return isl_multi_union_pw_aff_multi_aff_on_domain_aligned(domain, ma); + isl_pw_multi_aff_get_space(pma)); + pma = isl_pw_multi_aff_align_params(pma, + isl_union_set_get_space(domain)); + return isl_multi_union_pw_aff_pw_multi_aff_on_domain_aligned(domain, + pma); error: isl_union_set_free(domain); - isl_multi_aff_free(ma); + isl_pw_multi_aff_free(pma); return NULL; } -- 2.11.4.GIT