add isl_map_subtract_domain
authorSven Verdoolaege <skimo@kotnet.org>
Wed, 19 Oct 2011 09:13:31 +0000 (11:13 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Fri, 4 Nov 2011 12:51:36 +0000 (13:51 +0100)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/map.h
isl_map_subtract.c

index 15e66fc..ad26fd0 100644 (file)
@@ -2287,6 +2287,9 @@ the same (number of) parameters.
        __isl_give isl_map *isl_map_subtract(
                __isl_take isl_map *map1,
                __isl_take isl_map *map2);
+       __isl_give isl_map *isl_map_subtract_domain(
+               __isl_take isl_map *map,
+               __isl_take isl_set *dom);
        __isl_give isl_union_set *isl_union_set_subtract(
                __isl_take isl_union_set *uset1,
                __isl_take isl_union_set *uset2);
index bd554d3..ec65e02 100644 (file)
@@ -358,6 +358,8 @@ __isl_export
 __isl_give isl_map *isl_map_subtract(
                __isl_take isl_map *map1,
                __isl_take isl_map *map2);
+__isl_give isl_map *isl_map_subtract_domain(__isl_take isl_map *map,
+       __isl_take isl_set *dom);
 struct isl_map *isl_map_fix_input_si(struct isl_map *map,
                unsigned input, int value);
 __isl_give isl_map *isl_map_fix_si(__isl_take isl_map *map,
index 28c9aad..8b4c881 100644 (file)
@@ -536,6 +536,32 @@ struct isl_set *isl_set_subtract(struct isl_set *set1, struct isl_set *set2)
                        (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);
+}
+
 /* A diff collector that aborts as soon as its add function is called,
  * setting empty to 0.
  */