diff options
author | Tobias Grosser <tobias@grosser.es> | 2017-04-03 06:46:16 +0000 |
---|---|---|
committer | Tobias Grosser <tobias@grosser.es> | 2017-04-03 06:46:16 +0000 |
commit | af940ae2805f09c46b2305cd6d4862fbe86b6c38 (patch) | |
tree | 42278c22e2f03207576fb686013c4356a90309bc | |
parent | 07944f891c48bfa7dad3add97d533dec4bc48afb (diff) | |
download | bcm5719-llvm-af940ae2805f09c46b2305cd6d4862fbe86b6c38.tar.gz bcm5719-llvm-af940ae2805f09c46b2305cd6d4862fbe86b6c38.zip |
Update to isl-0.18-410-gc253447
This is a regular maintenance update to ensure latest isl changes are tested
in our buildbots.
llvm-svn: 299350
-rw-r--r-- | polly/lib/External/isl/GIT_HEAD_ID | 2 | ||||
-rw-r--r-- | polly/lib/External/isl/include/isl/space.h | 2 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_affine_hull.c | 19 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_lp.c | 2 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_map_simplify.c | 13 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_polynomial.c | 13 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_space.c | 81 | ||||
-rw-r--r-- | polly/lib/External/isl/isl_test.c | 40 |
8 files changed, 103 insertions, 69 deletions
diff --git a/polly/lib/External/isl/GIT_HEAD_ID b/polly/lib/External/isl/GIT_HEAD_ID index 7513f253769..69e615c5286 100644 --- a/polly/lib/External/isl/GIT_HEAD_ID +++ b/polly/lib/External/isl/GIT_HEAD_ID @@ -1 +1 @@ -isl-0.18-402-ga30c537 +isl-0.18-410-gc253447 diff --git a/polly/lib/External/isl/include/isl/space.h b/polly/lib/External/isl/include/isl/space.h index f543f44c9b2..c9529e4fbb5 100644 --- a/polly/lib/External/isl/include/isl/space.h +++ b/polly/lib/External/isl/include/isl/space.h @@ -85,7 +85,7 @@ __isl_give isl_space *isl_space_extend(__isl_take isl_space *dim, unsigned nparam, unsigned n_in, unsigned n_out); __isl_give isl_space *isl_space_add_dims(__isl_take isl_space *space, enum isl_dim_type type, unsigned n); -__isl_give isl_space *isl_space_move_dims(__isl_take isl_space *dim, +__isl_give isl_space *isl_space_move_dims(__isl_take isl_space *space, enum isl_dim_type dst_type, unsigned dst_pos, enum isl_dim_type src_type, unsigned src_pos, unsigned n); __isl_give isl_space *isl_space_insert_dims(__isl_take isl_space *dim, diff --git a/polly/lib/External/isl/isl_affine_hull.c b/polly/lib/External/isl/isl_affine_hull.c index a28f1e5a0c2..999f680dcb5 100644 --- a/polly/lib/External/isl/isl_affine_hull.c +++ b/polly/lib/External/isl/isl_affine_hull.c @@ -66,25 +66,6 @@ struct isl_basic_set *isl_basic_set_implicit_equalities( isl_basic_map_implicit_equalities(bset_to_bmap(bset))); } -struct isl_map *isl_map_implicit_equalities(struct isl_map *map) -{ - int i; - - if (!map) - return map; - - for (i = 0; i < map->n; ++i) { - map->p[i] = isl_basic_map_implicit_equalities(map->p[i]); - if (!map->p[i]) - goto error; - } - - return map; -error: - isl_map_free(map); - return NULL; -} - /* Make eq[row][col] of both bmaps equal so we can add the row * add the column to the common matrix. * Note that because of the echelon form, the columns of row row diff --git a/polly/lib/External/isl/isl_lp.c b/polly/lib/External/isl/isl_lp.c index 57191b15b1d..dbd9a59df34 100644 --- a/polly/lib/External/isl/isl_lp.c +++ b/polly/lib/External/isl/isl_lp.c @@ -60,7 +60,7 @@ enum isl_lp_result isl_tab_solve_lp(struct isl_basic_map *bmap, int maximize, * If opt_denom is NULL, then *opt is rounded up (or down) * to the nearest integer. * The return value reflects the nature of the result (empty, unbounded, - * minmimal or maximal value returned in *opt). + * minimal or maximal value returned in *opt). */ enum isl_lp_result isl_basic_map_solve_lp(struct isl_basic_map *bmap, int max, isl_int *f, isl_int d, isl_int *opt, diff --git a/polly/lib/External/isl/isl_map_simplify.c b/polly/lib/External/isl/isl_map_simplify.c index 2bb06d49ca3..bf7b47a277e 100644 --- a/polly/lib/External/isl/isl_map_simplify.c +++ b/polly/lib/External/isl/isl_map_simplify.c @@ -620,7 +620,7 @@ static struct isl_basic_map *eliminate_divs_eq( return bmap; } -/* Elimininate divs based on inequalities +/* Eliminate divs based on inequalities */ static struct isl_basic_map *eliminate_divs_ineq( struct isl_basic_map *bmap, int *progress) @@ -5232,6 +5232,13 @@ static __isl_give isl_vec *normalize_constraint(__isl_take isl_vec *v, * We therefore call isl_basic_map_detect_inequality_pairs, * which checks for such pairs of inequalities as well as eliminate_divs_eq * and isl_basic_map_gauss if such a pair was found. + * + * Note that this function may leave the result in an inconsistent state. + * In particular, the constraints may not be gaussed. + * Unfortunately, isl_map_coalesce actually depends on this inconsistent state + * for some of the test cases to pass successfully. + * Any potential modification of the representation is therefore only + * performed on a single copy of the basic map. */ __isl_give isl_basic_map *isl_basic_map_reduce_coefficients( __isl_take isl_basic_map *bmap) @@ -5271,6 +5278,10 @@ __isl_give isl_basic_map *isl_basic_map_reduce_coefficients( return isl_basic_map_set_to_empty(bmap); } + bmap = isl_basic_map_cow(bmap); + if (!bmap) + goto error; + tightened = 0; for (i = 0; i < bmap->n_ineq; ++i) { isl_seq_cpy(v->el, bmap->ineq[i], 1 + total); diff --git a/polly/lib/External/isl/isl_polynomial.c b/polly/lib/External/isl/isl_polynomial.c index ff64ce4bc01..2f4ba43d4f9 100644 --- a/polly/lib/External/isl/isl_polynomial.c +++ b/polly/lib/External/isl/isl_polynomial.c @@ -3292,10 +3292,6 @@ __isl_give isl_qpolynomial *isl_qpolynomial_move_dims( unsigned g_src_pos; int *reordering; - if (n == 0) - return qp; - - qp = isl_qpolynomial_cow(qp); if (!qp) return NULL; @@ -3308,6 +3304,15 @@ __isl_give isl_qpolynomial *isl_qpolynomial_move_dims( if (src_type == isl_dim_in) src_type = isl_dim_set; + if (n == 0 && + !isl_space_is_named_or_nested(qp->dim, src_type) && + !isl_space_is_named_or_nested(qp->dim, dst_type)) + return qp; + + qp = isl_qpolynomial_cow(qp); + if (!qp) + return NULL; + isl_assert(qp->dim->ctx, src_pos + n <= isl_space_dim(qp->dim, src_type), goto error); diff --git a/polly/lib/External/isl/isl_space.c b/polly/lib/External/isl/isl_space.c index 94c5ea8bb9f..9bec5599d6e 100644 --- a/polly/lib/External/isl/isl_space.c +++ b/polly/lib/External/isl/isl_space.c @@ -1074,101 +1074,98 @@ error: return NULL; } -__isl_give isl_space *isl_space_move_dims(__isl_take isl_space *dim, +__isl_give isl_space *isl_space_move_dims(__isl_take isl_space *space, enum isl_dim_type dst_type, unsigned dst_pos, enum isl_dim_type src_type, unsigned src_pos, unsigned n) { int i; - if (!dim) + space = isl_space_reset(space, src_type); + space = isl_space_reset(space, dst_type); + if (!space) return NULL; - if (n == 0) { - dim = isl_space_reset(dim, src_type); - return isl_space_reset(dim, dst_type); - } + if (n == 0) + return space; - isl_assert(dim->ctx, src_pos + n <= isl_space_dim(dim, src_type), + isl_assert(space->ctx, src_pos + n <= isl_space_dim(space, src_type), goto error); if (dst_type == src_type && dst_pos == src_pos) - return dim; - - isl_assert(dim->ctx, dst_type != src_type, goto error); + return space; - dim = isl_space_reset(dim, src_type); - dim = isl_space_reset(dim, dst_type); + isl_assert(space->ctx, dst_type != src_type, goto error); - dim = isl_space_cow(dim); - if (!dim) + space = isl_space_cow(space); + if (!space) return NULL; - if (dim->ids) { + if (space->ids) { isl_id **ids; enum isl_dim_type t, o = isl_dim_param; int off; int s[3]; - ids = isl_calloc_array(dim->ctx, isl_id *, - dim->nparam + dim->n_in + dim->n_out); + ids = isl_calloc_array(space->ctx, isl_id *, + space->nparam + space->n_in + space->n_out); if (!ids) goto error; off = 0; - s[isl_dim_param - o] = dim->nparam; - s[isl_dim_in - o] = dim->n_in; - s[isl_dim_out - o] = dim->n_out; + s[isl_dim_param - o] = space->nparam; + s[isl_dim_in - o] = space->n_in; + s[isl_dim_out - o] = space->n_out; for (t = isl_dim_param; t <= isl_dim_out; ++t) { if (t == dst_type) { - get_ids(dim, t, 0, dst_pos, ids + off); + get_ids(space, t, 0, dst_pos, ids + off); off += dst_pos; - get_ids(dim, src_type, src_pos, n, ids + off); + get_ids(space, src_type, src_pos, n, ids + off); off += n; - get_ids(dim, t, dst_pos, s[t - o] - dst_pos, + get_ids(space, t, dst_pos, s[t - o] - dst_pos, ids + off); off += s[t - o] - dst_pos; } else if (t == src_type) { - get_ids(dim, t, 0, src_pos, ids + off); + get_ids(space, t, 0, src_pos, ids + off); off += src_pos; - get_ids(dim, t, src_pos + n, + get_ids(space, t, src_pos + n, s[t - o] - src_pos - n, ids + off); off += s[t - o] - src_pos - n; } else { - get_ids(dim, t, 0, s[t - o], ids + off); + get_ids(space, t, 0, s[t - o], ids + off); off += s[t - o]; } } - free(dim->ids); - dim->ids = ids; - dim->n_id = dim->nparam + dim->n_in + dim->n_out; + free(space->ids); + space->ids = ids; + space->n_id = space->nparam + space->n_in + space->n_out; } switch (dst_type) { - case isl_dim_param: dim->nparam += n; break; - case isl_dim_in: dim->n_in += n; break; - case isl_dim_out: dim->n_out += n; break; + case isl_dim_param: space->nparam += n; break; + case isl_dim_in: space->n_in += n; break; + case isl_dim_out: space->n_out += n; break; default: ; } switch (src_type) { - case isl_dim_param: dim->nparam -= n; break; - case isl_dim_in: dim->n_in -= n; break; - case isl_dim_out: dim->n_out -= n; break; + case isl_dim_param: space->nparam -= n; break; + case isl_dim_in: space->n_in -= n; break; + case isl_dim_out: space->n_out -= n; break; default: ; } if (dst_type != isl_dim_param && src_type != isl_dim_param) - return dim; + return space; for (i = 0; i < 2; ++i) { - if (!dim->nested[i]) + if (!space->nested[i]) continue; - dim->nested[i] = isl_space_replace(dim->nested[i], - isl_dim_param, dim); - if (!dim->nested[i]) + space->nested[i] = isl_space_replace(space->nested[i], + isl_dim_param, space); + if (!space->nested[i]) goto error; } - return dim; + return space; error: - isl_space_free(dim); + isl_space_free(space); return NULL; } diff --git a/polly/lib/External/isl/isl_test.c b/polly/lib/External/isl/isl_test.c index 4e94bc2ae62..d361a73b169 100644 --- a/polly/lib/External/isl/isl_test.c +++ b/polly/lib/External/isl/isl_test.c @@ -1970,6 +1970,44 @@ static int test_coalesce_special2(struct isl_ctx *ctx) return 0; } +/* Check that calling isl_set_coalesce does not leave other sets + * that may share some information with the input to isl_set_coalesce + * in an inconsistent state. + * In particular, older versions of isl would modify all copies + * of the basic sets in the isl_set_coalesce input in a way + * that could leave them in an inconsistent state. + * The result of printing any other set containing one of these + * basic sets would then result in an invalid set description. + */ +static int test_coalesce_special3(isl_ctx *ctx) +{ + const char *str; + char *s; + isl_set *set1, *set2; + isl_printer *p; + + set1 = isl_set_read_from_str(ctx, "{ [0, 0, 0] }"); + str = "{ [a, b, a + b] : a >= 0 and b >= 0 and 0 < a + b }"; + set2 = isl_set_read_from_str(ctx, str); + set1 = isl_set_union(set1, isl_set_copy(set2)); + set1 = isl_set_coalesce(set1); + isl_set_free(set1); + + p = isl_printer_to_str(ctx); + p = isl_printer_print_set(p, set2); + isl_set_free(set2); + s = isl_printer_get_str(p); + isl_printer_free(p); + set1 = isl_set_read_from_str(ctx, s); + free(s); + isl_set_free(set1); + + if (!set1) + return -1; + + return 0; +} + /* Test the functionality of isl_set_coalesce. * That is, check that the output is always equal to the input * and in some cases that the result consists of a single disjunct. @@ -1991,6 +2029,8 @@ static int test_coalesce(struct isl_ctx *ctx) return -1; if (test_coalesce_special2(ctx) < 0) return -1; + if (test_coalesce_special3(ctx) < 0) + return -1; return 0; } |