From 841d8705d630ffa53bbdc02bc52634ca4b8cc672 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sat, 14 Aug 2010 18:58:29 +0200 Subject: [PATCH] add cloog_union_domain_from_isl_union_set Signed-off-by: Sven Verdoolaege --- doc/cloog.texi | 4 ++++ include/cloog/isl/domain.h | 3 +++ source/isl/domain.c | 57 ++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/doc/cloog.texi b/doc/cloog.texi index 0dc0d19..af48936 100644 --- a/doc/cloog.texi +++ b/doc/cloog.texi @@ -1734,6 +1734,8 @@ There is also a backend dependent function for creating #include CloogUnionDomain *cloog_union_domain_from_isl_union_map( __isl_take isl_union_map *umap); +CloogUnionDomain *cloog_union_domain_from_isl_union_set( + __isl_take isl_union_set *uset); @end example @noindent The function @code{cloog_union_domain_from_isl_union_map} takes a @@ -1747,6 +1749,8 @@ spaces. The parameter names of the result are set to those of the input, but the iterator and scattering dimension names are left unspecified. The function consumes a reference to the given @code{isl_union_map}. +The function @code{cloog_union_domain_from_isl_union_set} is similar, +but takes unscattered domains as input. @node CloogStatement diff --git a/include/cloog/isl/domain.h b/include/cloog/isl/domain.h index 9252cc4..06c738f 100644 --- a/include/cloog/isl/domain.h +++ b/include/cloog/isl/domain.h @@ -4,6 +4,7 @@ #include #include #include +#include #if defined(__cplusplus) extern "C" @@ -23,6 +24,8 @@ CloogDomain *cloog_domain_from_isl_set(struct isl_set *set); CloogScattering *cloog_scattering_from_isl_map(struct isl_map *map); CloogUnionDomain *cloog_union_domain_from_isl_union_map( __isl_take isl_union_map *umap); +CloogUnionDomain *cloog_union_domain_from_isl_union_set( + __isl_take isl_union_set *uset); #if defined(__cplusplus) diff --git a/source/isl/domain.c b/source/isl/domain.c index 2c08a2e..294dae2 100644 --- a/source/isl/domain.c +++ b/source/isl/domain.c @@ -1170,7 +1170,7 @@ CloogDomain *cloog_domain_scatter(CloogDomain *domain, CloogScattering *scatt) return cloog_domain_from_isl_set(isl_set_from_map(map)); } -static int add_domain(__isl_take isl_map *map, void *user) +static int add_domain_from_map(__isl_take isl_map *map, void *user) { isl_dim *dim; const char *name; @@ -1217,7 +1217,7 @@ CloogUnionDomain *cloog_union_domain_from_isl_union_map( } isl_dim_free(dim); - if (isl_union_map_foreach_map(umap, &add_domain, &ud) < 0) { + if (isl_union_map_foreach_map(umap, &add_domain_from_map, &ud) < 0) { isl_union_map_free(umap); cloog_union_domain_free(ud); assert(0); @@ -1227,3 +1227,56 @@ CloogUnionDomain *cloog_union_domain_from_isl_union_map( return ud; } + +static int add_domain(__isl_take isl_set *set, void *user) +{ + isl_dim *dim; + const char *name; + CloogDomain *domain; + CloogUnionDomain **ud = (CloogUnionDomain **)user; + + dim = isl_set_get_dim(set); + name = isl_dim_get_tuple_name(dim, isl_dim_in); + domain = cloog_domain_from_isl_set(set); + *ud = cloog_union_domain_add_domain(*ud, name, domain, NULL, NULL); + isl_dim_free(dim); + + return 0; +} + +/** + * Construct a CloogUnionDomain from an isl_union_set. + * The statement names are set to the names of the + * spaces. The parameter names of the result are set to those of + * the input, but the iterator and scattering dimension names are + * left unspecified. + */ +CloogUnionDomain *cloog_union_domain_from_isl_union_set( + __isl_take isl_union_set *uset) +{ + int i; + int nparam; + isl_dim *dim; + CloogUnionDomain *ud; + + dim = isl_union_set_get_dim(uset); + nparam = isl_dim_size(dim, isl_dim_param); + + ud = cloog_union_domain_alloc(nparam); + + for (i = 0; i < nparam; ++i) { + const char *s = isl_dim_get_name(dim, isl_dim_param, i); + ud = cloog_union_domain_set_name(ud, CLOOG_PARAM, i, s); + } + isl_dim_free(dim); + + if (isl_union_set_foreach_set(uset, &add_domain, &ud) < 0) { + isl_union_set_free(uset); + cloog_union_domain_free(ud); + assert(0); + } + + isl_union_set_free(uset); + + return ud; +} -- 2.11.4.GIT