bmap = isl_basic_map_order_divs(bmap);
map = isl_map_order_divs(map);
- tab = isl_tab_from_basic_map(bmap);
- if (isl_tab_track_bmap(tab, isl_basic_map_copy(bmap)) < 0)
- goto error;
+ tab = isl_tab_from_basic_map(bmap, 1);
modified = 0;
level = 0;
(struct isl_map *)set1, (struct isl_map *)set2);
}
+/* Remove the elements of "dom" from the domain of "map".
+ */
+static __isl_give isl_map *map_subtract_domain(__isl_take isl_map *map,
+ __isl_take isl_set *dom)
+{
+ isl_map *ext_dom;
+
+ if (!isl_map_compatible_domain(map, dom))
+ isl_die(isl_set_get_ctx(dom), isl_error_invalid,
+ "incompatible spaces", goto error);
+
+ ext_dom = isl_map_universe(isl_map_get_space(map));
+ ext_dom = isl_map_intersect_domain(ext_dom, dom);
+ return isl_map_subtract(map, ext_dom);
+error:
+ isl_map_free(map);
+ isl_set_free(dom);
+ return NULL;
+}
+
+__isl_give isl_map *isl_map_subtract_domain(__isl_take isl_map *map,
+ __isl_take isl_set *dom)
+{
+ return isl_map_align_params_map_map_and(map, dom, &map_subtract_domain);
+}
+
+/* Remove the elements of "dom" from the range of "map".
+ */
+static __isl_give isl_map *map_subtract_range(__isl_take isl_map *map,
+ __isl_take isl_set *dom)
+{
+ isl_map *ext_dom;
+
+ if (!isl_map_compatible_range(map, dom))
+ isl_die(isl_set_get_ctx(dom), isl_error_invalid,
+ "incompatible spaces", goto error);
+
+ ext_dom = isl_map_universe(isl_map_get_space(map));
+ ext_dom = isl_map_intersect_range(ext_dom, dom);
+ return isl_map_subtract(map, ext_dom);
+error:
+ isl_map_free(map);
+ isl_set_free(dom);
+ return NULL;
+}
+
+__isl_give isl_map *isl_map_subtract_range(__isl_take isl_map *map,
+ __isl_take isl_set *dom)
+{
+ return isl_map_align_params_map_map_and(map, dom, &map_subtract_range);
+}
+
/* A diff collector that aborts as soon as its add function is called,
* setting empty to 0.
*/
return is_subset;
}
-int isl_map_is_subset(struct isl_map *map1, struct isl_map *map2)
+static int map_is_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
{
int is_subset = 0;
return is_subset;
}
+int isl_map_is_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
+{
+ return isl_map_align_params_map_map_and_test(map1, map2,
+ &map_is_subset);
+}
+
int isl_set_is_subset(struct isl_set *set1, struct isl_set *set2)
{
return isl_map_is_subset(
return (struct isl_set *)isl_map_make_disjoint((struct isl_map *)set);
}
-__isl_give isl_set *isl_set_complement(__isl_take isl_set *set)
+__isl_give isl_map *isl_map_complement(__isl_take isl_map *map)
{
- isl_set *universe;
+ isl_map *universe;
- if (!set)
+ if (!map)
return NULL;
- universe = isl_set_universe(isl_set_get_space(set));
+ universe = isl_map_universe(isl_map_get_space(map));
- return isl_set_subtract(universe, set);
+ return isl_map_subtract(universe, map);
+}
+
+__isl_give isl_set *isl_set_complement(__isl_take isl_set *set)
+{
+ return isl_map_complement(set);
}