add isl_pw_aff_scale_down
authorSven Verdoolaege <skimo@kotnet.org>
Sat, 9 Jul 2011 09:41:45 +0000 (11:41 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sat, 9 Jul 2011 14:14:53 +0000 (16:14 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/aff.h
isl_aff.c

index 899aa6e..97ba693 100644 (file)
@@ -2361,6 +2361,8 @@ Operations include
                isl_int f);
        __isl_give isl_aff *isl_aff_scale_down_ui(
                __isl_take isl_aff *aff, unsigned f);
+       __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_coalesce(
                __isl_take isl_pw_aff *pwqp);
index 06ec8a2..44e01e6 100644 (file)
@@ -111,6 +111,9 @@ __isl_give isl_pw_aff *isl_pw_aff_add(__isl_take isl_pw_aff *pwaff1,
        __isl_take isl_pw_aff *pwaff2);
 __isl_give isl_pw_aff *isl_pw_aff_neg(__isl_take isl_pw_aff *pwaff);
 
+__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_insert_dims(__isl_take isl_pw_aff *pwaff,
        enum isl_dim_type type, unsigned first, unsigned n);
 __isl_give isl_pw_aff *isl_pw_aff_add_dims(__isl_take isl_pw_aff *pwaff,
index 6fab5b0..ffca874 100644 (file)
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -1206,3 +1206,29 @@ __isl_give isl_set *isl_pw_aff_lt_set(__isl_take isl_pw_aff *pwaff1,
 {
        return isl_pw_aff_gt_set(pwaff2, pwaff1);
 }
+
+__isl_give isl_pw_aff *isl_pw_aff_scale_down(__isl_take isl_pw_aff *pwaff,
+       isl_int v)
+{
+       int i;
+
+       if (isl_int_is_one(v))
+               return pwaff;
+       if (!isl_int_is_pos(v))
+               isl_die(isl_pw_aff_get_ctx(pwaff), isl_error_invalid,
+                       "factor needs to be positive",
+                       return isl_pw_aff_free(pwaff));
+       pwaff = isl_pw_aff_cow(pwaff);
+       if (!pwaff)
+               return NULL;
+       if (pwaff->n == 0)
+               return pwaff;
+
+       for (i = 0; i < pwaff->n; ++i) {
+               pwaff->p[i].aff = isl_aff_scale_down(pwaff->p[i].aff, v);
+               if (!pwaff->p[i].aff)
+                       return isl_pw_aff_free(pwaff);
+       }
+
+       return pwaff;
+}