From 2143be67b4e2cf5fcfddfc3766cda5a30c316043 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sat, 16 Oct 2010 14:50:59 +0200 Subject: [PATCH] isl_stream_read_map: properly parse nested spaces Signed-off-by: Sven Verdoolaege --- isl_input.c | 21 ++++++++++++++------- isl_test.c | 11 +++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/isl_input.c b/isl_input.c index f1741433..a7eb860d 100644 --- a/isl_input.c +++ b/isl_input.c @@ -705,18 +705,25 @@ static __isl_give isl_basic_map *read_tuple(struct isl_stream *s, isl_token_free(tok); if (type != isl_dim_param && next_is_tuple(s)) { isl_dim *dim = isl_basic_map_get_dim(bmap); + int nparam = isl_dim_size(dim, isl_dim_param); + int n_in = isl_dim_size(dim, isl_dim_in); isl_basic_map *nested; - dim = isl_dim_drop(dim, isl_dim_in, 0, - isl_dim_size(dim, isl_dim_in)); - dim = isl_dim_drop(dim, isl_dim_out, 0, - isl_dim_size(dim, isl_dim_out)); + if (type == isl_dim_out) + dim = isl_dim_move(dim, isl_dim_param, nparam, + isl_dim_in, 0, n_in); nested = isl_basic_map_alloc_dim(dim, 0, 0, 0); nested = read_nested_tuple(s, nested, v); if (type == isl_dim_in) { - isl_basic_map_free(bmap); - bmap = isl_basic_map_reverse(nested); + nested = isl_basic_map_reverse(nested); + bmap = isl_basic_map_intersect(nested, bmap); } else { - bmap = isl_basic_map_apply_range(bmap, nested); + isl_basic_set *bset; + dim = isl_dim_range(isl_basic_map_get_dim(nested)); + dim = isl_dim_drop(dim, isl_dim_param, nparam, n_in); + dim = isl_dim_join(isl_basic_map_get_dim(bmap), dim); + bset = isl_basic_map_domain(bmap); + nested = isl_basic_map_reset_dim(nested, dim); + bmap = isl_basic_map_intersect_domain(nested, bset); } } else bmap = read_var_list(s, bmap, type, v); diff --git a/isl_test.c b/isl_test.c index 4aa9fa70..b73b642d 100644 --- a/isl_test.c +++ b/isl_test.c @@ -18,6 +18,15 @@ static char *srcdir; +void test_parse_map(isl_ctx *ctx, const char *str) +{ + isl_map *map; + + map = isl_map_read_from_str(ctx, str, -1); + assert(map); + isl_map_free(map); +} + void test_parse(struct isl_ctx *ctx) { isl_map *map; @@ -32,6 +41,8 @@ void test_parse(struct isl_ctx *ctx) map = isl_map_read_from_str(ctx, str, -1); assert(map); isl_map_free(map); + + test_parse_map(ctx, "{[[s] -> A[i]] -> [[s+1] -> A[i]]}"); } void test_read(struct isl_ctx *ctx) -- 2.11.4.GIT