isl_tab_track_bmap: make sure we have a unique copy of the basic map
[platform/upstream/isl.git] / isl_tab.c
index 5151ab6..8cb307e 100644 (file)
--- a/isl_tab.c
+++ b/isl_tab.c
@@ -2184,8 +2184,8 @@ int isl_tab_add_div(struct isl_tab *tab, __isl_keep isl_vec *div,
        if (nonneg)
                tab->var[r].is_nonneg = 1;
 
-       tab->bmap = isl_basic_map_extend_dim(tab->bmap,
-               isl_basic_map_get_dim(tab->bmap), 1, 0, 2);
+       tab->bmap = isl_basic_map_extend_space(tab->bmap,
+               isl_basic_map_get_space(tab->bmap), 1, 0, 2);
        k = isl_basic_map_alloc_div(tab->bmap);
        if (k < 0)
                return -1;
@@ -3231,12 +3231,13 @@ error:
 
 int isl_tab_track_bmap(struct isl_tab *tab, __isl_take isl_basic_map *bmap)
 {
+       bmap = isl_basic_map_cow(bmap);
        if (!tab || !bmap)
                goto error;
 
-       isl_assert(tab->mat->ctx, tab->n_eq == bmap->n_eq, return -1);
+       isl_assert(tab->mat->ctx, tab->n_eq == bmap->n_eq, goto error);
        isl_assert(tab->mat->ctx,
-                   tab->n_con == bmap->n_eq + bmap->n_ineq, return -1);
+                   tab->n_con == bmap->n_eq + bmap->n_ineq, goto error);
 
        tab->bmap = bmap;