diff options
author | Sven Verdoolaege <skimo@kotnet.org> | 2012-02-01 18:01:31 +0100 |
---|---|---|
committer | Sven Verdoolaege <skimo@kotnet.org> | 2012-02-01 22:48:51 +0100 |
commit | 88afaf1679d903ab9c5133264001937f3c5d6a20 (patch) | |
tree | 55b4980c9aae1853919a393c074a68c8688c635d /isl_morph.c | |
parent | c33f49e11fd81feb2279e58d1feb115458f48d42 (diff) | |
download | isl-88afaf1679d903ab9c5133264001937f3c5d6a20.tar.gz isl-88afaf1679d903ab9c5133264001937f3c5d6a20.tar.bz2 isl-88afaf1679d903ab9c5133264001937f3c5d6a20.zip |
isl_basic_set_full_compression: detect equalities in input first
Without this explicit detection of equalities, some equalities
may be discovered in the middle of the computation, possibly
leading to the introduction of existentially quantified variables,
while callers of isl_basic_set_full_compression typically do not
want such variables.
Since the detection of equalities can in some cases be fairly expensive,
we may have to find a better way of dealing with this problem at some point.
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
Diffstat (limited to 'isl_morph.c')
-rw-r--r-- | isl_morph.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/isl_morph.c b/isl_morph.c index a888f4cb..b4f984a4 100644 --- a/isl_morph.c +++ b/isl_morph.c @@ -784,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); |