From 3891807336ad46a1473c50e67a9abccfdf867806 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Tue, 23 Apr 2013 21:52:32 +0200 Subject: [PATCH] add isl_pw_aff_scale_down_val Signed-off-by: Sven Verdoolaege --- doc/user.pod | 3 +++ include/isl/aff.h | 2 ++ isl_aff.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index f5396fe..dbbfc8d 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -3806,6 +3806,9 @@ Operations include __isl_take isl_aff *aff, __isl_take isl_val *v); __isl_give isl_pw_aff *isl_pw_aff_scale_down( __isl_take isl_pw_aff *pwaff, isl_int f); + __isl_give isl_pw_aff *isl_pw_aff_scale_down_val( + __isl_take isl_pw_aff *pa, + __isl_take isl_val *f); __isl_give isl_pw_aff *isl_pw_aff_list_min( __isl_take isl_pw_aff_list *list); diff --git a/include/isl/aff.h b/include/isl/aff.h index 4af9657..cb2d3da 100644 --- a/include/isl/aff.h +++ b/include/isl/aff.h @@ -227,6 +227,8 @@ __isl_give isl_pw_aff *isl_pw_aff_scale_val(__isl_take isl_pw_aff *pa, __isl_take isl_val *v); __isl_give isl_pw_aff *isl_pw_aff_scale_down(__isl_take isl_pw_aff *pwaff, isl_int f); +__isl_give isl_pw_aff *isl_pw_aff_scale_down_val(__isl_take isl_pw_aff *pa, + __isl_take isl_val *f); __isl_give isl_pw_aff *isl_pw_aff_insert_dims(__isl_take isl_pw_aff *pwaff, enum isl_dim_type type, unsigned first, unsigned n); diff --git a/isl_aff.c b/isl_aff.c index 51f95c8..d9f0f71 100644 --- a/isl_aff.c +++ b/isl_aff.c @@ -2613,6 +2613,49 @@ __isl_give isl_pw_aff *isl_pw_aff_scale_down(__isl_take isl_pw_aff *pwaff, return pwaff; } +/* Divide "pa" by "f". + */ +__isl_give isl_pw_aff *isl_pw_aff_scale_down_val(__isl_take isl_pw_aff *pa, + __isl_take isl_val *f) +{ + int i; + + if (!pa || !f) + goto error; + + if (isl_val_is_one(f)) { + isl_val_free(f); + return pa; + } + + if (!isl_val_is_rat(f)) + isl_die(isl_pw_aff_get_ctx(pa), isl_error_invalid, + "expecting rational factor", goto error); + if (!isl_val_is_pos(f)) + isl_die(isl_pw_aff_get_ctx(pa), isl_error_invalid, + "factor needs to be positive", goto error); + + pa = isl_pw_aff_cow(pa); + if (!pa) + return NULL; + if (pa->n == 0) + return pa; + + for (i = 0; i < pa->n; ++i) { + pa->p[i].aff = isl_aff_scale_down_val(pa->p[i].aff, + isl_val_copy(f)); + if (!pa->p[i].aff) + goto error; + } + + isl_val_free(f); + return pa; +error: + isl_pw_aff_free(pa); + isl_val_free(f); + return NULL; +} + __isl_give isl_pw_aff *isl_pw_aff_floor(__isl_take isl_pw_aff *pwaff) { int i; -- 2.7.4