From 1591a99907bc7b1d54385af97ae53d66423d8e22 Mon Sep 17 00:00:00 2001 From: Sven Verdoolaege Date: Sun, 14 Apr 2013 18:44:23 +0200 Subject: [PATCH] add isl_map_floordiv_val Signed-off-by: Sven Verdoolaege --- include/isl/map.h | 2 ++ isl_map.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/isl/map.h b/include/isl/map.h index 0edc5205..421c8bc8 100644 --- a/include/isl/map.h +++ b/include/isl/map.h @@ -232,6 +232,8 @@ struct isl_basic_map *isl_basic_map_floordiv(struct isl_basic_map *bmap, struct isl_map *isl_map_sum(struct isl_map *map1, struct isl_map *map2); struct isl_map *isl_map_neg(struct isl_map *map); struct isl_map *isl_map_floordiv(struct isl_map *map, isl_int d); +__isl_give isl_map *isl_map_floordiv_val(__isl_take isl_map *map, + __isl_take isl_val *d); __isl_export int isl_basic_map_is_equal( diff --git a/isl_map.c b/isl_map.c index f1d02bf0..164e075d 100644 --- a/isl_map.c +++ b/isl_map.c @@ -3852,6 +3852,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; -- 2.11.4.GIT