isl_map_gist_basic_map: remove alignment of context divs with all basic maps
[platform/upstream/isl.git] / isl_map_simplify.c
index a10da54..b3ceb80 100644 (file)
@@ -1271,6 +1271,10 @@ struct isl_basic_map *isl_basic_map_simplify(struct isl_basic_map *bmap)
                return NULL;
        while (progress) {
                progress = 0;
+               if (!bmap)
+                       break;
+               if (isl_basic_map_plain_is_empty(bmap))
+                       break;
                bmap = isl_basic_map_normalize_constraints(bmap);
                bmap = normalize_div_expressions(bmap);
                bmap = remove_duplicate_divs(bmap, &progress);
@@ -1359,9 +1363,12 @@ static int div_is_redundant(struct isl_basic_map *bmap, int div)
                        return 0;
        }
 
-       for (i = 0; i < bmap->n_div; ++i)
+       for (i = 0; i < bmap->n_div; ++i) {
+               if (isl_int_is_zero(bmap->div[i][0]))
+                       continue;
                if (!isl_int_is_zero(bmap->div[i][1+pos]))
                        return 0;
+       }
 
        return 1;
 }
@@ -2140,6 +2147,8 @@ static struct isl_basic_map *normalize_divs_in_context(
        for (i = 0; i < context->n_eq; ++i) {
                int k;
                k = isl_basic_map_alloc_equality(bmap);
+               if (k < 0)
+                       return isl_basic_map_free(bmap);
                isl_seq_cpy(bmap->eq[k], context->eq[i], 1 + total_context);
                isl_seq_clr(bmap->eq[k] + 1 + total_context,
                                isl_basic_map_total_dim(bmap) - total_context);
@@ -2173,6 +2182,8 @@ struct isl_basic_map *isl_basic_map_gist(struct isl_basic_map *bmap,
 
        bmap = isl_basic_map_remove_redundancies(bmap);
        context = isl_basic_map_remove_redundancies(context);
+       if (!context)
+               goto error;
 
        if (context->n_eq)
                bmap = normalize_divs_in_context(bmap, context);
@@ -2212,8 +2223,8 @@ __isl_give isl_map *isl_map_gist_basic_map(__isl_take isl_map *map,
                goto error;;
        isl_assert(map->ctx, isl_space_is_equal(map->dim, context->dim), goto error);
        map = isl_map_compute_divs(map);
-       for (i = 0; i < map->n; ++i)
-               context = isl_basic_map_align_divs(context, map->p[i]);
+       if (!map)
+               goto error;
        for (i = map->n - 1; i >= 0; --i) {
                map->p[i] = isl_basic_map_gist(map->p[i],
                                                isl_basic_map_copy(context));