From e191c804b86c9d7fccd8f6af8840baeb581c99f9 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Thu, 9 May 2013 12:05:19 +0200 Subject: [PATCH] add isl_aff_scale_val Signed-off-by: Sven Verdoolaege --- doc/user.pod | 2 ++ include/isl/aff.h | 2 ++ isl_aff.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index 40a5393..86fbe7e 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -3787,6 +3787,8 @@ Operations include __isl_take isl_pw_aff *pwaff, isl_int mod); __isl_give isl_aff *isl_aff_scale(__isl_take isl_aff *aff, isl_int f); + __isl_give isl_aff *isl_aff_scale_val(__isl_take isl_aff *aff, + __isl_take isl_val *v); __isl_give isl_pw_aff *isl_pw_aff_scale( __isl_take isl_pw_aff *pwaff, isl_int f); __isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, diff --git a/include/isl/aff.h b/include/isl/aff.h index f15ee66..115c85f 100644 --- a/include/isl/aff.h +++ b/include/isl/aff.h @@ -96,6 +96,8 @@ __isl_give isl_aff *isl_aff_sub(__isl_take isl_aff *aff1, __isl_take isl_aff *aff2); __isl_give isl_aff *isl_aff_scale(__isl_take isl_aff *aff, isl_int f); +__isl_give isl_aff *isl_aff_scale_val(__isl_take isl_aff *aff, + __isl_take isl_val *v); __isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, isl_int f); __isl_give isl_aff *isl_aff_scale_down_ui(__isl_take isl_aff *aff, unsigned f); diff --git a/isl_aff.c b/isl_aff.c index 45fa93e..b7dc28a 100644 --- a/isl_aff.c +++ b/isl_aff.c @@ -1516,6 +1516,34 @@ __isl_give isl_aff *isl_aff_scale(__isl_take isl_aff *aff, isl_int f) return aff; } +/* Multiple "aff" by "v". + */ +__isl_give isl_aff *isl_aff_scale_val(__isl_take isl_aff *aff, + __isl_take isl_val *v) +{ + if (!aff || !v) + goto error; + + if (isl_val_is_one(v)) { + isl_val_free(v); + return aff; + } + + if (!isl_val_is_rat(v)) + isl_die(isl_aff_get_ctx(aff), isl_error_invalid, + "expecting rational factor", goto error); + + aff = isl_aff_scale(aff, v->n); + aff = isl_aff_scale_down(aff, v->d); + + isl_val_free(v); + return aff; +error: + isl_aff_free(aff); + isl_val_free(v); + return NULL; +} + __isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, isl_int f) { isl_int gcd; -- 2.7.4