isl_aff.c: extract isl_local_space_get_active
authorSven Verdoolaege <skimo@kotnet.org>
Mon, 29 Aug 2011 13:00:33 +0000 (15:00 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sat, 3 Sep 2011 19:43:08 +0000 (21:43 +0200)
This function will also be useful for our new implementation of isl_constraints.

Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
isl_aff.c
isl_local_space.c
isl_local_space_private.h

index 4ebf7b3..26095b2 100644 (file)
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -931,34 +931,6 @@ int isl_aff_is_empty(__isl_keep isl_aff *aff)
        return 0;
 }
 
-/* Set active[i] to 1 if the dimension at position i is involved
- * in the affine expression.
- */
-static int set_active(__isl_keep isl_aff *aff, int *active)
-{
-       int i, j;
-       unsigned total;
-       unsigned offset;
-
-       if (!aff || !active)
-               return -1;
-
-       total = aff->v->size - 2;
-       for (i = 0; i < total; ++i)
-               active[i] = !isl_int_is_zero(aff->v->el[2 + i]);
-
-       offset = isl_local_space_offset(aff->ls, isl_dim_div) - 1;
-       for (i = aff->ls->div->n_row - 1; i >= 0; --i) {
-               if (!active[offset + i])
-                       continue;
-               for (j = 0; j < total; ++j)
-                       active[j] |=
-                               !isl_int_is_zero(aff->ls->div->row[i][2 + j]);
-       }
-
-       return 0;
-}
-
 /* Check whether the given affine expression has non-zero coefficient
  * for any dimension in the given range or if any of these dimensions
  * appear with non-zero coefficients in any of the integer divisions
@@ -982,9 +954,8 @@ int isl_aff_involves_dims(__isl_keep isl_aff *aff,
                isl_die(ctx, isl_error_invalid,
                        "range out of bounds", return -1);
 
-       active = isl_calloc_array(ctx, int,
-                                 isl_local_space_dim(aff->ls, isl_dim_all));
-       if (set_active(aff, active) < 0)
+       active = isl_local_space_get_active(aff->ls, aff->v->el + 2);
+       if (!active)
                goto error;
 
        first += isl_local_space_offset(aff->ls, type) - 1;
index e051465..40ef8f4 100644 (file)
@@ -658,3 +658,35 @@ int isl_local_space_is_div_constraint(__isl_keep isl_local_space *ls,
 
        return 1;
 }
+
+/*
+ * Set active[i] to 1 if the dimension at position i is involved
+ * in the linear expression l.
+ */
+int *isl_local_space_get_active(__isl_keep isl_local_space *ls, isl_int *l)
+{
+       int i, j;
+       isl_ctx *ctx;
+       int *active = NULL;
+       unsigned total;
+       unsigned offset;
+
+       ctx = isl_local_space_get_ctx(ls);
+       total = isl_local_space_dim(ls, isl_dim_all);
+       active = isl_calloc_array(ctx, int, total);
+       if (!active)
+               return NULL;
+
+       for (i = 0; i < total; ++i)
+               active[i] = !isl_int_is_zero(l[i]);
+
+       offset = isl_local_space_offset(ls, isl_dim_div) - 1;
+       for (i = ls->div->n_row - 1; i >= 0; --i) {
+               if (!active[offset + i])
+                       continue;
+               for (j = 0; j < total; ++j)
+                       active[j] |= !isl_int_is_zero(ls->div->row[i][2 + j]);
+       }
+
+       return active;
+}
index 53f7d91..85ecfe1 100644 (file)
@@ -43,4 +43,6 @@ __isl_give isl_local_space *isl_local_space_realign(
 int isl_local_space_is_div_constraint(__isl_keep isl_local_space *ls,
        isl_int *constraint, unsigned div);
 
+int *isl_local_space_get_active(__isl_keep isl_local_space *ls, isl_int *l);
+
 #endif