X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_morph.c;h=b5bfa18ad6a24c1a077ce311ae6f821b605dba72;hb=1e216c772628e7a8481d7bd5c8b7ed0fb6572fe7;hp=a888f4cb9314b0d7f66e86182c3788c27bb56762;hpb=db847315005909df04467d48b2887b6496017bf6;p=platform%2Fupstream%2Fisl.git diff --git a/isl_morph.c b/isl_morph.c index a888f4c..b5bfa18 100644 --- a/isl_morph.c +++ b/isl_morph.c @@ -1,7 +1,7 @@ /* * Copyright 2010 INRIA Saclay * - * Use of this software is governed by the GNU LGPLv2.1 license + * Use of this software is governed by the MIT license * * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, @@ -316,7 +316,7 @@ error: return NULL; } -/* Given a basic set, exploit the equalties in the a basic set to construct +/* Given a basic set, exploit the equalties in the basic set to construct * a morphishm that maps the basic set to a lower-dimensional space. * Specifically, the morphism reduces the number of dimensions of type "type". * @@ -520,7 +520,7 @@ __isl_give isl_morph *isl_basic_set_parameter_compression( H = isl_mat_right_inverse(H); if (!H || !d) goto error; - isl_seq_set(d->el, H->row[0][0], d->size); + d = isl_vec_set(d, H->row[0][0]); H = isl_mat_drop_rows(H, 0, 1); H = isl_mat_drop_cols(H, 0, 1); B = isl_mat_product(H, B); @@ -581,6 +581,7 @@ static __isl_give isl_basic_set *add_strides(__isl_take isl_basic_set *bset, div = isl_basic_set_alloc_div(bset); if (div < 0) goto error; + isl_int_set_si(bset->div[div][0], 0); k = isl_basic_set_alloc_equality(bset); if (k < 0) goto error; @@ -784,12 +785,20 @@ __isl_give isl_morph *isl_morph_inverse(__isl_take isl_morph *morph) return morph; } +/* We detect all the equalities first to avoid implicit equalties + * being discovered during the computations. In particular, + * the compression on the variables could expose additional stride + * constraints on the parameters. This would result in existentially + * quantified variables after applying the resulting morph, which + * in turn could break invariants of the calling functions. + */ __isl_give isl_morph *isl_basic_set_full_compression( __isl_keep isl_basic_set *bset) { isl_morph *morph, *morph2; bset = isl_basic_set_copy(bset); + bset = isl_basic_set_detect_equalities(bset); morph = isl_basic_set_variable_compression(bset, isl_dim_param); bset = isl_morph_basic_set(isl_morph_copy(morph), bset);