add isl_aff_align_params
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 3 Jan 2012 09:42:33 +0000 (10:42 +0100)
committerSven Verdoolaege <skimo@kotnet.org>
Tue, 3 Jan 2012 11:01:17 +0000 (12:01 +0100)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/aff.h
isl_aff.c

index 8e1d66d..b5460b9 100644 (file)
@@ -2933,6 +2933,9 @@ Operations include
        __isl_give isl_pw_aff *isl_pw_aff_coalesce(
                __isl_take isl_pw_aff *pwqp);
 
+       __isl_give isl_aff *isl_aff_align_params(
+               __isl_take isl_aff *aff,
+               __isl_take isl_space *model);
        __isl_give isl_pw_aff *isl_pw_aff_align_params(
                __isl_take isl_pw_aff *pwaff,
                __isl_take isl_space *model);
index 0ee2120..a969a0a 100644 (file)
@@ -84,6 +84,9 @@ __isl_give isl_aff *isl_aff_add_dims(__isl_take isl_aff *aff,
 __isl_give isl_aff *isl_aff_drop_dims(__isl_take isl_aff *aff,
        enum isl_dim_type type, unsigned first, unsigned n);
 
+__isl_give isl_aff *isl_aff_align_params(__isl_take isl_aff *aff,
+       __isl_take isl_space *model);
+
 __isl_give isl_aff *isl_aff_gist(__isl_take isl_aff *aff,
        __isl_take isl_set *context);
 __isl_give isl_aff *isl_aff_gist_params(__isl_take isl_aff *aff,
index 6aef871..fd8d8ca 100644 (file)
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -280,6 +280,34 @@ error:
        return NULL;
 }
 
+__isl_give isl_aff *isl_aff_align_params(__isl_take isl_aff *aff,
+       __isl_take isl_space *model)
+{
+       if (!aff || !model)
+               goto error;
+
+       if (!isl_space_match(aff->ls->dim, isl_dim_param,
+                            model, isl_dim_param)) {
+               isl_reordering *exp;
+
+               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(aff->ls->dim, model);
+               exp = isl_reordering_extend_space(exp,
+                                       isl_aff_get_domain_space(aff));
+               aff = isl_aff_realign_domain(aff, exp);
+       }
+
+       isl_space_free(model);
+       return aff;
+error:
+       isl_space_free(model);
+       isl_aff_free(aff);
+       return NULL;
+}
+
 int isl_aff_plain_is_zero(__isl_keep isl_aff *aff)
 {
        if (!aff)