From 09de98975d4e1a05ab1da654009bd4f9b6bcc034 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Tue, 6 Sep 2016 14:42:46 +0200 Subject: [PATCH] extract out shared isl_map_space_has_equal_params This reduces the dependence on the internal representation. Signed-off-by: Sven Verdoolaege --- isl_map.c | 31 ++++++++++++++++++++++++++++--- isl_map_private.h | 2 ++ isl_union_map.c | 6 +++++- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/isl_map.c b/isl_map.c index 4d17346a..d02301c5 100644 --- a/isl_map.c +++ b/isl_map.c @@ -11178,6 +11178,7 @@ __isl_give isl_map *isl_map_align_params(__isl_take isl_map *map, __isl_take isl_space *model) { isl_ctx *ctx; + isl_bool aligned; if (!map || !model) goto error; @@ -11188,7 +11189,10 @@ __isl_give isl_map *isl_map_align_params(__isl_take isl_map *map, "model has unnamed parameters", goto error); if (isl_map_check_named_params(map) < 0) goto error; - if (!isl_space_match(map->dim, isl_dim_param, model, isl_dim_param)) { + aligned = isl_map_space_has_equal_params(map, model); + if (aligned < 0) + goto error; + if (!aligned) { isl_reordering *exp; model = isl_space_drop_dims(model, isl_dim_in, @@ -11270,6 +11274,17 @@ isl_bool isl_basic_set_space_has_equal_params(__isl_keep isl_basic_set *bset, return isl_space_match(bset_space, isl_dim_param, space, isl_dim_param); } +/* Do "map" and "space" have the same parameters? + */ +isl_bool isl_map_space_has_equal_params(__isl_keep isl_map *map, + __isl_keep isl_space *space) +{ + isl_space *map_space; + + map_space = isl_map_peek_space(map); + return isl_space_match(map_space, isl_dim_param, space, isl_dim_param); +} + /* Align the parameters of "bset" to those of "model", introducing * additional parameters if needed. */ @@ -12677,10 +12692,15 @@ error: __isl_give isl_map *isl_map_preimage_multi_aff(__isl_take isl_map *map, enum isl_dim_type type, __isl_take isl_multi_aff *ma) { + isl_bool aligned; + if (!map || !ma) goto error; - if (isl_space_match(map->dim, isl_dim_param, ma->space, isl_dim_param)) + aligned = isl_map_space_has_equal_params(map, ma->space); + if (aligned < 0) + goto error; + if (aligned) return map_preimage_multi_aff(map, type, ma); if (isl_map_check_named_params(map) < 0) @@ -12797,10 +12817,15 @@ error: __isl_give isl_map *isl_map_preimage_pw_multi_aff(__isl_take isl_map *map, enum isl_dim_type type, __isl_take isl_pw_multi_aff *pma) { + isl_bool aligned; + if (!map || !pma) goto error; - if (isl_space_match(map->dim, isl_dim_param, pma->dim, isl_dim_param)) + aligned = isl_map_space_has_equal_params(map, pma->dim); + if (aligned < 0) + goto error; + if (aligned) return isl_map_preimage_pw_multi_aff_aligned(map, type, pma); if (isl_map_check_named_params(map) < 0) diff --git a/isl_map_private.h b/isl_map_private.h index 0fcfa138..a72863c4 100644 --- a/isl_map_private.h +++ b/isl_map_private.h @@ -440,6 +440,8 @@ isl_bool isl_map_has_equal_params(__isl_keep isl_map *map1, __isl_keep isl_map *map2); isl_bool isl_basic_set_space_has_equal_params(__isl_keep isl_basic_set *bset, __isl_keep isl_space *space); +isl_bool isl_map_space_has_equal_params(__isl_keep isl_map *map, + __isl_keep isl_space *space); __isl_give isl_map *isl_map_align_params_map_map_and( __isl_take isl_map *map1, __isl_take isl_map *map2, diff --git a/isl_union_map.c b/isl_union_map.c index 929ca389..e56afd2a 100644 --- a/isl_union_map.c +++ b/isl_union_map.c @@ -346,6 +346,7 @@ __isl_give isl_union_map *isl_union_map_add_map(__isl_take isl_union_map *umap, { uint32_t hash; struct isl_hash_table_entry *entry; + isl_bool aligned; if (!map || !umap) goto error; @@ -355,7 +356,10 @@ __isl_give isl_union_map *isl_union_map_add_map(__isl_take isl_union_map *umap, return umap; } - if (!isl_space_match(map->dim, isl_dim_param, umap->dim, isl_dim_param)) { + aligned = isl_map_space_has_equal_params(map, umap->dim); + if (aligned < 0) + goto error; + if (!aligned) { umap = isl_union_map_align_params(umap, isl_map_get_space(map)); map = isl_map_align_params(map, isl_union_map_get_space(umap)); } -- 2.11.4.GIT