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".
*
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);
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;
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);