From dcaf03fe0160f6b1608dec21b8b828dc620222a5 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Fri, 11 May 2012 09:35:32 +0200 Subject: [PATCH] isl_map_equate: add special case for equating a dimension to itself Equating a dimension to itself isn't very useful, but we should still produce the correct result. Signed-off-by: Sven Verdoolaege --- isl_map.c | 3 +++ isl_test.c | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/isl_map.c b/isl_map.c index 691c88c..0a224dd 100644 --- a/isl_map.c +++ b/isl_map.c @@ -10095,6 +10095,9 @@ static __isl_give isl_basic_map *equator(__isl_take isl_space *space, isl_die(isl_space_get_ctx(space), isl_error_invalid, "index out of bounds", goto error); + if (type1 == type2 && pos1 == pos2) + return isl_basic_map_universe(space); + bmap = isl_basic_map_alloc_space(isl_space_copy(space), 0, 1, 0); i = isl_basic_map_alloc_equality(bmap); if (i < 0) diff --git a/isl_test.c b/isl_test.c index 4d9945e..76e5086 100644 --- a/isl_test.c +++ b/isl_test.c @@ -2850,6 +2850,31 @@ int test_fixed_power(isl_ctx *ctx) return 0; } +int test_slice(isl_ctx *ctx) +{ + const char *str; + isl_map *map; + int equal; + + str = "{ [i] -> [j] }"; + map = isl_map_read_from_str(ctx, str); + map = isl_map_equate(map, isl_dim_in, 0, isl_dim_out, 0); + equal = map_check_equal(map, "{ [i] -> [i] }"); + isl_map_free(map); + if (equal < 0) + return -1; + + str = "{ [i] -> [j] }"; + map = isl_map_read_from_str(ctx, str); + map = isl_map_equate(map, isl_dim_in, 0, isl_dim_in, 0); + equal = map_check_equal(map, "{ [i] -> [j] }"); + isl_map_free(map); + if (equal < 0) + return -1; + + return 0; +} + int main() { struct isl_ctx *ctx; @@ -2858,6 +2883,8 @@ int main() assert(srcdir); ctx = isl_ctx_alloc(); + if (test_slice(ctx) < 0) + goto error; if (test_fixed_power(ctx) < 0) goto error; if (test_sample(ctx) < 0) -- 2.7.4