From d109fad91c4ef9ba30b1aaed9620856fd03b9381 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Tue, 3 Jan 2012 10:42:33 +0100 Subject: [PATCH] add isl_aff_align_params Signed-off-by: Sven Verdoolaege --- doc/user.pod | 3 +++ include/isl/aff.h | 3 +++ isl_aff.c | 28 ++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/doc/user.pod b/doc/user.pod index 8e1d66d..b5460b9 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -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); diff --git a/include/isl/aff.h b/include/isl/aff.h index 0ee2120..a969a0a 100644 --- a/include/isl/aff.h +++ b/include/isl/aff.h @@ -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, diff --git a/isl_aff.c b/isl_aff.c index 6aef871..fd8d8ca 100644 --- 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) -- 2.7.4