X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_morph.c;h=bd5733dad890c7e380e73455dd6758cdf5ac76ed;hb=747237f4a946ad88d45822eb281dc70665b81a76;hp=0d007e108723cc78e8f902d4a2b457c5003168c0;hpb=6c4507a88b3edfe4b76c6b526c521a5160186aa6;p=platform%2Fupstream%2Fisl.git diff --git a/isl_morph.c b/isl_morph.c index 0d007e1..bd5733d 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); @@ -314,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". * @@ -782,12 +784,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);