#include "isl_equalities.h"
#include "isl_sample.h"
#include "isl_tab.h"
+#include <isl_mat_private.h>
struct isl_basic_map *isl_basic_map_implicit_equalities(
struct isl_basic_map *bmap)
if (!up)
isl_seq_neg(eq, eq, 1 + dim);
- if (isl_tab_rollback(tab, snap) < 0)
+ if (sample && isl_tab_rollback(tab, snap) < 0)
goto error;
return sample;
goto error;
point = isl_basic_set_from_vec(sample);
hull = affine_hull(hull, point);
+ if (!hull)
+ return NULL;
}
return hull;
/* Drop all constraints in bset that involve any of the dimensions
* first to first+n-1.
*/
-static struct isl_basic_set *drop_constraints_involving
- (struct isl_basic_set *bset, unsigned first, unsigned n)
+__isl_give isl_basic_set *isl_basic_set_drop_constraints_involving(
+ __isl_take isl_basic_set *bset, unsigned first, unsigned n)
{
int i;
- if (!bset)
- return NULL;
+ if (n == 0)
+ return bset;
bset = isl_basic_set_cow(bset);
+ if (!bset)
+ return NULL;
+
for (i = bset->n_eq - 1; i >= 0; --i) {
if (isl_seq_first_non_zero(bset->eq[i] + 1 + first, n) == -1)
continue;
U = isl_mat_lin_to_aff(U);
bset = isl_basic_set_preimage(bset, isl_mat_copy(U));
- bset = drop_constraints_involving(bset, total - cone_dim, cone_dim);
+ bset = isl_basic_set_drop_constraints_involving(bset, total - cone_dim,
+ cone_dim);
bset = isl_basic_set_drop_dims(bset, total - cone_dim, cone_dim);
Q = isl_mat_lin_to_aff(Q);
else
isl_mat_free(U);
hull = isl_basic_set_preimage(hull, Q);
- isl_vec_free(hull->sample);
- hull->sample = sample;
+ if (hull) {
+ isl_vec_free(hull->sample);
+ hull->sample = sample;
+ } else
+ isl_vec_free(sample);
}
isl_basic_set_free(cone);