generalize isl_multi_aff_identity
authorSven Verdoolaege <skimo@kotnet.org>
Sat, 25 Aug 2012 08:50:52 +0000 (10:50 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Tue, 18 Sep 2012 12:52:54 +0000 (14:52 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
isl_aff.c
isl_multi_templ.c

index 9939b93..5affddc 100644 (file)
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -2548,57 +2548,6 @@ __isl_give isl_multi_aff *isl_multi_aff_zero(__isl_take isl_space *space)
        return ma;
 }
 
-/* Create an isl_multi_aff in the given space that maps each
- * input dimension to the corresponding output dimension.
- */
-__isl_give isl_multi_aff *isl_multi_aff_identity(__isl_take isl_space *space)
-{
-       int n;
-       isl_multi_aff *ma;
-
-       if (!space)
-               return NULL;
-
-       if (isl_space_is_set(space))
-               isl_die(isl_space_get_ctx(space), isl_error_invalid,
-                       "expecting map space", goto error);
-
-       n = isl_space_dim(space, isl_dim_out);
-       if (n != isl_space_dim(space, isl_dim_in))
-               isl_die(isl_space_get_ctx(space), isl_error_invalid,
-                       "number of input and output dimensions needs to be "
-                       "the same", goto error);
-
-       ma = isl_multi_aff_alloc(isl_space_copy(space));
-
-       if (!n)
-               isl_space_free(space);
-       else {
-               int i;
-               isl_local_space *ls;
-               isl_aff *aff;
-
-               space = isl_space_domain(space);
-               ls = isl_local_space_from_space(space);
-               aff = isl_aff_zero_on_domain(ls);
-
-               for (i = 0; i < n; ++i) {
-                       isl_aff *aff_i;
-                       aff_i = isl_aff_copy(aff);
-                       aff_i = isl_aff_add_coefficient_si(aff_i,
-                                                           isl_dim_in, i, 1);
-                       ma = isl_multi_aff_set_aff(ma, i, aff_i);
-               }
-
-               isl_aff_free(aff);
-       }
-
-       return ma;
-error:
-       isl_space_free(space);
-       return NULL;
-}
-
 /* Create an isl_pw_multi_aff with the given isl_multi_aff on a universe
  * domain.
  */
index d0b62cb..8ecd892 100644 (file)
@@ -409,3 +409,50 @@ error:
        FN(LIST(EL),free)(list);
        return NULL;
 }
+
+/* Create a multi expression in the given space that maps each
+ * input dimension to the corresponding output dimension.
+ */
+__isl_give MULTI(BASE) *FN(MULTI(BASE),identity)(__isl_take isl_space *space)
+{
+       int i, n;
+       isl_local_space *ls;
+       MULTI(BASE) *multi;
+
+       if (!space)
+               return NULL;
+
+       if (isl_space_is_set(space))
+               isl_die(isl_space_get_ctx(space), isl_error_invalid,
+                       "expecting map space", goto error);
+
+       n = isl_space_dim(space, isl_dim_out);
+       if (n != isl_space_dim(space, isl_dim_in))
+               isl_die(isl_space_get_ctx(space), isl_error_invalid,
+                       "number of input and output dimensions needs to be "
+                       "the same", goto error);
+
+       multi = FN(MULTI(BASE),alloc)(isl_space_copy(space));
+
+       if (!n) {
+               isl_space_free(space);
+               return multi;
+       }
+
+       space = isl_space_domain(space);
+       ls = isl_local_space_from_space(space);
+
+       for (i = 0; i < n; ++i) {
+               EL *el;
+               el = FN(EL,var_on_domain)(isl_local_space_copy(ls),
+                                               isl_dim_set, i);
+               multi = FN(FN(MULTI(BASE),set),BASE)(multi, i, el);
+       }
+
+       isl_local_space_free(ls);
+
+       return multi;
+error:
+       isl_space_free(space);
+       return NULL;
+}