add isl_basic_{set,map}_align_params
authorSven Verdoolaege <skimo@kotnet.org>
Wed, 25 Apr 2012 18:03:25 +0000 (20:03 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Thu, 2 Aug 2012 10:20:08 +0000 (12:20 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/map.h
include/isl/set.h
isl_map.c

index 996df86..4fb15a6 100644 (file)
@@ -2377,9 +2377,15 @@ with the original range as range of this nested relation.
 
 =item * Aligning parameters
 
+       __isl_give isl_basic_set *isl_basic_set_align_params(
+               __isl_take isl_basic_set *bset,
+               __isl_take isl_space *model);
        __isl_give isl_set *isl_set_align_params(
                __isl_take isl_set *set,
                __isl_take isl_space *model);
+       __isl_give isl_basic_map *isl_basic_map_align_params(
+               __isl_take isl_basic_map *bmap,
+               __isl_take isl_space *model);
        __isl_give isl_map *isl_map_align_params(
                __isl_take isl_map *map,
                __isl_take isl_space *model);
index 435a7ad..d17ce87 100644 (file)
@@ -581,6 +581,8 @@ __isl_give isl_map *isl_map_lex_ge_map(__isl_take isl_map *map1,
 __isl_give isl_map *isl_map_lex_gt_map(__isl_take isl_map *map1,
        __isl_take isl_map *map2);
 
+__isl_give isl_basic_map *isl_basic_map_align_params(
+       __isl_take isl_basic_map *bmap, __isl_take isl_space *model);
 __isl_give isl_map *isl_map_align_params(__isl_take isl_map *map,
        __isl_take isl_space *model);
 
index ae45890..f97633c 100644 (file)
@@ -455,6 +455,8 @@ __isl_give isl_map *isl_set_lex_gt_set(__isl_take isl_set *set1,
 
 int isl_set_size(__isl_keep isl_set *set);
 
+__isl_give isl_basic_set *isl_basic_set_align_params(
+       __isl_take isl_basic_set *bset, __isl_take isl_space *model);
 __isl_give isl_set *isl_set_align_params(__isl_take isl_set *set,
        __isl_take isl_space *model);
 
index fc4835e..16b17c1 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -9834,6 +9834,60 @@ __isl_give isl_set *isl_set_align_params(__isl_take isl_set *set,
        return isl_map_align_params(set, model);
 }
 
+/* Align the parameters of "bmap" to those of "model", introducing
+ * additional parameters if needed.
+ */
+__isl_give isl_basic_map *isl_basic_map_align_params(
+       __isl_take isl_basic_map *bmap, __isl_take isl_space *model)
+{
+       isl_ctx *ctx;
+
+       if (!bmap || !model)
+               goto error;
+
+       ctx = isl_space_get_ctx(model);
+       if (!isl_space_has_named_params(model))
+               isl_die(ctx, isl_error_invalid,
+                       "model has unnamed parameters", goto error);
+       if (!isl_space_has_named_params(bmap->dim))
+               isl_die(ctx, isl_error_invalid,
+                       "relation has unnamed parameters", goto error);
+       if (!isl_space_match(bmap->dim, isl_dim_param, model, isl_dim_param)) {
+               isl_reordering *exp;
+               struct isl_dim_map *dim_map;
+
+               model = isl_space_drop_dims(model, isl_dim_in,
+                                       0, isl_space_dim(model, isl_dim_in));
+               model = isl_space_drop_dims(model, isl_dim_out,
+                                       0, isl_space_dim(model, isl_dim_out));
+               exp = isl_parameter_alignment_reordering(bmap->dim, model);
+               exp = isl_reordering_extend_space(exp,
+                                       isl_basic_map_get_space(bmap));
+               dim_map = isl_dim_map_from_reordering(exp);
+               bmap = isl_basic_map_realign(bmap,
+                                   exp ? isl_space_copy(exp->dim) : NULL,
+                                   isl_dim_map_extend(dim_map, bmap));
+               isl_reordering_free(exp);
+               free(dim_map);
+       }
+
+       isl_space_free(model);
+       return bmap;
+error:
+       isl_space_free(model);
+       isl_basic_map_free(bmap);
+       return NULL;
+}
+
+/* Align the parameters of "bset" to those of "model", introducing
+ * additional parameters if needed.
+ */
+__isl_give isl_basic_set *isl_basic_set_align_params(
+       __isl_take isl_basic_set *bset, __isl_take isl_space *model)
+{
+       return isl_basic_map_align_params(bset, model);
+}
+
 __isl_give isl_mat *isl_basic_map_equalities_matrix(
                __isl_keep isl_basic_map *bmap, enum isl_dim_type c1,
                enum isl_dim_type c2, enum isl_dim_type c3,