add isl_pw_aff_union_opt
[platform/upstream/isl.git] / isl_union_map.c
index 206e41b..ec53f93 100644 (file)
@@ -154,6 +154,11 @@ __isl_give isl_union_map *isl_union_map_align_params(
                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;
@@ -260,19 +265,24 @@ __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;
 
+       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);
@@ -370,23 +380,6 @@ static int copy_map(void **entry, void *user)
        return -1;
 }
 
-__isl_give isl_map *isl_union_map_copy_map(__isl_keep isl_union_map *umap)
-{
-       isl_map *map = NULL;
-
-       if (!umap || umap->table.n == 0)
-               return NULL;
-
-       isl_hash_table_foreach(umap->dim->ctx, &umap->table, &copy_map, &map);
-
-       return map;
-}
-
-__isl_give isl_set *isl_union_set_copy_set(__isl_keep isl_union_set *uset)
-{
-       return isl_union_map_copy_map(uset);
-}
-
 __isl_give isl_map *isl_map_from_union_map(__isl_take isl_union_map *umap)
 {
        isl_ctx *ctx;
@@ -1677,7 +1670,9 @@ int isl_union_map_is_single_valued(__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;