add isl_map_floordiv
authorSven Verdoolaege <skimo@kotnet.org>
Sun, 30 Aug 2009 07:54:40 +0000 (09:54 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sun, 30 Aug 2009 07:54:40 +0000 (09:54 +0200)
include/isl_map.h
isl_map.c

index 80c4b49..717d023 100644 (file)
@@ -177,6 +177,7 @@ struct isl_basic_map *isl_basic_map_floordiv(struct isl_basic_map *bmap,
                isl_int d);
 
 struct isl_map *isl_map_neg(struct isl_map *map);
+struct isl_map *isl_map_floordiv(struct isl_map *map, isl_int d);
 
 int isl_basic_map_is_equal(
                struct isl_basic_map *bmap1, struct isl_basic_map *bmap2);
index f385e5b..46a9cb0 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -2145,6 +2145,31 @@ error:
        return NULL;
 }
 
+/* Given a map A -> f(A) and an integer d, construct a map
+ * A -> floor(f(A)/d).
+ */
+struct isl_map *isl_map_floordiv(struct isl_map *map, isl_int d)
+{
+       int i;
+
+       map = isl_map_cow(map);
+       if (!map)
+               return NULL;
+
+       ISL_F_CLR(map, ISL_MAP_DISJOINT);
+       ISL_F_CLR(map, ISL_MAP_NORMALIZED);
+       for (i = 0; i < map->n; ++i) {
+               map->p[i] = isl_basic_map_floordiv(map->p[i], d);
+               if (!map->p[i])
+                       goto error;
+       }
+
+       return map;
+error:
+       isl_map_free(map);
+       return NULL;
+}
+
 static struct isl_basic_map *var_equal(struct isl_basic_map *bmap, unsigned pos)
 {
        int i;