These complement isl_union_map_*_at_multi_union_pw_aff.
Signed-off-by: Sven Verdoolaege <sven@cerebras.net>
@@ -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(
@@ -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,
@@ -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.
@@ -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));
+}