From 032e76d36482f20537e3d0a9e98c04ee8c2b3499 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sat, 25 Aug 2012 10:50:52 +0200 Subject: [PATCH] generalize isl_multi_aff_identity Signed-off-by: Sven Verdoolaege --- isl_aff.c | 51 --------------------------------------------------- isl_multi_templ.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 51 deletions(-) diff --git a/isl_aff.c b/isl_aff.c index 9939b93b..5affddc2 100644 --- a/isl_aff.c +++ b/isl_aff.c @@ -2548,57 +2548,6 @@ __isl_give isl_multi_aff *isl_multi_aff_zero(__isl_take isl_space *space) return ma; } -/* Create an isl_multi_aff in the given space that maps each - * input dimension to the corresponding output dimension. - */ -__isl_give isl_multi_aff *isl_multi_aff_identity(__isl_take isl_space *space) -{ - int n; - isl_multi_aff *ma; - - if (!space) - return NULL; - - if (isl_space_is_set(space)) - isl_die(isl_space_get_ctx(space), isl_error_invalid, - "expecting map space", goto error); - - n = isl_space_dim(space, isl_dim_out); - if (n != isl_space_dim(space, isl_dim_in)) - isl_die(isl_space_get_ctx(space), isl_error_invalid, - "number of input and output dimensions needs to be " - "the same", goto error); - - ma = isl_multi_aff_alloc(isl_space_copy(space)); - - if (!n) - isl_space_free(space); - else { - int i; - isl_local_space *ls; - isl_aff *aff; - - space = isl_space_domain(space); - ls = isl_local_space_from_space(space); - aff = isl_aff_zero_on_domain(ls); - - for (i = 0; i < n; ++i) { - isl_aff *aff_i; - aff_i = isl_aff_copy(aff); - aff_i = isl_aff_add_coefficient_si(aff_i, - isl_dim_in, i, 1); - ma = isl_multi_aff_set_aff(ma, i, aff_i); - } - - isl_aff_free(aff); - } - - return ma; -error: - isl_space_free(space); - return NULL; -} - /* Create an isl_pw_multi_aff with the given isl_multi_aff on a universe * domain. */ diff --git a/isl_multi_templ.c b/isl_multi_templ.c index d0b62cbc..8ecd8928 100644 --- a/isl_multi_templ.c +++ b/isl_multi_templ.c @@ -409,3 +409,50 @@ error: FN(LIST(EL),free)(list); return NULL; } + +/* Create a multi expression in the given space that maps each + * input dimension to the corresponding output dimension. + */ +__isl_give MULTI(BASE) *FN(MULTI(BASE),identity)(__isl_take isl_space *space) +{ + int i, n; + isl_local_space *ls; + MULTI(BASE) *multi; + + if (!space) + return NULL; + + if (isl_space_is_set(space)) + isl_die(isl_space_get_ctx(space), isl_error_invalid, + "expecting map space", goto error); + + n = isl_space_dim(space, isl_dim_out); + if (n != isl_space_dim(space, isl_dim_in)) + isl_die(isl_space_get_ctx(space), isl_error_invalid, + "number of input and output dimensions needs to be " + "the same", goto error); + + multi = FN(MULTI(BASE),alloc)(isl_space_copy(space)); + + if (!n) { + isl_space_free(space); + return multi; + } + + space = isl_space_domain(space); + ls = isl_local_space_from_space(space); + + for (i = 0; i < n; ++i) { + EL *el; + el = FN(EL,var_on_domain)(isl_local_space_copy(ls), + isl_dim_set, i); + multi = FN(FN(MULTI(BASE),set),BASE)(multi, i, el); + } + + isl_local_space_free(ls); + + return multi; +error: + isl_space_free(space); + return NULL; +} -- 2.11.4.GIT