Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1
cloog
cloog-ppl.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File cloog-ppl.patch of Package cloog
diff --git a/include/cloog/ppl_backend.h b/include/cloog/ppl_backend.h index c3b0ad9..44df0f0 100644 --- a/include/cloog/ppl_backend.h +++ b/include/cloog/ppl_backend.h @@ -38,6 +38,11 @@ #ifndef CLOOG_PPL_BACKEND_H #define CLOOG_PPL_BACKEND_H + +#if PPL_VERSION_MAJOR == 0 && PPL_VERSION_MINOR < 10 +# error "PPL version 0.10 or following is required" +#endif + #if defined(__cplusplus) extern "C" { diff --git a/source/ppl/domain.c b/source/ppl/domain.c index 1f2b7a3..99e53a2 100644 --- a/source/ppl/domain.c +++ b/source/ppl/domain.c @@ -42,6 +42,10 @@ # include "cloog/cloog.h" #include "matrix.h" +#ifndef USE_PPL_POWERSETS +# define USE_PPL_POWERSETS 1 +#endif + /* Variables names for pretty printing. */ static char wild_name[200][40]; @@ -111,6 +115,12 @@ cloog_initialize (void) exit (1); } + if (ppl_restore_pre_PPL_rounding() < 0) + { + fprintf (stderr, "Cannot restore the pre-PPL rounding mode.\n"); + exit (1); + } + if (ppl_set_error_handler (error_handler) < 0) { fprintf (stderr, "Cannot install the custom error handler.\n"); @@ -429,7 +439,7 @@ cloog_translate_constraint_matrix_1 (ppl_Polyhedron_t ppl, CloogMatrix *matrix) for (i = 0; i < matrix->NbRows; i++) { ppl_Constraint_t c = cloog_translate_constraint (matrix, i, 0, -1); - ppl_Polyhedron_add_constraint_and_minimize (ppl, c); + ppl_Polyhedron_add_constraint (ppl, c); ppl_delete_Constraint (c); } } @@ -448,13 +458,13 @@ cloog_translate_constraint_matrix (CloogMatrix *matrix) /* Put the constraint matrix of polyhedron RES under Cloog's normal form: Cloog expects to see - 0 1 1 -9 - 1 0 1 -1 + 0 1 1 -9 + 1 0 1 -1 instead of this: - 0 1 1 -9 - 1 -1 0 8 + 0 1 1 -9 + 1 -1 0 8 These two forms are equivalent but the expected form uses rightmost indices for inequalities. */ @@ -589,7 +599,7 @@ cloog_translate_ppl_polyhedron_1 (ppl_Polyhedron_t pol) return cloog_empty_polyhedron (dim); } - /* Add the positivity constraint. */ + /* Add the positivity constraint. */ if (1 || orig_ineqs == 0) { row = ineqs; @@ -787,16 +797,13 @@ cloog_domain_convex (CloogDomain * domain) polyhedra_union upol = cloog_domain_upol (domain); CloogMatrix *m = cloog_upol_domain2matrix (upol); ppl_Polyhedron_t p1 = cloog_translate_constraint_matrix (m); - + upol = cloog_upol_next (upol); while (upol) { - ppl_const_Generator_System_t g; - m = cloog_upol_domain2matrix (upol); p2 = cloog_translate_constraint_matrix (m); - ppl_Polyhedron_get_generators (p2, &g); - ppl_Polyhedron_add_generators_and_minimize (p1, g); + ppl_Polyhedron_upper_bound_assign (p1, p2); ppl_delete_Polyhedron (p2); upol = cloog_upol_next (upol); @@ -870,6 +877,75 @@ cloog_positivity_constraint_p (CloogMatrix *matrix, int i, int dim) | S; */ +#if USE_PPL_POWERSETS + +CloogDomain * +cloog_domain_simplify (CloogDomain * dom1, CloogDomain * dom2) +{ + if (!dom1) + return dom1; + if (!dom2) + return dom2; + + CloogDomain *res = NULL; + + ppl_Pointset_Powerset_C_Polyhedron_t ps1, ps2; + ppl_dimension_type dim = cloog_domain_dim(dom1); + /* Translate dom1 into PPL powerset ps1. */ + { + ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension(&ps1, dim, 1); + polyhedra_union u1; + for (u1 = cloog_domain_upol (dom1); u1; u1 = cloog_upol_next (u1)) + { + CloogMatrix *m = cloog_upol_domain2matrix (u1); + ppl_const_Polyhedron_t ph = cloog_translate_constraint_matrix (m); + ppl_Pointset_Powerset_C_Polyhedron_add_disjunct(ps1, ph); + ppl_delete_Polyhedron(ph); + cloog_matrix_free (m); + } + } + + /* Translate dom2 into PPL powerset ps2. */ + { + ppl_new_Pointset_Powerset_C_Polyhedron_from_space_dimension(&ps2, dim, 1); + polyhedra_union u2; + for (u2 = cloog_domain_upol (dom2); u2; u2 = cloog_upol_next (u2)) + { + CloogMatrix *m = cloog_upol_domain2matrix (u2); + ppl_Polyhedron_t ph = cloog_translate_constraint_matrix (m); + ppl_Pointset_Powerset_C_Polyhedron_add_disjunct(ps2, ph); + ppl_delete_Polyhedron(ph); + cloog_matrix_free (m); + } + } + + ppl_Pointset_Powerset_C_Polyhedron_simplify_using_context_assign(ps1, ps2); + + /* Translate back simplified ps1 into res. */ + ppl_Pointset_Powerset_C_Polyhedron_const_iterator_t i; + ppl_new_Pointset_Powerset_C_Polyhedron_const_iterator(&i); + ppl_Pointset_Powerset_C_Polyhedron_const_iterator_t end; + ppl_new_Pointset_Powerset_C_Polyhedron_const_iterator(&end); + for (ppl_Pointset_Powerset_C_Polyhedron_const_iterator_begin(ps1, i), + ppl_Pointset_Powerset_C_Polyhedron_const_iterator_end(ps1, end); + !ppl_Pointset_Powerset_C_Polyhedron_const_iterator_equal_test(i, end); + ppl_Pointset_Powerset_C_Polyhedron_const_iterator_increment(i)) + { + ppl_const_Polyhedron_t ph; + ppl_Pointset_Powerset_C_Polyhedron_const_iterator_dereference(i, &ph); + res = cloog_domain_union (res, cloog_translate_ppl_polyhedron (ph)); + } + + /* Final clean-up. */ + ppl_delete_Pointset_Powerset_C_Polyhedron_const_iterator(i); + ppl_delete_Pointset_Powerset_C_Polyhedron_const_iterator(end); + ppl_delete_Pointset_Powerset_C_Polyhedron(ps1); + ppl_delete_Pointset_Powerset_C_Polyhedron(ps2); + return res; +} + +#else /* !USE_PPL_POWERSETS */ + CloogDomain * cloog_domain_simplify (CloogDomain * dom1, CloogDomain * dom2) { @@ -898,8 +974,9 @@ cloog_domain_simplify (CloogDomain * dom1, CloogDomain * dom2) return res; } +#endif /* !USE_PPL_POWERSETS */ -static polyhedra_union +static polyhedra_union cloog_upol_copy (polyhedra_union p) { polyhedra_union res = cloog_new_upol (cloog_pol_copy (cloog_upol_polyhedron (p))); @@ -1108,17 +1185,17 @@ cloog_domain_difference (CloogDomain * d1, CloogDomain * d2) /* Add the constraint "-matrix[i] - 1 >= 0". */ p3 = cloog_translate_constraint_matrix (m1); cstr = cloog_translate_oppose_constraint (matrix, i, -1, 1); - ppl_Polyhedron_add_constraint_and_minimize (p3, cstr); + ppl_Polyhedron_add_constraint (p3, cstr); ppl_delete_Constraint (cstr); res = cloog_domain_union (res, cloog_translate_ppl_polyhedron (p3)); ppl_delete_Polyhedron (p3); - + /* For an equality, add the constraint "matrix[i] - 1 >= 0". */ if (cloog_matrix_row_is_eq_p (matrix, i)) { p3 = cloog_translate_constraint_matrix (m1); cstr = cloog_translate_constraint (matrix, i, -1, 1); - ppl_Polyhedron_add_constraint_and_minimize (p3, cstr); + ppl_Polyhedron_add_constraint (p3, cstr); ppl_delete_Constraint (cstr); res = cloog_domain_union (res, cloog_translate_ppl_polyhedron (p3)); ppl_delete_Polyhedron (p3); @@ -1395,7 +1472,7 @@ cloog_domain_polyhedron_compare (CloogMatrix *m1, CloogMatrix *m2, int level, in * (level) is the level to consider for partial ordering (nb_par) is the * parameter space dimension, (permut) if not NULL, is an array of (nb_pols) * integers that contains a permutation specification after call in order to - * apply the topological sorting. + * apply the topological sorting. */ void @@ -1411,7 +1488,7 @@ cloog_domain_sort (CloogDomain **doms, unsigned nb_pols, unsigned level, /* Note that here we do a comparison per tuple of polyhedra. PolyLib does not do this, but instead it does fewer comparisons and with a complex reasoning they infer that it some comparisons - are not useful. The result is that PolyLib has wrong permutations. + are not useful. The result is that PolyLib has wrong permutations. FIXME: In the PolyLib backend, Cloog should use this algorithm instead of PolyhedronTSort, and cloog_domain_polyhedron_compare @@ -1542,7 +1619,7 @@ cloog_domain_list_free (CloogDomainList * list) * cloog_domain_read function: * Adaptation from the PolyLib. This function reads a matrix into a file (foo, * posibly stdin) and returns a pointer to a polyhedron containing the read - * information. + * information. * - October 18th 2001: first version. */ CloogDomain * @@ -1562,7 +1639,7 @@ cloog_domain_read (FILE * foo) /** * cloog_domain_union_read function: * This function reads a union of polyhedra into a file (foo, posibly stdin) and - * returns a pointer to a Polyhedron containing the read information. + * returns a pointer to a Polyhedron containing the read information. * - September 9th 2002: first version. * - October 29th 2005: (debug) removal of a leak counting "correction" that * was just false since ages. @@ -1601,7 +1678,7 @@ cloog_domain_union_read (FILE * foo) /** * cloog_domain_list_read function: * This function reads a list of polyhedra into a file (foo, posibly stdin) and - * returns a pointer to a CloogDomainList containing the read information. + * returns a pointer to a CloogDomainList containing the read information. * - November 6th 2001: first version. */ CloogDomainList * @@ -1769,7 +1846,7 @@ cloog_domain_extend (CloogDomain * domain, int dim, int nb_par) * constraint inside a polyhedron, 0 otherwise. * - domain is the polyhedron to check, ** - * - November 28th 2001: first version. + * - November 28th 2001: first version. * - June 26th 2003: for iterators, more 'never true' constraints are found * (compare cholesky2 and vivien with a previous version), * checking for the parameters created (compare using vivien). @@ -2034,7 +2111,7 @@ cloog_matrix_hermite_1 (Value * a, Value * b, Value * d, int n, int p, int q) cloog_matrix_hermite_combine (a, b, *c, d, k, n, p, q, pivot, x, x_inv); cloog_matrix_hermite_1 (a, b, d, n, p, q + 1); - + value_clear (pivot); value_clear (x); value_clear (x_inv); @@ -2159,7 +2236,7 @@ static inline void cloog_exchange_rows (CloogMatrix * m, int row1, int row2) { int i; - + for (i = 0; i < (int) m->NbColumns; i++) value_swap (m->p[row1][i], m->p[row2][i]); } @@ -2483,7 +2560,7 @@ cloog_dio_reduce_diagonal (CloogMatrix *m, Value *coeffs, int nbc, int rank) value_set_si (sum, 0); for (j = 0; j < i; j++) value_addmul (sum, res[j], m->p[i][j]); - + value_subtract (tmp, coeffs[i], sum); value_modulus (tmp, tmp, m->p[i][i]); if (value_notzero_p (tmp)) @@ -2652,7 +2729,7 @@ cloog_solve_diophantine (CloogMatrix * m, CloogMatrix ** u, Vector ** x) * to be found, * - looking_level is the column number of the unknown that impose a stride to * the first unknown. - * - stride is the stride that is returned back as a function parameter. + * - stride is the stride that is returned back as a function parameter. * - offset is the value of the constant c if the condition is of the shape * (i + c)%s = 0, s being the stride. ** @@ -2722,7 +2799,7 @@ cloog_domain_stride (CloogDomain *domain, int strided_level, int nb_par, Value * value_pmodulus (*offset, *offset, *stride); } - cloog_matrix_free (U); + cloog_matrix_free (U); Vector_Free (V); return; }
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor