__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,
__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);
#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)
{
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;
+}