[polly] r299617 - Update to isl-0.18-417-gb9e7334
Tobias Grosser via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 5 20:41:47 PDT 2017
Author: grosser
Date: Wed Apr 5 22:41:47 2017
New Revision: 299617
URL: http://llvm.org/viewvc/llvm-project?rev=299617&view=rev
Log:
Update to isl-0.18-417-gb9e7334
This is a regular maintenance update.
Modified:
polly/trunk/lib/External/isl/GIT_HEAD_ID
polly/trunk/lib/External/isl/isl_aff.c
polly/trunk/lib/External/isl/isl_aff_private.h
polly/trunk/lib/External/isl/isl_convex_hull.c
polly/trunk/lib/External/isl/isl_map.c
polly/trunk/lib/External/isl/isl_map_private.h
polly/trunk/lib/External/isl/isl_map_simplify.c
polly/trunk/lib/External/isl/isl_mat.c
polly/trunk/lib/External/isl/isl_mat_private.h
polly/trunk/lib/External/isl/isl_seq.c
polly/trunk/lib/External/isl/isl_seq.h
polly/trunk/lib/External/isl/isl_transitive_closure.c
polly/trunk/lib/External/isl/isl_vertices.c
Modified: polly/trunk/lib/External/isl/GIT_HEAD_ID
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/GIT_HEAD_ID?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/GIT_HEAD_ID (original)
+++ polly/trunk/lib/External/isl/GIT_HEAD_ID Wed Apr 5 22:41:47 2017
@@ -1 +1 @@
-isl-0.18-410-gc253447
+isl-0.18-417-gb9e7334
Modified: polly/trunk/lib/External/isl/isl_aff.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_aff.c?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_aff.c (original)
+++ polly/trunk/lib/External/isl/isl_aff.c Wed Apr 5 22:41:47 2017
@@ -1274,36 +1274,6 @@ __isl_give isl_aff *isl_aff_remove_unuse
return aff;
}
-/* Given two affine expressions "p" of length p_len (including the
- * denominator and the constant term) and "subs" of length subs_len,
- * plug in "subs" for the variable at position "pos".
- * The variables of "subs" and "p" are assumed to match up to subs_len,
- * but "p" may have additional variables.
- * "v" is an initialized isl_int that can be used internally.
- *
- * In particular, if "p" represents the expression
- *
- * (a i + g)/m
- *
- * with i the variable at position "pos" and "subs" represents the expression
- *
- * f/d
- *
- * then the result represents the expression
- *
- * (a f + d g)/(m d)
- *
- */
-void isl_seq_substitute(isl_int *p, int pos, isl_int *subs,
- int p_len, int subs_len, isl_int v)
-{
- isl_int_set(v, p[1 + pos]);
- isl_int_set_si(p[1 + pos], 0);
- isl_seq_combine(p + 1, subs[0], p + 1, v, subs + 1, subs_len - 1);
- isl_seq_scale(p + subs_len, p + subs_len, subs[0], p_len - subs_len);
- isl_int_mul(p[0], p[0], subs[0]);
-}
-
/* Look for any divs in the aff->ls with a denominator equal to one
* and plug them into the affine expression and any subsequent divs
* that may reference the div.
Modified: polly/trunk/lib/External/isl/isl_aff_private.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_aff_private.h?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_aff_private.h (original)
+++ polly/trunk/lib/External/isl/isl_aff_private.h Wed Apr 5 22:41:47 2017
@@ -136,8 +136,6 @@ __isl_give isl_pw_multi_aff *isl_pw_mult
__isl_take isl_pw_multi_aff *pma,
enum isl_dim_type type, unsigned first, unsigned n);
-void isl_seq_substitute(isl_int *p, int pos, isl_int *subs,
- int p_len, int subs_len, isl_int v);
void isl_seq_preimage(isl_int *dst, isl_int *src,
__isl_keep isl_multi_aff *ma, int n_before, int n_after,
int n_div_ma, int n_div_bmap,
Modified: polly/trunk/lib/External/isl/isl_convex_hull.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_convex_hull.c?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_convex_hull.c (original)
+++ polly/trunk/lib/External/isl/isl_convex_hull.c Wed Apr 5 22:41:47 2017
@@ -156,53 +156,6 @@ error:
return -1;
}
-__isl_give isl_basic_map *isl_basic_map_set_rational(
- __isl_take isl_basic_map *bmap)
-{
- if (!bmap)
- return NULL;
-
- if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL))
- return bmap;
-
- bmap = isl_basic_map_cow(bmap);
- if (!bmap)
- return NULL;
-
- ISL_F_SET(bmap, ISL_BASIC_MAP_RATIONAL);
-
- return isl_basic_map_finalize(bmap);
-}
-
-__isl_give isl_basic_set *isl_basic_set_set_rational(
- __isl_take isl_basic_set *bset)
-{
- return isl_basic_map_set_rational(bset);
-}
-
-__isl_give isl_map *isl_map_set_rational(__isl_take isl_map *map)
-{
- int i;
-
- map = isl_map_cow(map);
- if (!map)
- return NULL;
- for (i = 0; i < map->n; ++i) {
- map->p[i] = isl_basic_map_set_rational(map->p[i]);
- if (!map->p[i])
- goto error;
- }
- return map;
-error:
- isl_map_free(map);
- return NULL;
-}
-
-__isl_give isl_set *isl_set_set_rational(__isl_take isl_set *set)
-{
- return isl_map_set_rational(set);
-}
-
static struct isl_basic_set *isl_basic_set_add_equality(
struct isl_basic_set *bset, isl_int *c)
{
Modified: polly/trunk/lib/External/isl/isl_map.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_map.c?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_map.c (original)
+++ polly/trunk/lib/External/isl/isl_map.c Wed Apr 5 22:41:47 2017
@@ -847,6 +847,53 @@ int isl_set_find_dim_by_name(__isl_keep
return isl_map_find_dim_by_name(set, type, name);
}
+/* Check whether equality i of bset is a pure stride constraint
+ * on a single dimension, i.e., of the form
+ *
+ * v = k e
+ *
+ * with k a constant and e an existentially quantified variable.
+ */
+isl_bool isl_basic_set_eq_is_stride(__isl_keep isl_basic_set *bset, int i)
+{
+ unsigned nparam;
+ unsigned d;
+ unsigned n_div;
+ int pos1;
+ int pos2;
+
+ if (!bset)
+ return isl_bool_error;
+
+ if (!isl_int_is_zero(bset->eq[i][0]))
+ return isl_bool_false;
+
+ nparam = isl_basic_set_dim(bset, isl_dim_param);
+ d = isl_basic_set_dim(bset, isl_dim_set);
+ n_div = isl_basic_set_dim(bset, isl_dim_div);
+
+ if (isl_seq_first_non_zero(bset->eq[i] + 1, nparam) != -1)
+ return isl_bool_false;
+ pos1 = isl_seq_first_non_zero(bset->eq[i] + 1 + nparam, d);
+ if (pos1 == -1)
+ return isl_bool_false;
+ if (isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + pos1 + 1,
+ d - pos1 - 1) != -1)
+ return isl_bool_false;
+
+ pos2 = isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + d, n_div);
+ if (pos2 == -1)
+ return isl_bool_false;
+ if (isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + d + pos2 + 1,
+ n_div - pos2 - 1) != -1)
+ return isl_bool_false;
+ if (!isl_int_is_one(bset->eq[i][1 + nparam + pos1]) &&
+ !isl_int_is_negone(bset->eq[i][1 + nparam + pos1]))
+ return isl_bool_false;
+
+ return isl_bool_true;
+}
+
/* Reset the user pointer on all identifiers of parameters and tuples
* of the space of "map".
*/
@@ -1969,6 +2016,71 @@ struct isl_basic_set *isl_basic_set_set_
return bset_from_bmap(isl_basic_map_set_to_empty(bset_to_bmap(bset)));
}
+__isl_give isl_basic_map *isl_basic_map_set_rational(
+ __isl_take isl_basic_map *bmap)
+{
+ if (!bmap)
+ return NULL;
+
+ if (ISL_F_ISSET(bmap, ISL_BASIC_MAP_RATIONAL))
+ return bmap;
+
+ bmap = isl_basic_map_cow(bmap);
+ if (!bmap)
+ return NULL;
+
+ ISL_F_SET(bmap, ISL_BASIC_MAP_RATIONAL);
+
+ return isl_basic_map_finalize(bmap);
+}
+
+__isl_give isl_basic_set *isl_basic_set_set_rational(
+ __isl_take isl_basic_set *bset)
+{
+ return isl_basic_map_set_rational(bset);
+}
+
+__isl_give isl_basic_set *isl_basic_set_set_integral(
+ __isl_take isl_basic_set *bset)
+{
+ if (!bset)
+ return NULL;
+
+ if (!ISL_F_ISSET(bset, ISL_BASIC_MAP_RATIONAL))
+ return bset;
+
+ bset = isl_basic_set_cow(bset);
+ if (!bset)
+ return NULL;
+
+ ISL_F_CLR(bset, ISL_BASIC_MAP_RATIONAL);
+
+ return isl_basic_set_finalize(bset);
+}
+
+__isl_give isl_map *isl_map_set_rational(__isl_take isl_map *map)
+{
+ int i;
+
+ map = isl_map_cow(map);
+ if (!map)
+ return NULL;
+ for (i = 0; i < map->n; ++i) {
+ map->p[i] = isl_basic_map_set_rational(map->p[i]);
+ if (!map->p[i])
+ goto error;
+ }
+ return map;
+error:
+ isl_map_free(map);
+ return NULL;
+}
+
+__isl_give isl_set *isl_set_set_rational(__isl_take isl_set *set)
+{
+ return isl_map_set_rational(set);
+}
+
/* Swap divs "a" and "b" in "bmap" (without modifying any of the constraints
* of "bmap").
*/
@@ -2008,6 +2120,205 @@ void isl_basic_set_swap_div(__isl_keep i
isl_basic_map_swap_div(bset, a, b);
}
+static void constraint_drop_vars(isl_int *c, unsigned n, unsigned rem)
+{
+ isl_seq_cpy(c, c + n, rem);
+ isl_seq_clr(c + rem, n);
+}
+
+/* Drop n dimensions starting at first.
+ *
+ * In principle, this frees up some extra variables as the number
+ * of columns remains constant, but we would have to extend
+ * the div array too as the number of rows in this array is assumed
+ * to be equal to extra.
+ */
+struct isl_basic_set *isl_basic_set_drop_dims(
+ struct isl_basic_set *bset, unsigned first, unsigned n)
+{
+ return isl_basic_map_drop(bset_to_bmap(bset), isl_dim_set, first, n);
+}
+
+/* Move "n" divs starting at "first" to the end of the list of divs.
+ */
+static struct isl_basic_map *move_divs_last(struct isl_basic_map *bmap,
+ unsigned first, unsigned n)
+{
+ isl_int **div;
+ int i;
+
+ if (first + n == bmap->n_div)
+ return bmap;
+
+ div = isl_alloc_array(bmap->ctx, isl_int *, n);
+ if (!div)
+ goto error;
+ for (i = 0; i < n; ++i)
+ div[i] = bmap->div[first + i];
+ for (i = 0; i < bmap->n_div - first - n; ++i)
+ bmap->div[first + i] = bmap->div[first + n + i];
+ for (i = 0; i < n; ++i)
+ bmap->div[bmap->n_div - n + i] = div[i];
+ free(div);
+ return bmap;
+error:
+ isl_basic_map_free(bmap);
+ return NULL;
+}
+
+/* Drop "n" dimensions of type "type" starting at "first".
+ *
+ * In principle, this frees up some extra variables as the number
+ * of columns remains constant, but we would have to extend
+ * the div array too as the number of rows in this array is assumed
+ * to be equal to extra.
+ */
+struct isl_basic_map *isl_basic_map_drop(struct isl_basic_map *bmap,
+ enum isl_dim_type type, unsigned first, unsigned n)
+{
+ int i;
+ unsigned dim;
+ unsigned offset;
+ unsigned left;
+
+ if (!bmap)
+ goto error;
+
+ dim = isl_basic_map_dim(bmap, type);
+ isl_assert(bmap->ctx, first + n <= dim, goto error);
+
+ if (n == 0 && !isl_space_is_named_or_nested(bmap->dim, type))
+ return bmap;
+
+ bmap = isl_basic_map_cow(bmap);
+ if (!bmap)
+ return NULL;
+
+ offset = isl_basic_map_offset(bmap, type) + first;
+ left = isl_basic_map_total_dim(bmap) - (offset - 1) - n;
+ for (i = 0; i < bmap->n_eq; ++i)
+ constraint_drop_vars(bmap->eq[i]+offset, n, left);
+
+ for (i = 0; i < bmap->n_ineq; ++i)
+ constraint_drop_vars(bmap->ineq[i]+offset, n, left);
+
+ for (i = 0; i < bmap->n_div; ++i)
+ constraint_drop_vars(bmap->div[i]+1+offset, n, left);
+
+ if (type == isl_dim_div) {
+ bmap = move_divs_last(bmap, first, n);
+ if (!bmap)
+ goto error;
+ if (isl_basic_map_free_div(bmap, n) < 0)
+ return isl_basic_map_free(bmap);
+ } else
+ bmap->dim = isl_space_drop_dims(bmap->dim, type, first, n);
+ if (!bmap->dim)
+ goto error;
+
+ ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED);
+ bmap = isl_basic_map_simplify(bmap);
+ return isl_basic_map_finalize(bmap);
+error:
+ isl_basic_map_free(bmap);
+ return NULL;
+}
+
+__isl_give isl_basic_set *isl_basic_set_drop(__isl_take isl_basic_set *bset,
+ enum isl_dim_type type, unsigned first, unsigned n)
+{
+ return bset_from_bmap(isl_basic_map_drop(bset_to_bmap(bset),
+ type, first, n));
+}
+
+struct isl_map *isl_map_drop(struct isl_map *map,
+ enum isl_dim_type type, unsigned first, unsigned n)
+{
+ int i;
+
+ if (!map)
+ goto error;
+
+ isl_assert(map->ctx, first + n <= isl_map_dim(map, type), goto error);
+
+ if (n == 0 && !isl_space_is_named_or_nested(map->dim, type))
+ return map;
+ map = isl_map_cow(map);
+ if (!map)
+ goto error;
+ map->dim = isl_space_drop_dims(map->dim, type, first, n);
+ if (!map->dim)
+ goto error;
+
+ for (i = 0; i < map->n; ++i) {
+ map->p[i] = isl_basic_map_drop(map->p[i], type, first, n);
+ if (!map->p[i])
+ goto error;
+ }
+ ISL_F_CLR(map, ISL_MAP_NORMALIZED);
+
+ return map;
+error:
+ isl_map_free(map);
+ return NULL;
+}
+
+struct isl_set *isl_set_drop(struct isl_set *set,
+ enum isl_dim_type type, unsigned first, unsigned n)
+{
+ return set_from_map(isl_map_drop(set_to_map(set), type, first, n));
+}
+
+/*
+ * We don't cow, as the div is assumed to be redundant.
+ */
+__isl_give isl_basic_map *isl_basic_map_drop_div(
+ __isl_take isl_basic_map *bmap, unsigned div)
+{
+ int i;
+ unsigned pos;
+
+ if (!bmap)
+ goto error;
+
+ pos = 1 + isl_space_dim(bmap->dim, isl_dim_all) + div;
+
+ isl_assert(bmap->ctx, div < bmap->n_div, goto error);
+
+ for (i = 0; i < bmap->n_eq; ++i)
+ constraint_drop_vars(bmap->eq[i]+pos, 1, bmap->extra-div-1);
+
+ for (i = 0; i < bmap->n_ineq; ++i) {
+ if (!isl_int_is_zero(bmap->ineq[i][pos])) {
+ isl_basic_map_drop_inequality(bmap, i);
+ --i;
+ continue;
+ }
+ constraint_drop_vars(bmap->ineq[i]+pos, 1, bmap->extra-div-1);
+ }
+
+ for (i = 0; i < bmap->n_div; ++i)
+ constraint_drop_vars(bmap->div[i]+1+pos, 1, bmap->extra-div-1);
+
+ if (div != bmap->n_div - 1) {
+ int j;
+ isl_int *t = bmap->div[div];
+
+ for (j = div; j < bmap->n_div - 1; ++j)
+ bmap->div[j] = bmap->div[j+1];
+
+ bmap->div[bmap->n_div - 1] = t;
+ }
+ ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED);
+ if (isl_basic_map_free_div(bmap, 1) < 0)
+ return isl_basic_map_free(bmap);
+
+ return bmap;
+error:
+ isl_basic_map_free(bmap);
+ return NULL;
+}
+
/* Eliminate the specified n dimensions starting at first from the
* constraints, without removing the dimensions from the space.
* If the set is rational, the dimensions are eliminated using Fourier-Motzkin.
@@ -13094,3 +13405,62 @@ __isl_give isl_basic_set *isl_basic_set_
return bset;
}
+
+/* Replace the variables x of type "type" starting at "first" in "bmap"
+ * by x' with x = M x' with M the matrix trans.
+ * That is, replace the corresponding coefficients c by c M.
+ *
+ * The transformation matrix should be a square matrix.
+ */
+__isl_give isl_basic_map *isl_basic_map_transform_dims(
+ __isl_take isl_basic_map *bmap, enum isl_dim_type type, unsigned first,
+ __isl_take isl_mat *trans)
+{
+ unsigned pos;
+
+ bmap = isl_basic_map_cow(bmap);
+ if (!bmap || !trans)
+ goto error;
+
+ if (trans->n_row != trans->n_col)
+ isl_die(trans->ctx, isl_error_invalid,
+ "expecting square transformation matrix", goto error);
+ if (first + trans->n_row > isl_basic_map_dim(bmap, type))
+ isl_die(trans->ctx, isl_error_invalid,
+ "oversized transformation matrix", goto error);
+
+ pos = isl_basic_map_offset(bmap, type) + first;
+
+ if (isl_mat_sub_transform(bmap->eq, bmap->n_eq, pos,
+ isl_mat_copy(trans)) < 0)
+ goto error;
+ if (isl_mat_sub_transform(bmap->ineq, bmap->n_ineq, pos,
+ isl_mat_copy(trans)) < 0)
+ goto error;
+ if (isl_mat_sub_transform(bmap->div, bmap->n_div, 1 + pos,
+ isl_mat_copy(trans)) < 0)
+ goto error;
+
+ ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED);
+ ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS);
+
+ isl_mat_free(trans);
+ return bmap;
+error:
+ isl_mat_free(trans);
+ isl_basic_map_free(bmap);
+ return NULL;
+}
+
+/* Replace the variables x of type "type" starting at "first" in "bset"
+ * by x' with x = M x' with M the matrix trans.
+ * That is, replace the corresponding coefficients c by c M.
+ *
+ * The transformation matrix should be a square matrix.
+ */
+__isl_give isl_basic_set *isl_basic_set_transform_dims(
+ __isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned first,
+ __isl_take isl_mat *trans)
+{
+ return isl_basic_map_transform_dims(bset, type, first, trans);
+}
Modified: polly/trunk/lib/External/isl/isl_map_private.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_map_private.h?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_map_private.h (original)
+++ polly/trunk/lib/External/isl/isl_map_private.h Wed Apr 5 22:41:47 2017
@@ -360,6 +360,8 @@ struct isl_basic_map *isl_basic_map_drop
struct isl_basic_set *isl_basic_set_recession_cone(struct isl_basic_set *bset);
struct isl_basic_set *isl_basic_set_lineality_space(struct isl_basic_set *bset);
+__isl_give isl_basic_set *isl_basic_set_set_integral(
+ __isl_take isl_basic_set *bset);
struct isl_basic_set *isl_basic_set_set_rational(struct isl_basic_set *bset);
__isl_give isl_set *isl_set_set_rational(__isl_take isl_set *set);
__isl_give isl_basic_map *isl_basic_map_set_rational(
@@ -402,6 +404,8 @@ isl_stat isl_set_foreach_orthant(__isl_k
isl_stat (*fn)(__isl_take isl_set *orthant, int *signs, void *user),
void *user);
+isl_bool isl_basic_set_eq_is_stride(__isl_keep isl_basic_set *bset, int i);
+
int isl_basic_map_add_div_constraints_var(__isl_keep isl_basic_map *bmap,
unsigned pos, isl_int *div);
int isl_basic_set_add_div_constraints_var(__isl_keep isl_basic_set *bset,
Modified: polly/trunk/lib/External/isl/isl_map_simplify.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_map_simplify.c?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_map_simplify.c (original)
+++ polly/trunk/lib/External/isl/isl_map_simplify.c Wed Apr 5 22:41:47 2017
@@ -44,205 +44,6 @@ static void swap_inequality(struct isl_b
}
}
-static void constraint_drop_vars(isl_int *c, unsigned n, unsigned rem)
-{
- isl_seq_cpy(c, c + n, rem);
- isl_seq_clr(c + rem, n);
-}
-
-/* Drop n dimensions starting at first.
- *
- * In principle, this frees up some extra variables as the number
- * of columns remains constant, but we would have to extend
- * the div array too as the number of rows in this array is assumed
- * to be equal to extra.
- */
-struct isl_basic_set *isl_basic_set_drop_dims(
- struct isl_basic_set *bset, unsigned first, unsigned n)
-{
- return isl_basic_map_drop(bset_to_bmap(bset), isl_dim_set, first, n);
-}
-
-/* Move "n" divs starting at "first" to the end of the list of divs.
- */
-static struct isl_basic_map *move_divs_last(struct isl_basic_map *bmap,
- unsigned first, unsigned n)
-{
- isl_int **div;
- int i;
-
- if (first + n == bmap->n_div)
- return bmap;
-
- div = isl_alloc_array(bmap->ctx, isl_int *, n);
- if (!div)
- goto error;
- for (i = 0; i < n; ++i)
- div[i] = bmap->div[first + i];
- for (i = 0; i < bmap->n_div - first - n; ++i)
- bmap->div[first + i] = bmap->div[first + n + i];
- for (i = 0; i < n; ++i)
- bmap->div[bmap->n_div - n + i] = div[i];
- free(div);
- return bmap;
-error:
- isl_basic_map_free(bmap);
- return NULL;
-}
-
-/* Drop "n" dimensions of type "type" starting at "first".
- *
- * In principle, this frees up some extra variables as the number
- * of columns remains constant, but we would have to extend
- * the div array too as the number of rows in this array is assumed
- * to be equal to extra.
- */
-struct isl_basic_map *isl_basic_map_drop(struct isl_basic_map *bmap,
- enum isl_dim_type type, unsigned first, unsigned n)
-{
- int i;
- unsigned dim;
- unsigned offset;
- unsigned left;
-
- if (!bmap)
- goto error;
-
- dim = isl_basic_map_dim(bmap, type);
- isl_assert(bmap->ctx, first + n <= dim, goto error);
-
- if (n == 0 && !isl_space_is_named_or_nested(bmap->dim, type))
- return bmap;
-
- bmap = isl_basic_map_cow(bmap);
- if (!bmap)
- return NULL;
-
- offset = isl_basic_map_offset(bmap, type) + first;
- left = isl_basic_map_total_dim(bmap) - (offset - 1) - n;
- for (i = 0; i < bmap->n_eq; ++i)
- constraint_drop_vars(bmap->eq[i]+offset, n, left);
-
- for (i = 0; i < bmap->n_ineq; ++i)
- constraint_drop_vars(bmap->ineq[i]+offset, n, left);
-
- for (i = 0; i < bmap->n_div; ++i)
- constraint_drop_vars(bmap->div[i]+1+offset, n, left);
-
- if (type == isl_dim_div) {
- bmap = move_divs_last(bmap, first, n);
- if (!bmap)
- goto error;
- if (isl_basic_map_free_div(bmap, n) < 0)
- return isl_basic_map_free(bmap);
- } else
- bmap->dim = isl_space_drop_dims(bmap->dim, type, first, n);
- if (!bmap->dim)
- goto error;
-
- ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED);
- bmap = isl_basic_map_simplify(bmap);
- return isl_basic_map_finalize(bmap);
-error:
- isl_basic_map_free(bmap);
- return NULL;
-}
-
-__isl_give isl_basic_set *isl_basic_set_drop(__isl_take isl_basic_set *bset,
- enum isl_dim_type type, unsigned first, unsigned n)
-{
- return bset_from_bmap(isl_basic_map_drop(bset_to_bmap(bset),
- type, first, n));
-}
-
-struct isl_map *isl_map_drop(struct isl_map *map,
- enum isl_dim_type type, unsigned first, unsigned n)
-{
- int i;
-
- if (!map)
- goto error;
-
- isl_assert(map->ctx, first + n <= isl_map_dim(map, type), goto error);
-
- if (n == 0 && !isl_space_is_named_or_nested(map->dim, type))
- return map;
- map = isl_map_cow(map);
- if (!map)
- goto error;
- map->dim = isl_space_drop_dims(map->dim, type, first, n);
- if (!map->dim)
- goto error;
-
- for (i = 0; i < map->n; ++i) {
- map->p[i] = isl_basic_map_drop(map->p[i], type, first, n);
- if (!map->p[i])
- goto error;
- }
- ISL_F_CLR(map, ISL_MAP_NORMALIZED);
-
- return map;
-error:
- isl_map_free(map);
- return NULL;
-}
-
-struct isl_set *isl_set_drop(struct isl_set *set,
- enum isl_dim_type type, unsigned first, unsigned n)
-{
- return set_from_map(isl_map_drop(set_to_map(set), type, first, n));
-}
-
-/*
- * We don't cow, as the div is assumed to be redundant.
- */
-__isl_give isl_basic_map *isl_basic_map_drop_div(
- __isl_take isl_basic_map *bmap, unsigned div)
-{
- int i;
- unsigned pos;
-
- if (!bmap)
- goto error;
-
- pos = 1 + isl_space_dim(bmap->dim, isl_dim_all) + div;
-
- isl_assert(bmap->ctx, div < bmap->n_div, goto error);
-
- for (i = 0; i < bmap->n_eq; ++i)
- constraint_drop_vars(bmap->eq[i]+pos, 1, bmap->extra-div-1);
-
- for (i = 0; i < bmap->n_ineq; ++i) {
- if (!isl_int_is_zero(bmap->ineq[i][pos])) {
- isl_basic_map_drop_inequality(bmap, i);
- --i;
- continue;
- }
- constraint_drop_vars(bmap->ineq[i]+pos, 1, bmap->extra-div-1);
- }
-
- for (i = 0; i < bmap->n_div; ++i)
- constraint_drop_vars(bmap->div[i]+1+pos, 1, bmap->extra-div-1);
-
- if (div != bmap->n_div - 1) {
- int j;
- isl_int *t = bmap->div[div];
-
- for (j = div; j < bmap->n_div - 1; ++j)
- bmap->div[j] = bmap->div[j+1];
-
- bmap->div[bmap->n_div - 1] = t;
- }
- ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED);
- if (isl_basic_map_free_div(bmap, 1) < 0)
- return isl_basic_map_free(bmap);
-
- return bmap;
-error:
- isl_basic_map_free(bmap);
- return NULL;
-}
-
struct isl_basic_map *isl_basic_map_normalize_constraints(
struct isl_basic_map *bmap)
{
Modified: polly/trunk/lib/External/isl/isl_mat.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_mat.c?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_mat.c (original)
+++ polly/trunk/lib/External/isl/isl_mat.c Wed Apr 5 22:41:47 2017
@@ -1269,84 +1269,28 @@ error:
return NULL;
}
-/* Replace the variables x starting at pos in the rows q
- * by x' with x = M x' with M the matrix mat.
+/* Replace the variables x starting at "first_col" in the rows "rows"
+ * of some coefficient matrix by x' with x = M x' with M the matrix mat.
* That is, replace the corresponding coefficients c by c M.
*/
-static int transform(isl_ctx *ctx, isl_int **q, unsigned n,
- unsigned pos, __isl_take isl_mat *mat)
+isl_stat isl_mat_sub_transform(isl_int **row, unsigned n_row,
+ unsigned first_col, __isl_take isl_mat *mat)
{
int i;
+ isl_ctx *ctx;
isl_mat *t;
- t = isl_mat_sub_alloc6(ctx, q, 0, n, pos, mat->n_row);
+ if (!mat)
+ return isl_stat_error;
+ ctx = isl_mat_get_ctx(mat);
+ t = isl_mat_sub_alloc6(ctx, row, 0, n_row, first_col, mat->n_row);
t = isl_mat_product(t, mat);
if (!t)
- return -1;
- for (i = 0; i < n; ++i)
- isl_seq_swp_or_cpy(q[i] + pos, t->row[i], t->n_col);
+ return isl_stat_error;
+ for (i = 0; i < n_row; ++i)
+ isl_seq_swp_or_cpy(row[i] + first_col, t->row[i], t->n_col);
isl_mat_free(t);
- return 0;
-}
-
-/* Replace the variables x of type "type" starting at "first" in "bmap"
- * by x' with x = M x' with M the matrix trans.
- * That is, replace the corresponding coefficients c by c M.
- *
- * The transformation matrix should be a square matrix.
- */
-__isl_give isl_basic_map *isl_basic_map_transform_dims(
- __isl_take isl_basic_map *bmap, enum isl_dim_type type, unsigned first,
- __isl_take isl_mat *trans)
-{
- isl_ctx *ctx;
- unsigned pos;
-
- bmap = isl_basic_map_cow(bmap);
- if (!bmap || !trans)
- goto error;
-
- ctx = isl_basic_map_get_ctx(bmap);
- if (trans->n_row != trans->n_col)
- isl_die(trans->ctx, isl_error_invalid,
- "expecting square transformation matrix", goto error);
- if (first + trans->n_row > isl_basic_map_dim(bmap, type))
- isl_die(trans->ctx, isl_error_invalid,
- "oversized transformation matrix", goto error);
-
- pos = isl_basic_map_offset(bmap, type) + first;
-
- if (transform(ctx, bmap->eq, bmap->n_eq, pos, isl_mat_copy(trans)) < 0)
- goto error;
- if (transform(ctx, bmap->ineq, bmap->n_ineq, pos,
- isl_mat_copy(trans)) < 0)
- goto error;
- if (transform(ctx, bmap->div, bmap->n_div, 1 + pos,
- isl_mat_copy(trans)) < 0)
- goto error;
-
- ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED);
- ISL_F_CLR(bmap, ISL_BASIC_MAP_NORMALIZED_DIVS);
-
- isl_mat_free(trans);
- return bmap;
-error:
- isl_mat_free(trans);
- isl_basic_map_free(bmap);
- return NULL;
-}
-
-/* Replace the variables x of type "type" starting at "first" in "bset"
- * by x' with x = M x' with M the matrix trans.
- * That is, replace the corresponding coefficients c by c M.
- *
- * The transformation matrix should be a square matrix.
- */
-__isl_give isl_basic_set *isl_basic_set_transform_dims(
- __isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned first,
- __isl_take isl_mat *trans)
-{
- return isl_basic_map_transform_dims(bset, type, first, trans);
+ return isl_stat_ok;
}
void isl_mat_print_internal(__isl_keep isl_mat *mat, FILE *out, int indent)
Modified: polly/trunk/lib/External/isl/isl_mat_private.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_mat_private.h?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_mat_private.h (original)
+++ polly/trunk/lib/External/isl/isl_mat_private.h Wed Apr 5 22:41:47 2017
@@ -31,6 +31,8 @@ void isl_mat_sub_copy(struct isl_ctx *ct
unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col);
void isl_mat_sub_neg(struct isl_ctx *ctx, isl_int **dst, isl_int **src,
unsigned n_row, unsigned dst_col, unsigned src_col, unsigned n_col);
+isl_stat isl_mat_sub_transform(isl_int **row, unsigned n_row,
+ unsigned first_col, __isl_take isl_mat *mat);
__isl_give isl_mat *isl_mat_diag(isl_ctx *ctx, unsigned n_row, isl_int d);
__isl_give isl_mat *isl_mat_scale(__isl_take isl_mat *mat, isl_int m);
Modified: polly/trunk/lib/External/isl/isl_seq.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_seq.c?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_seq.c (original)
+++ polly/trunk/lib/External/isl/isl_seq.c Wed Apr 5 22:41:47 2017
@@ -1,5 +1,6 @@
/*
* Copyright 2008-2009 Katholieke Universiteit Leuven
+ * Copyright 2011 INRIA Saclay
*
* Use of this software is governed by the MIT license
*
@@ -301,6 +302,36 @@ uint32_t isl_seq_hash(isl_int *p, unsign
return hash;
}
+/* Given two affine expressions "p" of length p_len (including the
+ * denominator and the constant term) and "subs" of length subs_len,
+ * plug in "subs" for the variable at position "pos".
+ * The variables of "subs" and "p" are assumed to match up to subs_len,
+ * but "p" may have additional variables.
+ * "v" is an initialized isl_int that can be used internally.
+ *
+ * In particular, if "p" represents the expression
+ *
+ * (a i + g)/m
+ *
+ * with i the variable at position "pos" and "subs" represents the expression
+ *
+ * f/d
+ *
+ * then the result represents the expression
+ *
+ * (a f + d g)/(m d)
+ *
+ */
+void isl_seq_substitute(isl_int *p, int pos, isl_int *subs,
+ int p_len, int subs_len, isl_int v)
+{
+ isl_int_set(v, p[1 + pos]);
+ isl_int_set_si(p[1 + pos], 0);
+ isl_seq_combine(p + 1, subs[0], p + 1, v, subs + 1, subs_len - 1);
+ isl_seq_scale(p + subs_len, p + subs_len, subs[0], p_len - subs_len);
+ isl_int_mul(p[0], p[0], subs[0]);
+}
+
uint32_t isl_seq_get_hash(isl_int *p, unsigned len)
{
uint32_t hash = isl_hash_init();
Modified: polly/trunk/lib/External/isl/isl_seq.h
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_seq.h?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_seq.h (original)
+++ polly/trunk/lib/External/isl/isl_seq.h Wed Apr 5 22:41:47 2017
@@ -50,6 +50,9 @@ int isl_seq_eq(isl_int *p1, isl_int *p2,
int isl_seq_cmp(isl_int *p1, isl_int *p2, unsigned len);
int isl_seq_is_neg(isl_int *p1, isl_int *p2, unsigned len);
+void isl_seq_substitute(isl_int *p, int pos, isl_int *subs,
+ int p_len, int subs_len, isl_int v);
+
uint32_t isl_seq_get_hash(isl_int *p, unsigned len);
uint32_t isl_seq_get_hash_bits(isl_int *p, unsigned len, unsigned bits);
Modified: polly/trunk/lib/External/isl/isl_transitive_closure.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_transitive_closure.c?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_transitive_closure.c (original)
+++ polly/trunk/lib/External/isl/isl_transitive_closure.c Wed Apr 5 22:41:47 2017
@@ -2116,53 +2116,6 @@ __isl_give isl_map *isl_map_reaching_pat
return map;
}
-/* Check whether equality i of bset is a pure stride constraint
- * on a single dimension, i.e., of the form
- *
- * v = k e
- *
- * with k a constant and e an existentially quantified variable.
- */
-static isl_bool is_eq_stride(__isl_keep isl_basic_set *bset, int i)
-{
- unsigned nparam;
- unsigned d;
- unsigned n_div;
- int pos1;
- int pos2;
-
- if (!bset)
- return isl_bool_error;
-
- if (!isl_int_is_zero(bset->eq[i][0]))
- return isl_bool_false;
-
- nparam = isl_basic_set_dim(bset, isl_dim_param);
- d = isl_basic_set_dim(bset, isl_dim_set);
- n_div = isl_basic_set_dim(bset, isl_dim_div);
-
- if (isl_seq_first_non_zero(bset->eq[i] + 1, nparam) != -1)
- return isl_bool_false;
- pos1 = isl_seq_first_non_zero(bset->eq[i] + 1 + nparam, d);
- if (pos1 == -1)
- return isl_bool_false;
- if (isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + pos1 + 1,
- d - pos1 - 1) != -1)
- return isl_bool_false;
-
- pos2 = isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + d, n_div);
- if (pos2 == -1)
- return isl_bool_false;
- if (isl_seq_first_non_zero(bset->eq[i] + 1 + nparam + d + pos2 + 1,
- n_div - pos2 - 1) != -1)
- return isl_bool_false;
- if (!isl_int_is_one(bset->eq[i][1 + nparam + pos1]) &&
- !isl_int_is_negone(bset->eq[i][1 + nparam + pos1]))
- return isl_bool_false;
-
- return isl_bool_true;
-}
-
/* Given a map, compute the smallest superset of this map that is of the form
*
* { i -> j : L <= j - i <= U and exists a_p: j_p - i_p = M_p a_p }
@@ -2228,7 +2181,7 @@ static __isl_give isl_map *box_closure_o
isl_int_set_si(bmap->div[k][0], 0);
}
for (i = 0; i < aff->n_eq; ++i) {
- if (!is_eq_stride(aff, i))
+ if (!isl_basic_set_eq_is_stride(aff, i))
continue;
k = isl_basic_map_alloc_equality(bmap);
if (k < 0)
Modified: polly/trunk/lib/External/isl/isl_vertices.c
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/External/isl/isl_vertices.c?rev=299617&r1=299616&r2=299617&view=diff
==============================================================================
--- polly/trunk/lib/External/isl/isl_vertices.c (original)
+++ polly/trunk/lib/External/isl/isl_vertices.c Wed Apr 5 22:41:47 2017
@@ -1003,23 +1003,6 @@ int isl_vertex_get_id(__isl_keep isl_ver
return vertex ? vertex->id : -1;
}
-__isl_give isl_basic_set *isl_basic_set_set_integral(__isl_take isl_basic_set *bset)
-{
- if (!bset)
- return NULL;
-
- if (!ISL_F_ISSET(bset, ISL_BASIC_MAP_RATIONAL))
- return bset;
-
- bset = isl_basic_set_cow(bset);
- if (!bset)
- return NULL;
-
- ISL_F_CLR(bset, ISL_BASIC_MAP_RATIONAL);
-
- return isl_basic_set_finalize(bset);
-}
-
/* Return the activity domain of the vertex "vertex".
*/
__isl_give isl_basic_set *isl_vertex_get_domain(__isl_keep isl_vertex *vertex)
More information about the llvm-commits
mailing list