add isl_dim_align_params
authorSven Verdoolaege <skimo@kotnet.org>
Sat, 28 May 2011 08:24:35 +0000 (10:24 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sat, 4 Jun 2011 11:19:23 +0000 (13:19 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/dim.h
isl_dim.c

index 20a3c2e..cb826c0 100644 (file)
@@ -550,6 +550,8 @@ specifications using the following functions.
        __isl_give isl_dim *isl_dim_reverse(__isl_take isl_dim *dim);
        __isl_give isl_dim *isl_dim_join(__isl_take isl_dim *left,
                __isl_take isl_dim *right);
+       __isl_give isl_dim *isl_dim_align_params(
+               __isl_take isl_dim *dim1, __isl_take isl_dim *dim2)
        __isl_give isl_dim *isl_dim_insert(__isl_take isl_dim *dim,
                enum isl_dim_type type, unsigned pos, unsigned n);
        __isl_give isl_dim *isl_dim_add(__isl_take isl_dim *dim,
index b7eae91..ed6b8f9 100644 (file)
@@ -77,6 +77,9 @@ __isl_give isl_dim *isl_dim_range(__isl_take isl_dim *dim);
 __isl_give isl_dim *isl_dim_from_range(__isl_take isl_dim *dim);
 struct isl_dim *isl_dim_underlying(struct isl_dim *dim, unsigned n_div);
 
+__isl_give isl_dim *isl_dim_align_params(__isl_take isl_dim *dim1,
+       __isl_take isl_dim *dim2);
+
 int isl_dim_is_wrapping(__isl_keep isl_dim *dim);
 __isl_give isl_dim *isl_dim_wrap(__isl_take isl_dim *dim);
 __isl_give isl_dim *isl_dim_unwrap(__isl_take isl_dim *dim);
index 5a5a821..0b02784 100644 (file)
--- a/isl_dim.c
+++ b/isl_dim.c
@@ -13,6 +13,7 @@
 #include <stdlib.h>
 #include <isl_dim_private.h>
 #include "isl_name.h"
+#include <isl_reordering.h>
 
 isl_ctx *isl_dim_get_ctx(__isl_keep isl_dim *dim)
 {
@@ -1306,3 +1307,29 @@ int isl_dim_has_named_params(__isl_keep isl_dim *dim)
                        return 0;
        return 1;
 }
+
+/* Align the initial parameters of dim1 to match the order in dim2.
+ */
+__isl_give isl_dim *isl_dim_align_params(__isl_take isl_dim *dim1,
+       __isl_take isl_dim *dim2)
+{
+       isl_reordering *exp;
+
+       if (!isl_dim_has_named_params(dim1) || !isl_dim_has_named_params(dim2))
+               isl_die(isl_dim_get_ctx(dim1), isl_error_invalid,
+                       "parameter alignment requires named parameters",
+                       goto error);
+
+       exp = isl_parameter_alignment_reordering(dim1, dim2);
+       isl_dim_free(dim1);
+       isl_dim_free(dim2);
+       if (!exp)
+               return NULL;
+       dim1 = isl_dim_copy(exp->dim);
+       isl_reordering_free(exp);
+       return dim1;
+error:
+       isl_dim_free(dim1);
+       isl_dim_free(dim2);
+       return NULL;
+}