add isl_aff_add_dims
authorSven Verdoolaege <skimo@kotnet.org>
Tue, 28 Jun 2011 21:32:10 +0000 (23:32 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Fri, 1 Jul 2011 16:52:22 +0000 (18:52 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/aff.h
isl_aff.c

index 38cef38..bbb4102 100644 (file)
@@ -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);
index 3a7e69c..9102270 100644 (file)
@@ -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);
 
index 72869f7..b030a24 100644 (file)
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -10,6 +10,7 @@
 
 #include <isl_map_private.h>
 #include <isl_aff_private.h>
+#include <isl_dim_private.h>
 #include <isl_local_space_private.h>
 #include <isl_mat_private.h>
 #include <isl/constraint.h>
@@ -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