isl_seq_cpy(lp->row->el + 1, row, lp->dim);
isl_seq_neg(lp->row->el + 1 + lp->dim, row, lp->dim);
- lp->tab = isl_tab_add_valid_eq(lp->tab, lp->row->el);
+ if (isl_tab_add_valid_eq(lp->tab, lp->row->el) < 0)
+ return -1;
return lp->neq++;
}
continue;
}
isl_int_neg(tab->basis->row[1 + level][0], min->el[level]);
- tab = isl_tab_add_valid_eq(tab, tab->basis->row[1 + level]);
+ if (isl_tab_add_valid_eq(tab, tab->basis->row[1 + level]) < 0)
+ goto error;
isl_int_set_si(tab->basis->row[1 + level][0], 0);
if (level + tab->n_unbounded < dim - 1) {
++level;
continue;
}
isl_int_neg(B->row[1 + level][0], min->el[level]);
- tab = isl_tab_add_valid_eq(tab, B->row[1 + level]);
+ if (isl_tab_add_valid_eq(tab, B->row[1 + level]) < 0)
+ goto error;
isl_int_set_si(B->row[1 + level][0], 0);
if (level < dim - 1) {
++level;
/* Add an equality that is known to be valid for the given tableau.
*/
-struct isl_tab *isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq)
+int isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq)
{
struct isl_tab_var *var;
int r;
if (!tab)
- return NULL;
+ return -1;
r = isl_tab_add_row(tab, eq);
if (r < 0)
- goto error;
+ return -1;
var = &tab->con[r];
r = var->index;
if (row_is_manifestly_zero(tab, r)) {
var->is_zero = 1;
if (isl_tab_mark_redundant(tab, r) < 0)
- goto error;
- return tab;
+ return -1;
+ return 0;
}
if (isl_int_is_neg(tab->mat->row[r][1])) {
}
var->is_nonneg = 1;
if (to_col(tab, var) < 0)
- goto error;
+ return -1;
var->is_nonneg = 0;
if (isl_tab_kill_col(tab, var->index) < 0)
- goto error;
+ return -1;
- return tab;
-error:
- isl_tab_free(tab);
- return NULL;
+ return 0;
}
static int add_zero_row(struct isl_tab *tab)
struct isl_tab *isl_tab_extend(struct isl_tab *tab, unsigned n_new) WARN_UNUSED;
int isl_tab_add_ineq(struct isl_tab *tab, isl_int *ineq) WARN_UNUSED;
int isl_tab_add_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED;
-struct isl_tab *isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED;
+int isl_tab_add_valid_eq(struct isl_tab *tab, isl_int *eq) WARN_UNUSED;
int isl_tab_freeze_constraint(struct isl_tab *tab, int con) WARN_UNUSED;