From 12c3dd8d05141e072695d2152e9fc013d4be12ac Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Thu, 28 Aug 2014 15:04:11 +0200 Subject: [PATCH] generalize isl_multi_aff_floor to isl_multi_union_pw_aff_floor Signed-off-by: Sven Verdoolaege --- Makefile.am | 1 + doc/user.pod | 3 +++ include/isl/aff.h | 3 +++ isl_aff.c | 21 ++------------------- isl_multi_floor.c | 29 +++++++++++++++++++++++++++++ 5 files changed, 38 insertions(+), 19 deletions(-) create mode 100644 isl_multi_floor.c diff --git a/Makefile.am b/Makefile.am index 13d7fb21..1195527d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -289,6 +289,7 @@ EXTRA_DIST = \ isl_multi_apply_templ.c \ isl_multi_apply_set.c \ isl_multi_apply_union_set.c \ + isl_multi_floor.c \ isl_multi_gist.c \ isl_multi_intersect.c \ print_templ.c \ diff --git a/doc/user.pod b/doc/user.pod index e9bb2a5e..b9f036b8 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -5075,6 +5075,9 @@ All parameters need to be named. __isl_take isl_pw_aff *pwaff); __isl_give isl_union_pw_aff *isl_union_pw_aff_floor( __isl_take isl_union_pw_aff *upa); + __isl_give isl_multi_union_pw_aff * + isl_multi_union_pw_aff_floor( + __isl_take isl_multi_union_pw_aff *mupa); #include __isl_give isl_pw_aff *isl_pw_aff_list_min( diff --git a/include/isl/aff.h b/include/isl/aff.h index 295058d3..86918abe 100644 --- a/include/isl/aff.h +++ b/include/isl/aff.h @@ -823,6 +823,9 @@ __isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_multi_val_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_floor( + __isl_take isl_multi_union_pw_aff *mupa); + __isl_give isl_multi_union_pw_aff *isl_multi_union_pw_aff_intersect_domain( __isl_take isl_multi_union_pw_aff *mupa, __isl_take isl_union_set *uset); diff --git a/isl_aff.c b/isl_aff.c index 1211c59c..f7048e62 100644 --- a/isl_aff.c +++ b/isl_aff.c @@ -3624,6 +3624,7 @@ error: #include #include +#include #include #undef NO_DOMAIN @@ -3875,25 +3876,6 @@ error: return NULL; } -/* Given f, return floor(f). - */ -__isl_give isl_multi_aff *isl_multi_aff_floor(__isl_take isl_multi_aff *ma) -{ - int i; - - ma = isl_multi_aff_cow(ma); - if (!ma) - return NULL; - - for (i = 0; i < ma->n; ++i) { - ma->p[i] = isl_aff_floor(ma->p[i]); - if (!ma->p[i]) - return isl_multi_aff_free(ma); - } - - return ma; -} - __isl_give isl_multi_aff *isl_multi_aff_scale(__isl_take isl_multi_aff *maff, isl_int f) { @@ -7470,6 +7452,7 @@ error: #include #include #include +#include #include #include diff --git a/isl_multi_floor.c b/isl_multi_floor.c new file mode 100644 index 00000000..d869e65e --- /dev/null +++ b/isl_multi_floor.c @@ -0,0 +1,29 @@ +/* + * Copyright 2014 Ecole Normale Superieure + * + * Use of this software is governed by the MIT license + * + * Written by Sven Verdoolaege, + * Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France + */ + +#include + +/* Given f, return floor(f). + */ +__isl_give MULTI(BASE) *FN(MULTI(BASE),floor)(__isl_take MULTI(BASE) *multi) +{ + int i; + + multi = FN(MULTI(BASE),cow)(multi); + if (!multi) + return NULL; + + for (i = 0; i < multi->n; ++i) { + multi->p[i] = FN(EL,floor)(multi->p[i]); + if (!multi->p[i]) + return FN(MULTI(BASE),free)(multi); + } + + return multi; +} -- 2.11.4.GIT