summaryrefslogtreecommitdiff
path: root/isl_morph.c
diff options
context:
space:
mode:
authorSven Verdoolaege <skimo@kotnet.org>2012-02-01 18:01:31 +0100
committerSven Verdoolaege <skimo@kotnet.org>2012-02-01 22:48:51 +0100
commit88afaf1679d903ab9c5133264001937f3c5d6a20 (patch)
tree55b4980c9aae1853919a393c074a68c8688c635d /isl_morph.c
parentc33f49e11fd81feb2279e58d1feb115458f48d42 (diff)
downloadisl-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.c8
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);