add isl_aff_scale_down_val
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 23 Apr 2013 19:41:58 +0000 (21:41 +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 86fbe7e..2a15f99 100644 (file)
@@ -3795,6 +3795,8 @@ Operations include
                isl_int f);
        __isl_give isl_aff *isl_aff_scale_down_ui(
                __isl_take isl_aff *aff, unsigned f);
                isl_int f);
        __isl_give isl_aff *isl_aff_scale_down_ui(
                __isl_take isl_aff *aff, unsigned f);
+       __isl_give isl_aff *isl_aff_scale_down_val(
+               __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(
                __isl_take isl_pw_aff *pwaff, isl_int f);
 
index 115c85f..77114e3 100644 (file)
@@ -100,6 +100,8 @@ __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);
        __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);
+__isl_give isl_aff *isl_aff_scale_down_val(__isl_take isl_aff *aff,
+       __isl_take isl_val *v);
 
 __isl_give isl_aff *isl_aff_insert_dims(__isl_take isl_aff *aff,
        enum isl_dim_type type, unsigned first, unsigned n);
 
 __isl_give isl_aff *isl_aff_insert_dims(__isl_take isl_aff *aff,
        enum isl_dim_type type, unsigned first, unsigned n);
index b7dc28a..13060f0 100644 (file)
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -1574,6 +1574,37 @@ __isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, isl_int f)
        return aff;
 }
 
        return aff;
 }
 
+/* Divide "aff" by "v".
+ */
+__isl_give isl_aff *isl_aff_scale_down_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);
+       if (!isl_val_is_pos(v))
+               isl_die(isl_aff_get_ctx(aff), isl_error_invalid,
+                       "factor needs to be positive", goto error);
+
+       aff = isl_aff_scale(aff, v->d);
+       aff = isl_aff_scale_down(aff, v->n);
+
+       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_ui(__isl_take isl_aff *aff, unsigned f)
 {
        isl_int v;
 __isl_give isl_aff *isl_aff_scale_down_ui(__isl_take isl_aff *aff, unsigned f)
 {
        isl_int v;