extract isl_map_align_divs from isl_affine_hull.c
authorSven Verdoolaege <skimo@kotnet.org>
Sun, 24 Aug 2008 19:15:30 +0000 (21:15 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Mon, 25 Aug 2008 08:15:07 +0000 (10:15 +0200)
isl_affine_hull.c
isl_map.c
isl_map_private.h

index 13a53ca..e7c55dd 100644 (file)
@@ -232,8 +232,6 @@ struct isl_basic_map *isl_map_affine_hull(struct isl_ctx *ctx,
        int i;
        struct isl_basic_map *bmap;
 
-       map = isl_map_compute_divs(ctx, map);
-       map = isl_map_cow(ctx, map);
        if (!map)
                return NULL;
 
@@ -244,10 +242,8 @@ struct isl_basic_map *isl_map_affine_hull(struct isl_ctx *ctx,
                return bmap;
        }
 
-       for (i = 1; i < map->n; ++i)
-               map->p[0] = isl_basic_map_align_divs(ctx, map->p[0], map->p[i]);
-       for (i = 1; i < map->n; ++i)
-               map->p[i] = isl_basic_map_align_divs(ctx, map->p[i], map->p[0]);
+       map = isl_map_align_divs(ctx, map);
+       map = isl_map_cow(ctx, map);
 
        for (i = 0; i < map->n; ++i) {
                map->p[i] = isl_basic_map_cow(ctx, map->p[i]);
index 38308ae..033a1d3 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -2859,6 +2859,23 @@ error:
        return NULL;
 }
 
+struct isl_map *isl_map_align_divs(struct isl_ctx *ctx, struct isl_map *map)
+{
+       int i;
+
+       map = isl_map_compute_divs(ctx, map);
+       map = isl_map_cow(ctx, map);
+       if (!map)
+               return NULL;
+
+       for (i = 1; i < map->n; ++i)
+               map->p[0] = isl_basic_map_align_divs(ctx, map->p[0], map->p[i]);
+       for (i = 1; i < map->n; ++i)
+               map->p[i] = isl_basic_map_align_divs(ctx, map->p[i], map->p[0]);
+
+       return map;
+}
+
 static struct isl_map *add_cut_constraint(struct isl_ctx *ctx,
                struct isl_map *dst,
                struct isl_basic_map *src, isl_int *c,
index 2a62487..fd713b9 100644 (file)
@@ -38,6 +38,7 @@ struct isl_map *isl_basic_map_compute_divs(struct isl_ctx *ctx,
 struct isl_map *isl_map_compute_divs(struct isl_ctx *ctx, struct isl_map *map);
 struct isl_basic_map *isl_basic_map_align_divs(struct isl_ctx *ctx,
                struct isl_basic_map *dst, struct isl_basic_map *src);
+struct isl_map *isl_map_align_divs(struct isl_ctx *ctx, struct isl_map *map);
 struct isl_basic_map *isl_basic_map_gauss(struct isl_ctx *ctx,
        struct isl_basic_map *bmap, int *progress);
 struct isl_basic_set *isl_basic_set_gauss(struct isl_ctx *ctx,