X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=bound.c;h=a0772b7b98e87a756ad32f200b631f3cc7369885;hb=de51a9bc4da5dd3f1f9f57c2362da6f9752c44e0;hp=add58dc1d397bd2405e39d964ba3de7c8674cc66;hpb=7790c83aff93eb8352bd37e340c7ff9956315b8b;p=platform%2Fupstream%2Fisl.git diff --git a/bound.c b/bound.c index add58dc..a0772b7 100644 --- a/bound.c +++ b/bound.c @@ -1,7 +1,8 @@ #include -#include +#include #include #include +#include struct bound_options { struct isl_options *isl; @@ -10,15 +11,15 @@ struct bound_options { int continue_on_error; }; -struct isl_arg bound_options_arg[] = { -ISL_ARG_CHILD(struct bound_options, isl, "isl", isl_options_arg, "isl options") +ISL_ARGS_START(struct bound_options, bound_options_args) +ISL_ARG_CHILD(struct bound_options, isl, "isl", &isl_options_args, + "isl options") ISL_ARG_BOOL(struct bound_options, verify, 'T', "verify", 0, NULL) ISL_ARG_BOOL(struct bound_options, print_all, 'A', "print-all", 0, NULL) ISL_ARG_BOOL(struct bound_options, continue_on_error, '\0', "continue-on-error", 0, NULL) -ISL_ARG_END -}; +ISL_ARGS_END -ISL_ARG_DEF(bound_options, struct bound_options, bound_options_arg) +ISL_ARG_DEF(bound_options, struct bound_options, bound_options_args) static __isl_give isl_set *set_bounds(__isl_take isl_set *set) { @@ -50,17 +51,18 @@ struct verify_point_bound { int exact; int error; - isl_pw_qpolynomial *pwqp; isl_pw_qpolynomial_fold *pwf; + isl_pw_qpolynomial_fold *bound; }; static int verify_point(__isl_take isl_point *pnt, void *user) { int i; + unsigned nvar; unsigned nparam; struct verify_point_bound *vpb = (struct verify_point_bound *) user; isl_int t; - isl_pw_qpolynomial *pwqp; + isl_pw_qpolynomial_fold *pwf; isl_qpolynomial *bound = NULL; isl_qpolynomial *opt = NULL; isl_set *dom = NULL; @@ -68,7 +70,6 @@ static int verify_point(__isl_take isl_point *pnt, void *user) int bounded; int sign; int ok; - int cst; FILE *out = vpb->options->print_all ? stdout : stderr; vpb->n--; @@ -83,33 +84,37 @@ static int verify_point(__isl_take isl_point *pnt, void *user) isl_int_init(t); - pwqp = isl_pw_qpolynomial_copy(vpb->pwqp); + pwf = isl_pw_qpolynomial_fold_copy(vpb->pwf); - nparam = isl_pw_qpolynomial_dim(pwqp, isl_dim_param); + nparam = isl_pw_qpolynomial_fold_dim(pwf, isl_dim_param); for (i = 0; i < nparam; ++i) { isl_point_get_coordinate(pnt, isl_dim_param, i, &t); - pwqp = isl_pw_qpolynomial_fix_dim(pwqp, isl_dim_param, i, t); + pwf = isl_pw_qpolynomial_fold_fix_dim(pwf, isl_dim_param, i, t); } - bound = isl_pw_qpolynomial_fold_eval(isl_pw_qpolynomial_fold_copy(vpb->pwf), - isl_point_copy(pnt)); + bound = isl_pw_qpolynomial_fold_eval( + isl_pw_qpolynomial_fold_copy(vpb->bound), + isl_point_copy(pnt)); - dom = isl_pw_qpolynomial_domain(isl_pw_qpolynomial_copy(pwqp)); + dom = isl_pw_qpolynomial_fold_domain(isl_pw_qpolynomial_fold_copy(pwf)); bounded = isl_set_is_bounded(dom); if (bounded < 0) goto error; if (!bounded) - opt = isl_pw_qpolynomial_eval(isl_pw_qpolynomial_copy(pwqp), + opt = isl_pw_qpolynomial_fold_eval( + isl_pw_qpolynomial_fold_copy(pwf), isl_set_sample_point(isl_set_copy(dom))); else if (sign > 0) - opt = isl_pw_qpolynomial_max(isl_pw_qpolynomial_copy(pwqp)); + opt = isl_pw_qpolynomial_fold_max(isl_pw_qpolynomial_fold_copy(pwf)); else - opt = isl_pw_qpolynomial_min(isl_pw_qpolynomial_copy(pwqp)); + opt = isl_pw_qpolynomial_fold_min(isl_pw_qpolynomial_fold_copy(pwf)); + nvar = isl_set_dim(dom, isl_dim_set); + opt = isl_qpolynomial_project_domain_on_params(opt); if (vpb->exact && bounded) - ok = isl_qpolynomial_is_equal(opt, bound); + ok = isl_qpolynomial_plain_is_equal(opt, bound); else if (sign > 0) ok = isl_qpolynomial_le_cst(opt, bound); else @@ -143,7 +148,7 @@ error: ok = 0; } - isl_pw_qpolynomial_free(pwqp); + isl_pw_qpolynomial_fold_free(pwf); isl_qpolynomial_free(bound); isl_qpolynomial_free(opt); isl_point_free(pnt); @@ -160,8 +165,8 @@ error: return (vpb->n >= 1 && ok) ? 0 : -1; } -static int check_solution(__isl_take isl_pw_qpolynomial *pwqp, - __isl_take isl_pw_qpolynomial_fold *pwf, int exact, +static int check_solution(__isl_take isl_pw_qpolynomial_fold *pwf, + __isl_take isl_pw_qpolynomial_fold *bound, int exact, struct bound_options *options) { struct verify_point_bound vpb; @@ -170,9 +175,8 @@ static int check_solution(__isl_take isl_pw_qpolynomial *pwqp, isl_set *context; int i, r, n; - dom = isl_pw_qpolynomial_domain(isl_pw_qpolynomial_copy(pwqp)); - context = isl_set_remove(isl_set_copy(dom), isl_dim_set, - 0, isl_set_dim(dom, isl_dim_set)); + dom = isl_pw_qpolynomial_fold_domain(isl_pw_qpolynomial_fold_copy(pwf)); + context = isl_set_params(isl_set_copy(dom)); context = isl_set_remove_divs(context); context = set_bounds(context); @@ -188,8 +192,8 @@ static int check_solution(__isl_take isl_pw_qpolynomial *pwqp, isl_int_clear(count); vpb.options = options; - vpb.pwqp = pwqp; vpb.pwf = pwf; + vpb.bound = bound; vpb.n = n; vpb.stride = n > 70 ? 1 + (n + 1)/70 : 1; vpb.error = 0; @@ -206,8 +210,8 @@ static int check_solution(__isl_take isl_pw_qpolynomial *pwqp, isl_set_free(context); isl_set_free(dom); - isl_pw_qpolynomial_free(pwqp); isl_pw_qpolynomial_fold_free(pwf); + isl_pw_qpolynomial_fold_free(bound); if (!options->print_all) printf("\n"); @@ -223,10 +227,10 @@ static int check_solution(__isl_take isl_pw_qpolynomial *pwqp, int main(int argc, char **argv) { isl_ctx *ctx; - isl_pw_qpolynomial *pwqp; - isl_pw_qpolynomial *copy; + isl_pw_qpolynomial_fold *copy; isl_pw_qpolynomial_fold *pwf; struct isl_stream *s; + struct isl_obj obj; struct bound_options *options; int exact; int r = 0; @@ -235,15 +239,24 @@ int main(int argc, char **argv) assert(options); argc = bound_options_parse(options, argc, argv, ISL_ARG_ALL); - ctx = isl_ctx_alloc_with_options(bound_options_arg, options); + ctx = isl_ctx_alloc_with_options(&bound_options_args, options); s = isl_stream_new_file(ctx, stdin); - pwqp = isl_stream_read_pw_qpolynomial(s); + obj = isl_stream_read_obj(s); + if (obj.type == isl_obj_pw_qpolynomial) + pwf = isl_pw_qpolynomial_fold_from_pw_qpolynomial(isl_fold_max, + obj.v); + else if (obj.type == isl_obj_pw_qpolynomial_fold) + pwf = obj.v; + else { + obj.type->free(obj.v); + isl_die(ctx, isl_error_invalid, "invalid input", goto error); + } if (options->verify) - copy = isl_pw_qpolynomial_copy(pwqp); + copy = isl_pw_qpolynomial_fold_copy(pwf); - pwf = isl_pw_qpolynomial_bound(pwqp, isl_fold_max, &exact); + pwf = isl_pw_qpolynomial_fold_bound(pwf, &exact); pwf = isl_pw_qpolynomial_fold_coalesce(pwf); if (options->verify) { @@ -256,6 +269,7 @@ int main(int argc, char **argv) isl_pw_qpolynomial_fold_free(pwf); } +error: isl_stream_free(s); isl_ctx_free(ctx);