diff options
author | Sven Verdoolaege <skimo@kotnet.org> | 2009-03-19 10:46:05 +0100 |
---|---|---|
committer | Sven Verdoolaege <skimo@kotnet.org> | 2009-03-20 17:37:54 +0100 |
commit | 11b961b0bcb5d791e5adc82a6ae8cec0fdf9077b (patch) | |
tree | 49eeb39cd9c69cb4ddbb55fc050c544420c1615e | |
parent | c4793905899a853709f06b11dc8ac33da056f63e (diff) | |
download | isl-11b961b0bcb5d791e5adc82a6ae8cec0fdf9077b.tar.gz isl-11b961b0bcb5d791e5adc82a6ae8cec0fdf9077b.tar.bz2 isl-11b961b0bcb5d791e5adc82a6ae8cec0fdf9077b.zip |
isl_map_gist: handle some special cases
-rw-r--r-- | isl_map_simplify.c | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/isl_map_simplify.c b/isl_map_simplify.c index ca6b58fc..f37cb2ae 100644 --- a/isl_map_simplify.c +++ b/isl_map_simplify.c @@ -1484,6 +1484,25 @@ struct isl_basic_map *isl_basic_map_gist(struct isl_basic_map *bmap, if (!bmap || !context) goto error; + if (isl_basic_map_is_universe(context)) { + isl_basic_map_free(context); + return bmap; + } + if (isl_basic_map_is_universe(bmap)) { + isl_basic_map_free(context); + return bmap; + } + if (isl_basic_map_fast_is_empty(context)) { + struct isl_dim *dim = isl_dim_copy(bmap->dim); + isl_basic_map_free(context); + isl_basic_map_free(bmap); + return isl_basic_map_universe(dim); + } + if (isl_basic_map_fast_is_empty(bmap)) { + isl_basic_map_free(context); + return bmap; + } + bmap = isl_basic_map_convex_hull(bmap); context = isl_basic_map_convex_hull(context); @@ -1507,10 +1526,24 @@ struct isl_map *isl_map_gist(struct isl_map *map, struct isl_basic_map *context) { int i; + if (!map || !context) + goto error;; + + if (isl_basic_map_is_universe(context)) { + isl_basic_map_free(context); + return map; + } + if (isl_basic_map_fast_is_empty(context)) { + struct isl_dim *dim = isl_dim_copy(map->dim); + isl_basic_map_free(context); + isl_map_free(map); + return isl_map_universe(dim); + } + context = isl_basic_map_convex_hull(context); map = isl_map_cow(map); if (!map || !context) - return NULL; + goto error;; isl_assert(map->ctx, isl_dim_equal(map->dim, context->dim), goto error); map = isl_map_compute_divs(map); for (i = 0; i < map->n; ++i) |