add isl_pw_aff_scale_down_val
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 23 Apr 2013 19:52:32 +0000 (21:52 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Tue, 28 May 2013 16:27:12 +0000 (18:27 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/aff.h
isl_aff.c

index f5396fe..dbbfc8d 100644 (file)
@@ -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_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);
 
        __isl_give isl_pw_aff *isl_pw_aff_list_min(
                __isl_take isl_pw_aff_list *list);
index 4af9657..cb2d3da 100644 (file)
@@ -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_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);
 
 __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);
index 51f95c8..d9f0f71 100644 (file)
--- 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;
 }
 
        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;
 __isl_give isl_pw_aff *isl_pw_aff_floor(__isl_take isl_pw_aff *pwaff)
 {
        int i;