X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_map.c;h=561f1c655d181a1cff23eed04d743fe4104ec58b;hb=19596bc4e5cd282b2e75d17077b1aaaeacbfd6f9;hp=f1d02bf0932448402a76c840cf8c5ad2871420a8;hpb=bebe6a21ae5f0d8eed204ad491154d3dfb916091;p=platform%2Fupstream%2Fisl.git diff --git a/isl_map.c b/isl_map.c index f1d02bf..561f1c6 100644 --- a/isl_map.c +++ b/isl_map.c @@ -2728,6 +2728,9 @@ int isl_basic_map_contains(struct isl_basic_map *bmap, struct isl_vec *vec) unsigned total; isl_int s; + if (!bmap || !vec) + return -1; + total = 1 + isl_basic_map_total_dim(bmap); if (total != vec->size) return -1; @@ -3852,6 +3855,26 @@ error: return NULL; } +/* Given a map A -> f(A) and an integer d, construct a map + * A -> floor(f(A)/d). + */ +__isl_give isl_map *isl_map_floordiv_val(__isl_take isl_map *map, + __isl_take isl_val *d) +{ + if (!map || !d) + goto error; + if (!isl_val_is_int(d)) + isl_die(isl_val_get_ctx(d), isl_error_invalid, + "expecting integer denominator", goto error); + map = isl_map_floordiv(map, d->n); + isl_val_free(d); + return map; +error: + isl_map_free(map); + isl_val_free(d); + return NULL; +} + static struct isl_basic_map *var_equal(struct isl_basic_map *bmap, unsigned pos) { int i; @@ -8047,6 +8070,8 @@ struct isl_basic_map *isl_basic_map_align_divs( src = isl_basic_map_order_divs(src); dst = isl_basic_map_cow(dst); + if (!dst) + return NULL; dst = isl_basic_map_extend_space(dst, isl_space_copy(dst->dim), src->n_div, 0, 2 * src->n_div); if (!dst) @@ -8094,8 +8119,11 @@ struct isl_map *isl_map_align_divs(struct isl_map *map) for (i = 1; i < map->n; ++i) map->p[0] = isl_basic_map_align_divs(map->p[0], map->p[i]); - for (i = 1; i < map->n; ++i) + for (i = 1; i < map->n; ++i) { map->p[i] = isl_basic_map_align_divs(map->p[i], map->p[0]); + if (!map->p[i]) + return isl_map_free(map); + } ISL_F_CLR(map, ISL_MAP_NORMALIZED); return map;