void offseted_less_than_var (int v, int offset, int v2) { // v + offset <= v2 isl_constraint * less = isl_inequality_alloc (isl_local_space_copy (ls)); less = isl_constraint_set_coefficient_si (less, isl_dim_set, v, -1); less = isl_constraint_set_constant_si (less, -offset); less = isl_constraint_set_coefficient_si (less, isl_dim_set, v2, 1); solutions = isl_set_add_constraint (solutions, less); }
void offseted_diff_less_than_var (int va, int vb, int offset, int mv) { // va - vb + offset <= mv isl_constraint * less = isl_inequality_alloc (isl_local_space_copy (ls)); less = isl_constraint_set_coefficient_si (less, isl_dim_set, va, -1); less = isl_constraint_set_coefficient_si (less, isl_dim_set, vb, 1); less = isl_constraint_set_constant_si (less, -offset); less = isl_constraint_set_coefficient_si (less, isl_dim_set, mv, 1); solutions = isl_set_add_constraint (solutions, less); }
static isl_set* build_iteration_domain (scoplib_scop_p scop, scoplib_statement_p s, isl_space* space, isl_ctx* ctxt) { isl_set* ret = isl_set_universe (isl_space_domain (isl_space_copy (space))); int i; isl_val* tmp = isl_val_int_from_si (ctxt, 0); scoplib_matrix_p m = s->domain->elt; for (i = 0; i < m->NbRows; ++i) { isl_local_space* ls = isl_local_space_from_space (isl_set_get_space (ret)); isl_constraint* cst; if (SCOPVAL_get_si(m->p[i][0]) == 0) cst = isl_equality_alloc (isl_local_space_copy (ls)); else cst = isl_inequality_alloc (isl_local_space_copy (ls)); // Set input dimensions. int k; for (k = 0; k < s->nb_iterators; ++k) { tmp = isl_val_set_si (tmp, SCOPVAL_get_si(m->p[i][k+1])); cst = isl_constraint_set_coefficient_val (cst, isl_dim_set, k, isl_val_copy (tmp)); } for (k = 0; k < scop->nb_parameters; ++k) { tmp = isl_val_set_si (tmp, SCOPVAL_get_si(m->p[i][k+1+s->nb_iterators])); cst = isl_constraint_set_coefficient_val (cst, isl_dim_param, k, isl_val_copy (tmp)); } tmp = isl_val_set_si (tmp, SCOPVAL_get_si(m->p[i][m->NbColumns - 1])); cst = isl_constraint_set_constant_val (cst, isl_val_copy (tmp)); // Insert constraint. ret = isl_set_add_constraint (ret, cst); } isl_val_free (tmp); return ret; }
void equality (const std::vector< int > & coeffs) { isl_constraint * equ = isl_equality_alloc (isl_local_space_copy (ls)); for (unsigned c = 0; c < coeffs.size (); ++c) equ = isl_constraint_set_coefficient_si (equ, isl_dim_set, c, coeffs[c]); solutions = isl_set_add_constraint (solutions, equ); }
void less_than_const (int v, int constant) { // v <= constant isl_constraint * less = isl_inequality_alloc (isl_local_space_copy (ls)); less = isl_constraint_set_coefficient_si (less, isl_dim_set, v, -1); less = isl_constraint_set_constant_si (less, constant); solutions = isl_set_add_constraint (solutions, less); }
void more_than_const (int v, int constant) { // constant <= v isl_constraint * more = isl_inequality_alloc (isl_local_space_copy (ls)); more = isl_constraint_set_coefficient_si (more, isl_dim_set, v, 1); more = isl_constraint_set_constant_si (more, -constant); solutions = isl_set_add_constraint (solutions, more); }