From: Sven Verdoolaege Date: Wed, 29 Feb 2012 11:50:38 +0000 (+0100) Subject: add isl_basic_map_is_single_valued X-Git-Tag: isl-0.10~36 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2c9ba39a397978f768ad8914259a15d37034beb6;p=platform%2Fupstream%2Fisl.git add isl_basic_map_is_single_valued Signed-off-by: Sven Verdoolaege --- diff --git a/doc/user.pod b/doc/user.pod index 9926195..2f9e387 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -1675,6 +1675,8 @@ is already known to be empty. =item * Single-valuedness + int isl_basic_map_is_single_valued( + __isl_keep isl_basic_map *bmap); int isl_map_plain_is_single_valued( __isl_keep isl_map *map); int isl_map_is_single_valued(__isl_keep isl_map *map); diff --git a/include/isl/map.h b/include/isl/map.h index a8c1497..0c6142f 100644 --- a/include/isl/map.h +++ b/include/isl/map.h @@ -488,6 +488,7 @@ __isl_export int isl_map_is_strict_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2); __isl_export int isl_map_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2); +int isl_basic_map_is_single_valued(__isl_keep isl_basic_map *bmap); int isl_map_plain_is_single_valued(__isl_keep isl_map *map); __isl_export int isl_map_is_single_valued(__isl_keep isl_map *map); diff --git a/isl_map.c b/isl_map.c index 64f27c4..691c88c 100644 --- a/isl_map.c +++ b/isl_map.c @@ -8968,6 +8968,39 @@ int isl_basic_map_plain_is_single_valued(__isl_keep isl_basic_map *bmap) return 1; } +/* Check if the given basic map is single-valued. + * We simply compute + * + * M \circ M^-1 + * + * and check if the result is a subset of the identity mapping. + */ +int isl_basic_map_is_single_valued(__isl_keep isl_basic_map *bmap) +{ + isl_space *space; + isl_basic_map *test; + isl_basic_map *id; + int sv; + + sv = isl_basic_map_plain_is_single_valued(bmap); + if (sv < 0 || sv) + return sv; + + test = isl_basic_map_reverse(isl_basic_map_copy(bmap)); + test = isl_basic_map_apply_range(test, isl_basic_map_copy(bmap)); + + space = isl_basic_map_get_space(bmap); + space = isl_space_map_from_set(isl_space_range(space)); + id = isl_basic_map_identity(space); + + sv = isl_basic_map_is_subset(test, id); + + isl_basic_map_free(test); + isl_basic_map_free(id); + + return sv; +} + /* Check if the given map is obviously single-valued. */ int isl_map_plain_is_single_valued(__isl_keep isl_map *map)