add isl_map_floordiv_val
authorSven Verdoolaege <skimo@kotnet.org>
Sun, 14 Apr 2013 16:44:23 +0000 (18:44 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Tue, 28 May 2013 18:42:48 +0000 (20:42 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
include/isl/map.h
isl_map.c

index 0edc520..421c8bc 100644 (file)
@@ -232,6 +232,8 @@ struct isl_basic_map *isl_basic_map_floordiv(struct isl_basic_map *bmap,
 struct isl_map *isl_map_sum(struct isl_map *map1, struct isl_map *map2);
 struct isl_map *isl_map_neg(struct isl_map *map);
 struct isl_map *isl_map_floordiv(struct isl_map *map, isl_int d);
+__isl_give isl_map *isl_map_floordiv_val(__isl_take isl_map *map,
+       __isl_take isl_val *d);
 
 __isl_export
 int isl_basic_map_is_equal(
index f1d02bf..164e075 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -3852,6 +3852,26 @@ error:
        return NULL;
 }
 
+/* Given a map A -> f(A) and an integer d, construct a map
+ * A -> floor(f(A)/d).
+ */
+__isl_give isl_map *isl_map_floordiv_val(__isl_take isl_map *map,
+       __isl_take isl_val *d)
+{
+       if (!map || !d)
+               goto error;
+       if (!isl_val_is_int(d))
+               isl_die(isl_val_get_ctx(d), isl_error_invalid,
+                       "expecting integer denominator", goto error);
+       map = isl_map_floordiv(map, d->n);
+       isl_val_free(d);
+       return map;
+error:
+       isl_map_free(map);
+       isl_val_free(d);
+       return NULL;
+}
+
 static struct isl_basic_map *var_equal(struct isl_basic_map *bmap, unsigned pos)
 {
        int i;