add exported isl_multi_*_{has,get}_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:13:43 +0000 (7 17:13 +0100)
The interface of isl_multi_*_get_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_*_get_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 716e7da..4aecb5f 100644 (file)
@@ -1677,6 +1677,10 @@ using the following functions.
        __isl_give isl_multi_val *isl_multi_val_reset_tuple_id(
                __isl_take isl_multi_val *mv,
                enum isl_dim_type type);
+       isl_bool isl_multi_val_has_range_tuple_id(
+               __isl_keep isl_multi_val *mv);
+       __isl_give isl_id *isl_multi_val_get_range_tuple_id(
+               __isl_keep isl_multi_val *mv);
        isl_bool isl_multi_val_has_tuple_id(
                __isl_keep isl_multi_val *mv,
                enum isl_dim_type type);
@@ -1725,6 +1729,10 @@ using the following functions.
        isl_multi_union_pw_aff_reset_tuple_id(
                __isl_take isl_multi_union_pw_aff *mupa,
                enum isl_dim_type type);
+       isl_bool isl_multi_aff_has_range_tuple_id(
+               __isl_keep isl_multi_aff *ma);
+       __isl_give isl_id *isl_multi_aff_get_range_tuple_id(
+               __isl_keep isl_multi_aff *ma);
        isl_bool isl_multi_aff_has_tuple_id(
                __isl_keep isl_multi_aff *ma,
                enum isl_dim_type type);
@@ -1742,12 +1750,21 @@ using the following functions.
        __isl_give isl_id *isl_pw_multi_aff_get_tuple_id(
                __isl_keep isl_pw_multi_aff *pma,
                enum isl_dim_type type);
+       isl_bool isl_multi_pw_aff_has_range_tuple_id(
+               __isl_keep isl_multi_pw_aff *mpa);
+       __isl_give isl_id *isl_multi_pw_aff_get_range_tuple_id(
+               __isl_keep isl_multi_pw_aff *mpa);
        isl_bool isl_multi_pw_aff_has_tuple_id(
                __isl_keep isl_multi_pw_aff *mpa,
                enum isl_dim_type type);
        __isl_give isl_id *isl_multi_pw_aff_get_tuple_id(
                __isl_keep isl_multi_pw_aff *mpa,
                enum isl_dim_type type);
+       isl_bool isl_multi_union_pw_aff_has_range_tuple_id(
+               __isl_keep isl_multi_union_pw_aff *mupa);
+       __isl_give isl_id *
+       isl_multi_union_pw_aff_get_range_tuple_id(
+               __isl_keep isl_multi_union_pw_aff *mupa);
        isl_bool isl_multi_union_pw_aff_has_tuple_id(
                __isl_keep isl_multi_union_pw_aff *mupa,
                enum isl_dim_type type);
index c1c4477..a9b0853 100644 (file)
@@ -210,8 +210,14 @@ __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_dim_id(                \
 #define ISL_DECLARE_MULTI_TUPLE_ID(BASE)                               \
 const char *isl_multi_##BASE##_get_tuple_name(                         \
        __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type);    \
+__isl_export                                                           \
+isl_bool isl_multi_##BASE##_has_range_tuple_id(                                \
+       __isl_keep isl_multi_##BASE *multi);                            \
 isl_bool isl_multi_##BASE##_has_tuple_id(                              \
        __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type);    \
+__isl_export                                                           \
+__isl_give isl_id *isl_multi_##BASE##_get_range_tuple_id(              \
+       __isl_keep isl_multi_##BASE *multi);                            \
 __isl_give isl_id *isl_multi_##BASE##_get_tuple_id(                    \
        __isl_keep isl_multi_##BASE *multi, enum isl_dim_type type);    \
 __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_tuple_name(                \
index 03f74d4..03ace76 100644 (file)
@@ -28,6 +28,18 @@ isl_bool FN(MULTI(BASE),has_tuple_id)(__isl_keep MULTI(BASE) *multi,
        return isl_space_has_tuple_id(multi->space, type);
 }
 
+/* Does the (range) tuple of "multi" have an identifier?
+ *
+ * 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_bool FN(MULTI(BASE),has_range_tuple_id)(__isl_keep MULTI(BASE) *multi)
+{
+       return FN(MULTI(BASE),has_tuple_id)(multi, isl_dim_out);
+}
+
 /* Return the id of the specified tuple.
  */
 __isl_give isl_id *FN(MULTI(BASE),get_tuple_id)(__isl_keep MULTI(BASE) *multi,
@@ -36,6 +48,19 @@ __isl_give isl_id *FN(MULTI(BASE),get_tuple_id)(__isl_keep MULTI(BASE) *multi,
        return multi ? isl_space_get_tuple_id(multi->space, type) : NULL;
 }
 
+/* Return the identifier of the (range) tuple of "multi", assuming it has one.
+ *
+ * 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 isl_id *FN(MULTI(BASE),get_range_tuple_id)(
+       __isl_keep MULTI(BASE) *multi)
+{
+       return FN(MULTI(BASE),get_tuple_id)(multi, isl_dim_out);
+}
+
 __isl_give MULTI(BASE) *FN(MULTI(BASE),set_tuple_name)(
        __isl_keep MULTI(BASE) *multi, enum isl_dim_type type,
        const char *s)