From b5a59226b00dc5f0e90be73d23de6018d78b5b1c Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Tue, 28 Jun 2011 23:32:10 +0200 Subject: [PATCH] add isl_aff_add_dims Signed-off-by: Sven Verdoolaege --- doc/user.pod | 12 ++++++++++++ include/isl/aff.h | 8 ++++++++ isl_aff.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 72 insertions(+), 1 deletion(-) diff --git a/doc/user.pod b/doc/user.pod index 38cef381..bbb4102d 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -2286,6 +2286,18 @@ It can be modified using __isl_take isl_aff *aff, enum isl_dim_type type, int pos, int v); + __isl_give isl_aff *isl_aff_insert_dims( + __isl_take isl_aff *aff, + enum isl_dim_type type, unsigned first, unsigned n); + __isl_give isl_pw_aff *isl_pw_aff_insert_dims( + __isl_take isl_pw_aff *pwaff, + enum isl_dim_type type, unsigned first, unsigned n); + __isl_give isl_aff *isl_aff_add_dims( + __isl_take isl_aff *aff, + enum isl_dim_type type, unsigned n); + __isl_give isl_pw_aff *isl_pw_aff_add_dims( + __isl_take isl_pw_aff *pwaff, + enum isl_dim_type type, unsigned n); __isl_give isl_aff *isl_aff_drop_dims( __isl_take isl_aff *aff, enum isl_dim_type type, unsigned first, unsigned n); diff --git a/include/isl/aff.h b/include/isl/aff.h index 3a7e69ce..9102270e 100644 --- a/include/isl/aff.h +++ b/include/isl/aff.h @@ -68,6 +68,10 @@ __isl_give isl_aff *isl_aff_scale(__isl_take isl_aff *aff, isl_int f); __isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, isl_int f); __isl_give isl_aff *isl_aff_scale_down_ui(__isl_take isl_aff *aff, unsigned f); +__isl_give isl_aff *isl_aff_insert_dims(__isl_take isl_aff *aff, + enum isl_dim_type type, unsigned first, unsigned n); +__isl_give isl_aff *isl_aff_add_dims(__isl_take isl_aff *aff, + enum isl_dim_type type, unsigned n); __isl_give isl_aff *isl_aff_drop_dims(__isl_take isl_aff *aff, enum isl_dim_type type, unsigned first, unsigned n); @@ -108,6 +112,10 @@ __isl_give isl_set *isl_pw_aff_domain(__isl_take isl_pw_aff *pwaff); __isl_give isl_pw_aff *isl_pw_aff_add(__isl_take isl_pw_aff *pwaff1, __isl_take isl_pw_aff *pwaff2); +__isl_give isl_pw_aff *isl_pw_aff_insert_dims(__isl_take isl_pw_aff *pwaff, + enum isl_dim_type type, unsigned first, unsigned n); +__isl_give isl_pw_aff *isl_pw_aff_add_dims(__isl_take isl_pw_aff *pwaff, + enum isl_dim_type type, unsigned n); __isl_give isl_pw_aff *isl_pw_aff_drop_dims(__isl_take isl_pw_aff *pwaff, enum isl_dim_type type, unsigned first, unsigned n); diff --git a/isl_aff.c b/isl_aff.c index 72869f7d..b030a24f 100644 --- a/isl_aff.c +++ b/isl_aff.c @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -855,6 +856,57 @@ __isl_give isl_aff *isl_aff_drop_dims(__isl_take isl_aff *aff, return aff; } +__isl_give isl_aff *isl_aff_insert_dims(__isl_take isl_aff *aff, + enum isl_dim_type type, unsigned first, unsigned n) +{ + isl_ctx *ctx; + + if (!aff) + return NULL; + if (n == 0 && !isl_local_space_is_named_or_nested(aff->ls, type)) + return aff; + + ctx = isl_aff_get_ctx(aff); + if (first > isl_aff_dim(aff, type)) + isl_die(ctx, isl_error_invalid, "position out of bounds", + return isl_aff_free(aff)); + + aff = isl_aff_cow(aff); + if (!aff) + return NULL; + + aff->ls = isl_local_space_insert_dims(aff->ls, type, first, n); + if (!aff->ls) + return isl_aff_free(aff); + + first += 1 + isl_local_space_offset(aff->ls, type); + aff->v = isl_vec_insert_zero_els(aff->v, first, n); + if (!aff->v) + return isl_aff_free(aff); + + return aff; +} + +__isl_give isl_aff *isl_aff_add_dims(__isl_take isl_aff *aff, + enum isl_dim_type type, unsigned n) +{ + unsigned pos; + + pos = isl_aff_dim(aff, type); + + return isl_aff_insert_dims(aff, type, pos, n); +} + +__isl_give isl_pw_aff *isl_pw_aff_add_dims(__isl_take isl_pw_aff *pwaff, + enum isl_dim_type type, unsigned n) +{ + unsigned pos; + + pos = isl_pw_aff_dim(pwaff, type); + + return isl_pw_aff_insert_dims(pwaff, type, pos, n); +} + #undef PW #define PW isl_pw_aff #undef EL @@ -871,7 +923,6 @@ __isl_give isl_aff *isl_aff_drop_dims(__isl_take isl_aff *aff, #define NO_EVAL #define NO_OPT #define NO_MOVE_DIMS -#define NO_INSERT_DIMS #define NO_REALIGN #define NO_LIFT #define NO_MORPH -- 2.11.4.GIT