add exported isl_multi_*_set_range_tuple_id convenience functions
authorSven Verdoolaege <sven.verdoolaege@gmail.com>
Fri, 13 Jul 2018 08:50:05 +0000 (13 10:50 +0200)
committerSven Verdoolaege <sven@cerebras.net>
Sun, 7 Feb 2021 16:14:13 +0000 (7 17:14 +0100)
The interface of isl_multi_*_set_tuple_id is not well designed
because it only works for some values of the "type" argument.
Moreover, the value in theory depends on whether
the function lives in a set (isl_dim_set) or a map space (isl_dim_out).
In practice, isl_dim_set is equal to isl_dim_out, but this knowledge
should only be used inside isl.
Provide isl_multi_*_set_range_tuple_id alternatives
to avoid these issues.

Signed-off-by: Sven Verdoolaege <sven.verdoolaege@gmail.com>
doc/user.pod
include/isl/multi.h
isl_multi_tuple_id_templ.c

index 4aecb5f..114eeb8 100644 (file)
@@ -1671,6 +1671,9 @@ using the following functions.
                enum isl_dim_type type);
 
        #include <isl/val.h>
+       __isl_give isl_multi_val *isl_multi_val_set_range_tuple_id(
+               __isl_take isl_multi_val *mv,
+               __isl_take isl_id *id);
        __isl_give isl_multi_val *isl_multi_val_set_tuple_id(
                __isl_take isl_multi_val *mv,
                enum isl_dim_type type, __isl_take isl_id *id);
@@ -1698,6 +1701,9 @@ using the following functions.
        __isl_give isl_aff *isl_aff_set_tuple_id(
                __isl_take isl_aff *aff,
                enum isl_dim_type type, __isl_take isl_id *id);
+       __isl_give isl_multi_aff *isl_multi_aff_set_range_tuple_id(
+               __isl_take isl_multi_aff *ma,
+               __isl_take isl_id *id);
        __isl_give isl_multi_aff *isl_multi_aff_set_tuple_id(
                __isl_take isl_multi_aff *maff,
                enum isl_dim_type type, __isl_take isl_id *id);
@@ -1707,6 +1713,14 @@ using the following functions.
        __isl_give isl_pw_multi_aff *isl_pw_multi_aff_set_tuple_id(
                __isl_take isl_pw_multi_aff *pma,
                enum isl_dim_type type, __isl_take isl_id *id);
+       __isl_give isl_multi_pw_aff *
+       isl_multi_pw_aff_set_range_tuple_id(
+               __isl_take isl_multi_pw_aff *mpa,
+               __isl_take isl_id *id);
+       __isl_give isl_multi_union_pw_aff *
+       isl_multi_union_pw_aff_set_range_tuple_id(
+               __isl_take isl_multi_union_pw_aff *mupa,
+               __isl_take isl_id *id);
        __isl_give isl_multi_union_pw_aff *
        isl_multi_union_pw_aff_set_tuple_id(
                __isl_take isl_multi_union_pw_aff *mupa,
index a9b0853..6d4fa0c 100644 (file)
@@ -223,6 +223,9 @@ __isl_give isl_id *isl_multi_##BASE##_get_tuple_id(                 \
 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_name(                \
        __isl_take isl_multi_##BASE *multi,                             \
        enum isl_dim_type type, const char *s);                         \
+__isl_overload                                                         \
+__isl_give isl_multi_##BASE *isl_multi_##BASE##_set_range_tuple_id(    \
+       __isl_take isl_multi_##BASE *multi,  __isl_take isl_id *id);    \
 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_id(          \
        __isl_take isl_multi_##BASE *multi,                             \
        enum isl_dim_type type, __isl_take isl_id *id);                 \
index 03ace76..4cb7897 100644 (file)
@@ -96,6 +96,19 @@ error:
        return NULL;
 }
 
+/* Replace the identifier of the (range) tuple of "multi" by "id".
+ *
+ * Technically, the implementation should use isl_dim_set if "multi"
+ * lives in a set space and isl_dim_out if it lives in a map space.
+ * Internally, however, it can be assumed that isl_dim_set is equal
+ * to isl_dim_out.
+ */
+__isl_give MULTI(BASE) *FN(MULTI(BASE),set_range_tuple_id)(
+       __isl_take MULTI(BASE) *multi, __isl_take isl_id *id)
+{
+       return FN(MULTI(BASE),set_tuple_id)(multi, isl_dim_out, id);
+}
+
 /* Drop the id on the specified tuple.
  */
 __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_tuple_id)(