isl_map_read: accept '*' in affine expressions
[platform/upstream/isl.git] / isl_affine_hull.c
index 17dd7d8..cc99009 100644 (file)
@@ -1,3 +1,12 @@
+/*
+ * Copyright 2008-2009 Katholieke Universiteit Leuven
+ *
+ * Use of this software is governed by the GNU LGPLv2.1 license
+ *
+ * Written by Sven Verdoolaege, K.U.Leuven, Departement
+ * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
+ */
+
 #include "isl_ctx.h"
 #include "isl_seq.h"
 #include "isl_set.h"
@@ -254,9 +263,9 @@ static struct isl_vec *outside_point(struct isl_tab *tab, isl_int *eq, int up)
                return NULL;
        isl_int_set_si(sample->el[0], 1);
        isl_seq_combine(sample->el + 1,
-               ctx->one, tab->bset->sample->el + 1,
+               ctx->one, tab->bmap->sample->el + 1,
                up ? ctx->one : ctx->negone, eq + 1, dim);
-       if (isl_basic_set_contains(tab->bset, sample))
+       if (isl_basic_map_contains(tab->bmap, sample))
                return sample;
        isl_vec_free(sample);
        sample = NULL;
@@ -435,7 +444,13 @@ static struct isl_basic_set *uset_affine_hull_bounded(struct isl_basic_set *bset
        tab = isl_tab_from_basic_set(bset);
        if (!tab)
                goto error;
-       tab->bset = isl_basic_set_copy(bset);
+       if (tab->empty) {
+               isl_tab_free(tab);
+               isl_vec_free(sample);
+               return isl_basic_set_set_to_empty(bset);
+       }
+       if (isl_tab_track_bset(tab, isl_basic_set_copy(bset)) < 0)
+               goto error;
 
        if (!sample) {
                struct isl_tab_undo *snap;
@@ -443,8 +458,8 @@ static struct isl_basic_set *uset_affine_hull_bounded(struct isl_basic_set *bset
                sample = isl_tab_sample(tab);
                if (isl_tab_rollback(tab, snap) < 0)
                        goto error;
-               isl_vec_free(tab->bset->sample);
-               tab->bset->sample = isl_vec_copy(sample);
+               isl_vec_free(tab->bmap->sample);
+               tab->bmap->sample = isl_vec_copy(sample);
        }
 
        if (!sample)
@@ -540,7 +555,7 @@ struct isl_tab *isl_tab_detect_equalities(struct isl_tab *tab,
        isl_mat_free(tab->basis);
        tab->basis = NULL;
 
-       isl_assert(tab->mat->ctx, tab->bset, goto error);
+       isl_assert(tab->mat->ctx, tab->bmap, goto error);
        isl_assert(tab->mat->ctx, tab->samples, goto error);
        isl_assert(tab->mat->ctx, tab->samples->n_col == 1 + tab->n_var, goto error);
        isl_assert(tab->mat->ctx, tab->n_sample > tab->n_outside, goto error);
@@ -554,8 +569,8 @@ struct isl_tab *isl_tab_detect_equalities(struct isl_tab *tab,
 
        isl_seq_cpy(sample->el, tab->samples->row[tab->n_outside], sample->size);
 
-       isl_vec_free(tab->bset->sample);
-       tab->bset->sample = isl_vec_copy(sample);
+       isl_vec_free(tab->bmap->sample);
+       tab->bmap->sample = isl_vec_copy(sample);
 
        if (tab->n_unbounded == 0)
                hull = isl_basic_set_from_vec(isl_vec_copy(sample));