add exported isl_map_*_at_multi_pw_aff
authorSven Verdoolaege <sven@cerebras.net>
Fri, 14 Jun 2019 10:27:41 +0000 (14 12:27 +0200)
committerSven Verdoolaege <sven@cerebras.net>
Sun, 9 Feb 2020 16:01:07 +0000 (9 17:01 +0100)
These complement isl_union_map_*_at_multi_union_pw_aff.

Signed-off-by: Sven Verdoolaege <sven@cerebras.net>
doc/user.pod
include/isl/map.h
isl_aff.c
isl_aff_lex_templ.c

index c1156d5..a6596e0 100644 (file)
@@ -7500,6 +7500,23 @@ C<isl_pw_aff> function to each pair of elements in the two lists.
 These functions return a map between domain elements of the arguments
 where the function values satisfy the given relation.
 
+       #include <isl/map.h>
+       __isl_give isl_map *isl_map_eq_at_multi_pw_aff(
+               __isl_take isl_map *map,
+               __isl_take isl_multi_pw_aff *mpa);
+       __isl_give isl_map *isl_map_lex_lt_at_multi_pw_aff(
+               __isl_take isl_map *map,
+               __isl_take isl_multi_pw_aff *mpa);
+       __isl_give isl_map *isl_map_lex_le_at_multi_pw_aff(
+               __isl_take isl_map *map,
+               __isl_take isl_multi_pw_aff *mpa);
+       __isl_give isl_map *isl_map_lex_gt_at_multi_pw_aff(
+               __isl_take isl_map *map,
+               __isl_take isl_multi_pw_aff *mpa);
+       __isl_give isl_map *isl_map_lex_ge_at_multi_pw_aff(
+               __isl_take isl_map *map,
+               __isl_take isl_multi_pw_aff *mpa);
+
        #include <isl/union_map.h>
        __isl_give isl_union_map *
        isl_union_map_eq_at_multi_union_pw_aff(
index ba531b6..e6e583f 100644 (file)
@@ -684,6 +684,22 @@ __isl_give isl_map *isl_map_lex_ge_map(__isl_take isl_map *map1,
 __isl_give isl_map *isl_map_lex_gt_map(__isl_take isl_map *map1,
        __isl_take isl_map *map2);
 
+__isl_overload
+__isl_give isl_map *isl_map_eq_at_multi_pw_aff(__isl_take isl_map *map,
+       __isl_take isl_multi_pw_aff *mpa);
+__isl_overload
+__isl_give isl_map *isl_map_lex_lt_at_multi_pw_aff(__isl_take isl_map *map,
+       __isl_take isl_multi_pw_aff *mpa);
+__isl_overload
+__isl_give isl_map *isl_map_lex_le_at_multi_pw_aff(__isl_take isl_map *map,
+       __isl_take isl_multi_pw_aff *mpa);
+__isl_overload
+__isl_give isl_map *isl_map_lex_gt_at_multi_pw_aff(__isl_take isl_map *map,
+       __isl_take isl_multi_pw_aff *mpa);
+__isl_overload
+__isl_give isl_map *isl_map_lex_ge_at_multi_pw_aff(__isl_take isl_map *map,
+       __isl_take isl_multi_pw_aff *mpa);
+
 __isl_give isl_basic_map *isl_basic_map_align_params(
        __isl_take isl_basic_map *bmap, __isl_take isl_space *model);
 __isl_give isl_map *isl_map_align_params(__isl_take isl_map *map,
index 83309bd..e1140ce 100644 (file)
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -7153,6 +7153,27 @@ __isl_give isl_map *isl_multi_pw_aff_eq_map(__isl_take isl_multi_pw_aff *mpa1,
                                            &isl_multi_pw_aff_eq_map_on_space);
 }
 
+/* Intersect "map" with the result of applying "order"
+ * on two copies of "mpa".
+ */
+static __isl_give isl_map *isl_map_order_at_multi_pw_aff(
+       __isl_take isl_map *map, __isl_take isl_multi_pw_aff *mpa,
+       __isl_give isl_map *(*order)(__isl_take isl_multi_pw_aff *mpa1,
+               __isl_take isl_multi_pw_aff *mpa2))
+{
+       return isl_map_intersect(map, order(mpa, isl_multi_pw_aff_copy(mpa)));
+}
+
+/* Return the subset of "map" where the domain and the range
+ * have equal "mpa" values.
+ */
+__isl_give isl_map *isl_map_eq_at_multi_pw_aff(__isl_take isl_map *map,
+       __isl_take isl_multi_pw_aff *mpa)
+{
+       return isl_map_order_at_multi_pw_aff(map, mpa,
+                                               &isl_multi_pw_aff_eq_map);
+}
+
 /* Return a map containing pairs of elements in the domains of "mpa1" and "mpa2"
  * where the function values of "mpa1" lexicographically satisfies "base"
  * compared to that of "mpa2".  "space" is the space of the result.
index 27a6c07..428eb58 100644 (file)
@@ -39,3 +39,13 @@ __isl_give isl_map *FN(FN(isl_multi_pw_aff_lex,ORDER),map)(
        return isl_multi_pw_aff_order_map(mpa1, mpa2,
                        &FN(FN(isl_multi_pw_aff_lex,ORDER),map_on_space));
 }
+
+/* Return the subset of "map" where the domain and the range
+ * have "mpa" values that lexicographically compare as "ORDER".
+ */
+__isl_give isl_map *FN(FN(isl_map_lex,ORDER),at_multi_pw_aff)(
+       __isl_take isl_map *map, __isl_take isl_multi_pw_aff *mpa)
+{
+       return isl_map_order_at_multi_pw_aff(map, mpa,
+                               &FN(FN(isl_multi_pw_aff_lex,ORDER),map));
+}