X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_morph.c;h=230f14e62d4096648fb1dac00771791fb0d01e44;hb=8aa932ec87926e76c7db7e64b3c66807d623de92;hp=3868053d66fca404b1c9d7115aa28def1ce3878c;hpb=e4b06cf4ac64c67c32004359369a411bb975189f;p=platform%2Fupstream%2Fisl.git diff --git a/isl_morph.c b/isl_morph.c index 3868053..230f14e 100644 --- a/isl_morph.c +++ b/isl_morph.c @@ -172,6 +172,7 @@ __isl_give isl_morph *isl_morph_dom_params(__isl_take isl_morph *morph) { unsigned n; + morph = isl_morph_cow(morph); if (!morph) return NULL; n = isl_basic_set_dim(morph->dom, isl_dim_set); @@ -192,6 +193,7 @@ __isl_give isl_morph *isl_morph_ran_params(__isl_take isl_morph *morph) { unsigned n; + morph = isl_morph_cow(morph); if (!morph) return NULL; n = isl_basic_set_dim(morph->ran, isl_dim_set); @@ -217,6 +219,11 @@ void isl_morph_print_internal(__isl_take isl_morph *morph, FILE *out) isl_mat_print_internal(morph->inv, out, 4); } +void isl_morph_dump(__isl_take isl_morph *morph) +{ + isl_morph_print_internal(morph, stderr); +} + __isl_give isl_morph *isl_morph_identity(__isl_keep isl_basic_set *bset) { isl_mat *id; @@ -309,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". * @@ -513,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); @@ -574,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; @@ -777,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);