return umap;
}
+ model = isl_dim_drop(model, isl_dim_in,
+ 0, isl_dim_size(model, isl_dim_in));
+ model = isl_dim_drop(model, isl_dim_out,
+ 0, isl_dim_size(model, isl_dim_out));
+
data.exp = isl_parameter_alignment_reordering(umap->dim, model);
if (!data.exp)
goto error;
return isl_union_map_copy(uset);
}
-void isl_union_map_free(__isl_take isl_union_map *umap)
+void *isl_union_map_free(__isl_take isl_union_map *umap)
{
if (!umap)
- return;
+ return NULL;
if (--umap->ref > 0)
- return;
+ return NULL;
isl_hash_table_foreach(umap->dim->ctx, &umap->table,
&free_umap_entry, NULL);
isl_hash_table_clear(&umap->table);
isl_dim_free(umap->dim);
free(umap);
+ return NULL;
}
-void isl_union_set_free(__isl_take isl_union_set *uset)
+void *isl_union_set_free(__isl_take isl_union_set *uset)
{
- isl_union_map_free(uset);
+ return isl_union_map_free(uset);
}
static int has_dim(const void *entry, const void *val)
uint32_t hash;
struct isl_hash_table_entry *entry;
+ if (!map || !umap)
+ goto error;
+
if (isl_map_plain_is_empty(map)) {
isl_map_free(map);
return umap;
}
+ if (!isl_dim_match(map->dim, isl_dim_param, umap->dim, isl_dim_param)) {
+ umap = isl_union_map_align_params(umap, isl_map_get_dim(map));
+ map = isl_map_align_params(map, isl_union_map_get_dim(umap));
+ }
+
umap = isl_union_map_cow(umap);
if (!map || !umap)
goto error;
- isl_assert(map->ctx, isl_dim_match(map->dim, isl_dim_param, umap->dim,
- isl_dim_param), goto error);
-
hash = isl_dim_get_hash(map->dim);
entry = isl_hash_table_find(umap->dim->ctx, &umap->table, hash,
&has_dim, map->dim, 1);
return -1;
}
-__isl_give isl_map *isl_union_map_copy_map(__isl_keep isl_union_map *umap)
+__isl_give isl_map *isl_map_from_union_map(__isl_take isl_union_map *umap)
{
+ isl_ctx *ctx;
isl_map *map = NULL;
- if (!umap || umap->table.n == 0)
+ if (!umap)
return NULL;
+ ctx = isl_union_map_get_ctx(umap);
+ if (umap->table.n != 1)
+ isl_die(ctx, isl_error_invalid,
+ "union map needs to contain elements in exactly "
+ "one space", return isl_union_map_free(umap));
- isl_hash_table_foreach(umap->dim->ctx, &umap->table, ©_map, &map);
+ isl_hash_table_foreach(ctx, &umap->table, ©_map, &map);
+
+ isl_union_map_free(umap);
return map;
}
-__isl_give isl_set *isl_union_set_copy_set(__isl_keep isl_union_set *uset)
+__isl_give isl_set *isl_set_from_union_set(__isl_take isl_union_set *uset)
{
- return isl_union_map_copy_map(uset);
+ return isl_map_from_union_map(uset);
}
__isl_give isl_map *isl_union_map_extract_map(__isl_keep isl_union_map *umap,
int sv;
if (isl_union_map_n_map(umap) == 1) {
- isl_map *map = isl_union_map_copy_map(umap);
+ isl_map *map;
+ umap = isl_union_map_copy(umap);
+ map = isl_map_from_union_map(umap);
sv = isl_map_is_single_valued(map);
isl_map_free(map);
return sv;