From 305881ffa5d5549144b301318f6ccfd31c0d4308 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sat, 28 May 2011 10:24:35 +0200 Subject: [PATCH] add isl_dim_align_params Signed-off-by: Sven Verdoolaege --- doc/user.pod | 2 ++ include/isl/dim.h | 3 +++ isl_dim.c | 27 +++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index 20a3c2e..cb826c0 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -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, diff --git a/include/isl/dim.h b/include/isl/dim.h index b7eae91..ed6b8f9 100644 --- a/include/isl/dim.h +++ b/include/isl/dim.h @@ -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); diff --git a/isl_dim.c b/isl_dim.c index 5a5a821..0b02784 100644 --- a/isl_dim.c +++ b/isl_dim.c @@ -13,6 +13,7 @@ #include #include #include "isl_name.h" +#include 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; +} -- 2.7.4