summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSven Verdoolaege <skimo@kotnet.org>2009-03-19 10:46:05 +0100
committerSven Verdoolaege <skimo@kotnet.org>2009-03-20 17:37:54 +0100
commit11b961b0bcb5d791e5adc82a6ae8cec0fdf9077b (patch)
tree49eeb39cd9c69cb4ddbb55fc050c544420c1615e
parentc4793905899a853709f06b11dc8ac33da056f63e (diff)
downloadisl-11b961b0bcb5d791e5adc82a6ae8cec0fdf9077b.tar.gz
isl-11b961b0bcb5d791e5adc82a6ae8cec0fdf9077b.tar.bz2
isl-11b961b0bcb5d791e5adc82a6ae8cec0fdf9077b.zip
isl_map_gist: handle some special cases
-rw-r--r--isl_map_simplify.c35
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)