isl_input.c: clean up read_disjuncts
[platform/upstream/isl.git] / isl_range.c
index 538a236..359ae28 100644 (file)
@@ -1,5 +1,5 @@
-#include <isl_constraint.h>
-#include <isl_set.h>
+#include <isl/constraint.h>
+#include <isl/set.h>
 #include <isl_polynomial_private.h>
 #include <isl_morph.h>
 #include <isl_range.h>
@@ -173,12 +173,13 @@ struct isl_fixed_sign_data {
 
 /* Add term "term" to data->poly if it has sign data->sign.
  * The sign is determined based on the signs of the parameters
- * and variables in data->signs.
+ * and variables in data->signs.  The integer divisions, if
+ * any, are assumed to be non-negative.
  */
 static int collect_fixed_sign_terms(__isl_take isl_term *term, void *user)
 {
        struct isl_fixed_sign_data *data = (struct isl_fixed_sign_data *)user;
-       isl_int n, d;
+       isl_int n;
        int i;
        int sign;
        unsigned nparam;
@@ -190,14 +191,9 @@ static int collect_fixed_sign_terms(__isl_take isl_term *term, void *user)
        nparam = isl_term_dim(term, isl_dim_param);
        nvar = isl_term_dim(term, isl_dim_set);
 
-       isl_assert(isl_term_get_ctx(term), isl_term_dim(term, isl_dim_div) == 0,
-                       return -1);
-
        isl_int_init(n);
-       isl_int_init(d);
 
        isl_term_get_num(term, &n);
-       isl_term_get_den(term, &d);
 
        sign = isl_int_sgn(n);
        for (i = 0; i < nparam; ++i) {
@@ -221,15 +217,15 @@ static int collect_fixed_sign_terms(__isl_take isl_term *term, void *user)
                isl_term_free(term);
 
        isl_int_clear(n);
-       isl_int_clear(d);
 
        return 0;
 }
 
 /* Construct and return a polynomial that consists of the terms
- * in "poly" that have sign "sign".
+ * in "poly" that have sign "sign".  The integer divisions, if
+ * any, are assumed to be non-negative.
  */
-static __isl_give isl_qpolynomial *fixed_sign_terms(
+__isl_give isl_qpolynomial *isl_qpolynomial_terms_of_sign(
        __isl_keep isl_qpolynomial *poly, int *signs, int sign)
 {
        struct isl_fixed_sign_data data = { signs, sign };
@@ -325,8 +321,8 @@ static int propagate_on_bound_pair(__isl_take isl_constraint *lower,
                u = bound2poly(upper, isl_dim_copy(dim), nvar, 1);
                l = bound2poly(lower, dim, nvar, -1);
 
-               pos = fixed_sign_terms(data->poly, data->signs, sign);
-               neg = fixed_sign_terms(data->poly, data->signs, -sign);
+               pos = isl_qpolynomial_terms_of_sign(data->poly, data->signs, sign);
+               neg = isl_qpolynomial_terms_of_sign(data->poly, data->signs, -sign);
 
                pos = isl_qpolynomial_substitute(pos, isl_dim_set, nvar, 1, &u);
                neg = isl_qpolynomial_substitute(neg, isl_dim_set, nvar, 1, &l);
@@ -354,6 +350,7 @@ static int propagate_on_bound_pair(__isl_take isl_constraint *lower,
 static int propagate_on_domain(__isl_take isl_basic_set *bset,
        __isl_take isl_qpolynomial *poly, struct range_data *data)
 {
+       isl_ctx *ctx;
        isl_qpolynomial *save_poly = data->poly;
        int save_monotonicity = data->monotonicity;
        unsigned d;
@@ -361,8 +358,9 @@ static int propagate_on_domain(__isl_take isl_basic_set *bset,
        if (!bset || !poly)
                goto error;
 
+       ctx = isl_basic_set_get_ctx(bset);
        d = isl_basic_set_dim(bset, isl_dim_set);
-       isl_assert(bset->ctx, d >= 1, goto error);
+       isl_assert(ctx, d >= 1, goto error);
 
        if (isl_qpolynomial_is_cst(poly, NULL, NULL)) {
                bset = isl_basic_set_project_out(bset, isl_dim_set, 0, d);
@@ -399,13 +397,15 @@ error:
 static int basic_guarded_poly_bound(__isl_take isl_basic_set *bset, void *user)
 {
        struct range_data *data = (struct range_data *)user;
+       isl_ctx *ctx;
        unsigned nparam = isl_basic_set_dim(bset, isl_dim_param);
        unsigned dim = isl_basic_set_dim(bset, isl_dim_set);
        int r;
 
        data->signs = NULL;
 
-       data->signs = isl_alloc_array(bset->ctx, int,
+       ctx = isl_basic_set_get_ctx(bset);
+       data->signs = isl_alloc_array(ctx, int,
                                        isl_basic_set_dim(bset, isl_dim_all));
 
        if (isl_basic_set_dims_get_sign(bset, isl_dim_set, 0, dim,