/** * pip_matrix2relation function : * This function is used to keep the compatibility with Piplib */ osl_relation_p pip_matrix2relation(PipMatrix* in) { int i, j, precision; osl_relation_p out; osl_int_t temp; if (in == NULL) return NULL; #if defined(CANDL_LINEAR_VALUE_IS_INT) precision = OSL_PRECISION_SP; #elif defined(CANDL_LINEAR_VALUE_IS_LONGLONG) precision = OSL_PRECISION_DP; #elif defined(CANDL_LINEAR_VALUE_IS_MP) precision = OSL_PRECISION_MP; #endif out = osl_relation_pmalloc(precision, in->NbRows, in->NbColumns); osl_int_init(precision, &temp); for (i = 0 ; i < in->NbRows ; i++) { for (j = 0 ; j < in->NbColumns ; j++) { #ifdef CANDL_LINEAR_VALUE_IS_INT temp.sp = in->p[i][j]; #elif defined(CANDL_LINEAR_VALUE_IS_LONGLONG) temp.dp = in->p[i][j]; #elif defined(CANDL_LINEAR_VALUE_IS_MP) mpz_set(*((mpz_t*)temp.mp), in->p[i][j]); #endif osl_int_assign(precision, &out->m[i][j], temp); } } osl_int_clear(precision, &temp); return out; }
// aware of beta structure osl_int_t clay_relation_line_gcd(osl_relation_p relation, int line, int column_start, int column_end) { osl_int_t gcd, tmp; int i; int gcd_assigned = 0; osl_int_init(relation->precision, &gcd); osl_int_init(relation->precision, &tmp); if (column_end - column_start < 1 || column_start >= relation->nb_columns || column_end > relation->nb_columns) { osl_int_set_si(relation->precision, &gcd, 0); return gcd; } else if (column_end - column_start == 1) { osl_int_assign(relation->precision, &gcd, relation->m[line][column_start]); return gcd; } for (i = column_start; i < column_end; i++) { if (i >= 1 && i < relation->nb_output_dims + 1 && (i % 2) == 1) { continue; // ignore betas } if (osl_int_zero(relation->precision, relation->m[line][i])) { continue; // ignore zeros } osl_int_abs(relation->precision, &tmp, relation->m[line][i]); if (!gcd_assigned) { osl_int_assign(relation->precision, &gcd, tmp); gcd_assigned = 1; } else { osl_int_gcd(relation->precision, &gcd, gcd, tmp); } } if (!gcd_assigned) { // if gcd zero or not found, default to 1. osl_int_set_si(relation->precision, &gcd, 1); } osl_int_clear(relation->precision, &tmp); return gcd; }
// assumes beta-structure; depth 1-based // TODO: do not return, possible leak osl_int_t clay_relation_gcd(osl_relation_p relation, int depth) { osl_int_t gcd; int row, col; int gcd_assigned = 0; int column = 2*depth; osl_int_init(relation->precision, &gcd); if (depth < -1 || depth == 0 || depth > relation->nb_output_dims / 2) { CLAY_debug("Called clay_relation_gcd with column outside bounds"); osl_int_set_si(relation->precision, &gcd, 0); return gcd; } for (row = 0; row < relation->nb_rows; row++) { if (depth != -1 && osl_int_zero(relation->precision, relation->m[row][column])) { continue; } for (col = 2; col < relation->nb_columns; col++) { // if beta, ignore if (col >= 1 && col < relation->nb_output_dims + 1 && (col % 2) == 1) { continue; } if (col == column) { continue; } if (gcd_assigned) { osl_int_gcd(relation->precision, &gcd, gcd, relation->m[row][col]); } else { if (!osl_int_zero(relation->precision, relation->m[row][col])) { osl_int_assign(relation->precision, &gcd, relation->m[row][col]); gcd_assigned = 1; } } } } return gcd; }
int main(int argc, char** argv) { if (argc > 1) { printf("argv are ignored\n"); } unsigned int nb_fail = 0; #ifdef OSL_GMP_IS_HERE int i; for (i = SCHAR_MIN; i <= SCHAR_MAX; ++i) { osl_int_t a_sp; osl_int_init_set_si(OSL_PRECISION_SP, &a_sp, i); osl_int_t a_dp; osl_int_init_set_si(OSL_PRECISION_DP, &a_dp, i); osl_int_t a_mp; osl_int_init_set_si(OSL_PRECISION_MP, &a_mp, i); int j; for (j = SCHAR_MIN; j <= SCHAR_MAX; ++j) { int error = 0; osl_int_t b_sp; osl_int_init_set_si(OSL_PRECISION_SP, &b_sp, j); osl_int_t b_dp; osl_int_init_set_si(OSL_PRECISION_DP, &b_dp, j); osl_int_t b_mp; osl_int_init_set_si(OSL_PRECISION_MP, &b_mp, j); osl_int_t c_sp; osl_int_init(OSL_PRECISION_SP, &c_sp); osl_int_t c_dp; osl_int_init(OSL_PRECISION_DP, &c_dp); osl_int_t c_mp; osl_int_init(OSL_PRECISION_MP, &c_mp); int const a_sp_i = osl_int_get_si(OSL_PRECISION_SP, a_sp); int const a_dp_i = osl_int_get_si(OSL_PRECISION_DP, a_dp); int const a_mp_i = osl_int_get_si(OSL_PRECISION_MP, a_mp); int const b_sp_i = osl_int_get_si(OSL_PRECISION_SP, b_sp); int const b_dp_i = osl_int_get_si(OSL_PRECISION_DP, b_dp); int const b_mp_i = osl_int_get_si(OSL_PRECISION_MP, b_mp); // osl_int_init_set_si & osl_int_init & osl_int_get_si if (!error) { int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (a_sp_i != a_dp_i || a_sp_i != a_mp_i) { error++; printf("Error osl_int_init_set_si or osl_int_get_si\n"); } if (b_sp_i != b_dp_i || b_sp_i != b_mp_i) { error++; printf("Error osl_int_init_set_si or osl_int_get_si\n"); } if (c_sp_i != c_dp_i || c_sp_i != c_mp_i || c_sp_i != 0) { error++; printf("Error osl_int_init or osl_int_get_si\n"); } } // osl_int_assign if (!error) { osl_int_assign(OSL_PRECISION_SP, &c_sp, b_sp); osl_int_assign(OSL_PRECISION_DP, &c_dp, b_dp); osl_int_assign(OSL_PRECISION_MP, &c_mp, b_mp); if (osl_int_ne(OSL_PRECISION_SP, c_sp, b_sp)) { error++; printf("Error osl_int_assign\n"); } if (osl_int_ne(OSL_PRECISION_DP, c_dp, b_dp)) { error++; printf("Error osl_int_assign\n"); } if (osl_int_ne(OSL_PRECISION_MP, c_mp, b_mp)) { error++; printf("Error osl_int_assign\n"); } } // osl_int_swap // osl_int_increment if (!error) { osl_int_increment(OSL_PRECISION_SP, &c_sp, a_sp); osl_int_increment(OSL_PRECISION_DP, &c_dp, a_dp); osl_int_increment(OSL_PRECISION_MP, &c_mp, a_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i || c_sp_i != a_sp_i + 1) { error++; printf("Error osl_int_increment\n"); } } // osl_int_decrement if (!error) { osl_int_decrement(OSL_PRECISION_SP, &c_sp, a_sp); osl_int_decrement(OSL_PRECISION_DP, &c_dp, a_dp); osl_int_decrement(OSL_PRECISION_MP, &c_mp, a_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i || c_sp_i != a_sp_i - 1) { error++; printf("Error osl_int_decrement\n"); } } // osl_int_add if (!error) { osl_int_add(OSL_PRECISION_SP, &c_sp, a_sp, b_sp); osl_int_add(OSL_PRECISION_DP, &c_dp, a_dp, b_dp); osl_int_add(OSL_PRECISION_MP, &c_mp, a_mp, b_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i || c_sp_i != a_sp_i + b_sp_i) { error++; printf("Error osl_int_add\n"); } } // osl_int_add_si // osl_int_sub if (!error) { osl_int_sub(OSL_PRECISION_SP, &c_sp, a_sp, b_sp); osl_int_sub(OSL_PRECISION_DP, &c_dp, a_dp, b_dp); osl_int_sub(OSL_PRECISION_MP, &c_mp, a_mp, b_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i || c_sp_i != a_sp_i - b_sp_i) { error++; printf("Error osl_int_add\n"); } } // osl_int_mul if (!error) { osl_int_mul(OSL_PRECISION_SP, &c_sp, a_sp, b_sp); osl_int_mul(OSL_PRECISION_DP, &c_dp, a_dp, b_dp); osl_int_mul(OSL_PRECISION_MP, &c_mp, a_mp, b_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i || c_sp_i != a_sp_i * b_sp_i) { error++; printf("Error osl_int_mul\n"); } } // osl_int_mul_si if (!error) { osl_int_mul_si(OSL_PRECISION_SP, &c_sp, a_sp, b_sp_i); osl_int_mul_si(OSL_PRECISION_DP, &c_dp, a_dp, b_dp_i); osl_int_mul_si(OSL_PRECISION_MP, &c_mp, a_mp, b_mp_i); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i || c_sp_i != a_sp_i * b_sp_i) { error++; printf("Error osl_int_mul_si\n"); } } // osl_int_div_exact if (!error && b_sp_i != 0 && a_sp_i % b_sp_i == 0) { osl_int_div_exact(OSL_PRECISION_SP, &c_sp, a_sp, b_sp); osl_int_div_exact(OSL_PRECISION_DP, &c_dp, a_dp, b_dp); osl_int_div_exact(OSL_PRECISION_MP, &c_mp, a_mp, b_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i || c_sp_i != a_sp_i / b_sp_i) { error++; printf("Error osl_int_div_exact\n"); } } // osl_int_floor_div_q if (!error && b_sp_i != 0) { osl_int_floor_div_q(OSL_PRECISION_SP, &c_sp, a_sp, b_sp); osl_int_floor_div_q(OSL_PRECISION_DP, &c_dp, a_dp, b_dp); osl_int_floor_div_q(OSL_PRECISION_MP, &c_mp, a_mp, b_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i) { error++; printf("Error osl_int_floor_div_q\n"); } } // osl_int_floor_div_r if (!error && b_sp_i != 0) { osl_int_floor_div_r(OSL_PRECISION_SP, &c_sp, a_sp, b_sp); osl_int_floor_div_r(OSL_PRECISION_DP, &c_dp, a_dp, b_dp); osl_int_floor_div_r(OSL_PRECISION_MP, &c_mp, a_mp, b_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i) { error++; printf("Error osl_int_floor_div_r\n"); } } // osl_int_floor_div_q_r if (!error && b_sp_i != 0) { osl_int_t q_sp; osl_int_init(OSL_PRECISION_SP, &q_sp); osl_int_t q_dp; osl_int_init(OSL_PRECISION_DP, &q_dp); osl_int_t q_mp; osl_int_init(OSL_PRECISION_MP, &q_mp); osl_int_t r_sp; osl_int_init(OSL_PRECISION_SP, &r_sp); osl_int_t r_dp; osl_int_init(OSL_PRECISION_DP, &r_dp); osl_int_t r_mp; osl_int_init(OSL_PRECISION_MP, &r_mp); osl_int_floor_div_q_r(OSL_PRECISION_SP, &q_sp, &r_sp, a_sp, b_sp); osl_int_floor_div_q_r(OSL_PRECISION_DP, &q_dp, &r_dp, a_dp, b_dp); osl_int_floor_div_q_r(OSL_PRECISION_MP, &q_mp, &r_mp, a_mp, b_mp); int q_sp_i = osl_int_get_si(OSL_PRECISION_SP, q_sp); int q_dp_i = osl_int_get_si(OSL_PRECISION_DP, q_dp); int q_mp_i = osl_int_get_si(OSL_PRECISION_MP, q_mp); int r_sp_i = osl_int_get_si(OSL_PRECISION_SP, r_sp); int r_dp_i = osl_int_get_si(OSL_PRECISION_DP, r_dp); int r_mp_i = osl_int_get_si(OSL_PRECISION_MP, r_mp); if (q_sp_i != q_dp_i || q_sp_i != q_mp_i) { error++; printf("Error osl_int_floor_div_q_r\n"); } if (r_sp_i != r_dp_i || r_sp_i != r_mp_i) { error++; printf("Error osl_int_floor_div_q_r\n"); } } // osl_int_mod if (!error && b_sp_i != 0) { osl_int_mod(OSL_PRECISION_SP, &c_sp, a_sp, b_sp); osl_int_mod(OSL_PRECISION_DP, &c_dp, a_dp, b_dp); osl_int_mod(OSL_PRECISION_MP, &c_mp, a_mp, b_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i) { error++; printf("Error osl_int_mod\n"); } } // osl_int_gcd if (!error) { osl_int_gcd(OSL_PRECISION_SP, &c_sp, a_sp, b_sp); osl_int_gcd(OSL_PRECISION_DP, &c_dp, a_dp, b_dp); osl_int_gcd(OSL_PRECISION_MP, &c_mp, a_mp, b_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i) { error++; printf("Error osl_int_gcd\n"); } } // osl_int_oppose if (!error) { osl_int_oppose(OSL_PRECISION_SP, &c_sp, b_sp); osl_int_oppose(OSL_PRECISION_DP, &c_dp, b_dp); osl_int_oppose(OSL_PRECISION_MP, &c_mp, b_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i) { error++; printf("Error osl_int_oppose\n"); } } // osl_int_abs if (!error) { osl_int_abs(OSL_PRECISION_SP, &c_sp, b_sp); osl_int_abs(OSL_PRECISION_DP, &c_dp, b_dp); osl_int_abs(OSL_PRECISION_MP, &c_mp, b_mp); int c_sp_i = osl_int_get_si(OSL_PRECISION_SP, c_sp); int c_dp_i = osl_int_get_si(OSL_PRECISION_DP, c_dp); int c_mp_i = osl_int_get_si(OSL_PRECISION_MP, c_mp); if (c_sp_i != c_dp_i || c_sp_i != c_mp_i) { error++; printf("Error osl_int_abs\n"); } } // osl_int_size_in_base_2 if (!error) { size_t r_sp = osl_int_size_in_base_2(OSL_PRECISION_SP, b_sp); size_t r_dp = osl_int_size_in_base_2(OSL_PRECISION_DP, b_dp); size_t r_mp = osl_int_size_in_base_2(OSL_PRECISION_MP, b_mp); osl_int_set_si(OSL_PRECISION_SP, &c_sp, r_sp); osl_int_set_si(OSL_PRECISION_DP, &c_dp, r_dp); osl_int_set_si(OSL_PRECISION_MP, &c_mp, r_mp); if (r_sp != r_dp || r_sp != r_mp) { error++; printf("Error osl_int_size_in_base_2\n"); } } // osl_int_size_in_base_10 // if (!error) { // size_t r_sp = osl_int_size_in_base_10(OSL_PRECISION_SP, b_sp); // size_t r_dp = osl_int_size_in_base_10(OSL_PRECISION_DP, b_dp); // size_t r_mp = osl_int_size_in_base_10(OSL_PRECISION_MP, b_mp); // // osl_int_set_si(OSL_PRECISION_SP, &c_sp, r_sp); // osl_int_set_si(OSL_PRECISION_DP, &c_dp, r_dp); // osl_int_set_si(OSL_PRECISION_MP, &c_mp, r_mp); // // if (r_sp != r_dp || r_sp != r_mp) // { error++; printf("Error osl_int_size_in_base_10\n"); } // } // osl_int_eq // osl_int_ne // osl_int_pos // osl_int_neg // osl_int_zero // osl_int_one // osl_int_mone // osl_int_divisible if (error) { printf("Error with:\n"); printf("\n"); printf("a_sp = "); osl_int_print(stdout, OSL_PRECISION_SP, a_sp); printf("\n"); printf("a_dp = "); osl_int_print(stdout, OSL_PRECISION_DP, a_dp); printf("\n"); printf("a_mp = "); osl_int_print(stdout, OSL_PRECISION_MP, a_mp); printf("\n"); printf("\n"); printf("b_sp = "); osl_int_print(stdout, OSL_PRECISION_SP, b_sp); printf("\n"); printf("b_dp = "); osl_int_print(stdout, OSL_PRECISION_DP, b_dp); printf("\n"); printf("b_mp = "); osl_int_print(stdout, OSL_PRECISION_MP, b_mp); printf("\n"); printf("\n"); printf("c_sp = "); osl_int_print(stdout, OSL_PRECISION_SP, c_sp); printf("\n"); printf("c_dp = "); osl_int_print(stdout, OSL_PRECISION_DP, c_dp); printf("\n"); printf("c_mp = "); osl_int_print(stdout, OSL_PRECISION_MP, c_mp); printf("\n"); printf("\n"); nb_fail += error; } } } printf("%s ", argv[0]); printf("fails = %d\n", nb_fail); #else printf("%s ", argv[0]); printf("works only with GMP\n"); #endif return nb_fail; }
/** * Creates a ddv of size equal to the maximal loop depth of the source * and target of the statement, according to the dependence polyhedron. * */ static CandlDDV* candl_ddv_create_from_dep(osl_dependence_p dep, int loop_id, int ddv_size) { osl_relation_p mat = dep->domain; osl_statement_p src = dep->stmt_source_ptr; candl_statement_usr_p usr = src->usr; CandlDDV* dv = candl_ddv_alloc(ddv_size); int precision = src->domain->precision; int i, j; int pos; dv->loop_id = loop_id; dv->deptype = dep->type; // Create the template of the system to operate on. // Add one dimension at the beginning, and one row for the extra constraint. int nb_par = src->domain->nb_parameters; osl_relation_p testsyst = osl_relation_pmalloc(precision, mat->nb_rows + 1, mat->nb_columns + 1); for (pos = 0; pos < mat->nb_rows; ++pos) { osl_int_assign(precision, &testsyst->m[pos][0], mat->m[pos][0]); for (j = 1; j < mat->nb_columns; ++j) osl_int_assign(precision, &testsyst->m[pos][j + 1],mat->m[pos][j]); } int has_eq, has_pos, has_neg, has_cst; int scal1, scal2; for (i = 1; i <= ddv_size; ++i) { // Test for '='. osl_int_set_si(precision, &testsyst->m[pos][0], 0); osl_int_set_si(precision, &testsyst->m[pos][1 + i], 1); osl_int_set_si(precision, &testsyst->m[pos][1 + i + usr->depth], -1); osl_int_set_si(precision, &testsyst->m[pos][testsyst->nb_columns-1], 0); has_eq = pip_has_rational_point(testsyst, NULL, 1); // Test for '>'. osl_int_set_si(precision, &testsyst->m[pos][0], 1); osl_int_set_si(precision, &testsyst->m[pos][1 + i], 1); osl_int_set_si(precision, &testsyst->m[pos][1 + i + usr->depth], -1); osl_int_set_si(precision, &testsyst->m[pos][testsyst->nb_columns-1], -1); has_pos = pip_has_rational_point(testsyst, NULL, 1); // Test for '<'. osl_int_set_si(precision, &testsyst->m[pos][0], 1); osl_int_set_si(precision, &testsyst->m[pos][1 + i], -1); osl_int_set_si(precision, &testsyst->m[pos][1 + i + usr->depth], 1); osl_int_set_si(precision, &testsyst->m[pos][testsyst->nb_columns-1], -1); has_neg = pip_has_rational_point(testsyst, NULL, 1); // Test for constant distance. // min(x_R^i - x_S^i) // max(x_R^i - x_S^i) = - min(- x_R^i + x_S^i) osl_int_set_si(precision, &testsyst->m[pos][0], 0); osl_int_set_si(precision, &testsyst->m[pos][1], 1); osl_int_set_si(precision, &testsyst->m[pos][1 + i], -1); osl_int_set_si(precision, &testsyst->m[pos][1 + i + usr->depth], 1); osl_int_set_si(precision, &testsyst->m[pos][testsyst->nb_columns-1], 0); has_cst = candl_ddv_constant_val(testsyst, &scal1, nb_par); if (has_cst) { osl_int_set_si(precision, &testsyst->m[pos][1 + i], 1); osl_int_set_si(precision, &testsyst->m[pos][1 + i + usr->depth], -1); osl_int_set_si(precision, &testsyst->m[pos][1], 1); has_cst = candl_ddv_constant_val(testsyst, &scal2, nb_par); scal2 *= -1; if (has_cst) has_cst = (scal1 == scal2); } if (has_cst && scal1 != 0) { candl_ddv_set_type_at(dv, candl_dv_scalar, i - 1); candl_ddv_set_value_at(dv, scal1, i - 1); } else if (has_pos && has_neg) candl_ddv_set_type_at(dv, candl_dv_star, i - 1); else if (has_pos) candl_ddv_set_type_at(dv, candl_dv_plus, i - 1); else if (has_neg) candl_ddv_set_type_at(dv, candl_dv_minus, i - 1); else if (has_eq) { candl_ddv_set_type_at(dv, candl_dv_eq, i - 1); candl_ddv_set_value_at(dv, 0, i - 1); } // Reset the constraint. osl_int_set_si(precision, &testsyst->m[pos][0], 0); osl_int_set_si(precision, &testsyst->m[pos][1], 0); osl_int_set_si(precision, &testsyst->m[pos][1 + i], 0); osl_int_set_si(precision, &testsyst->m[pos][1 + i + usr->depth], 0); osl_int_set_si(precision, &testsyst->m[pos][testsyst->nb_columns-1], 0); } return dv; }