aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlexander Monakov <amonakov@ispras.ru>2009-11-25 08:17:38 +0300
committerSebastian Pop <spop@gcc.gnu.org>2009-11-25 05:17:38 +0000
commit07b0d0e2535ff62663cbeefb21b8d2a37a48469a (patch)
treec9231f3e31da81f882521e064ecae446d91fdbaf /gcc
parent67255edf95e35608b4d3f3b4a375203019d6b8c1 (diff)
downloadgcc-07b0d0e2535ff62663cbeefb21b8d2a37a48469a.zip
gcc-07b0d0e2535ff62663cbeefb21b8d2a37a48469a.tar.gz
gcc-07b0d0e2535ff62663cbeefb21b8d2a37a48469a.tar.bz2
graphite-sese-to-poly.c (build_loop_iteration_domains): Generalize construction of parameter constraints from loop iteration analysis.
2009-10-20 Alexander Monakov <amonakov@ispras.ru> * graphite-sese-to-poly.c (build_loop_iteration_domains): Generalize construction of parameter constraints from loop iteration analysis. * gcc.dg/graphite/run-id-2.c: New test. From-SVN: r154610
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog.graphite6
-rw-r--r--gcc/graphite-sese-to-poly.c51
2 files changed, 31 insertions, 26 deletions
diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index fb6b9ce..acf847c 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,3 +1,9 @@
+2009-10-20 Alexander Monakov <amonakov@ispras.ru>
+
+ * graphite-sese-to-poly.c (build_loop_iteration_domains): Generalize
+ construction of parameter constraints from loop iteration analysis.
+ * gcc.dg/graphite/run-id-2.c: New test.
+
2009-10-17 Sebastian Pop <sebastian.pop@amd.com>
* graphite-interchange.c (memory_stride_in_loop): Delete p1, lma
diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index 8f4d302..214dc8b 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -1140,15 +1140,22 @@ build_loop_iteration_domains (scop_p scop, struct loop *loop,
Value val;
ppl_Linear_Expression_t nb_iters_le;
ppl_Polyhedron_t pol;
- graphite_dim_t p, n = scop_nb_params (scop);
+ graphite_dim_t n = scop_nb_params (scop);
ppl_Coefficient_t coef;
ppl_new_C_Polyhedron_from_space_dimension (&pol, dim, 0);
ppl_new_Linear_Expression_from_Linear_Expression (&nb_iters_le,
ub_expr);
+ /* Construct the negated number of last iteration in VAL. */
value_init (val);
mpz_set_double_int (val, nit, false);
+ value_sub_int (val, val, 1);
+ value_oppose (val, val);
+
+ /* NB_ITERS_LE holds number of last iteration in parametrical form.
+ Subtract estimated number of last iteration and assert that result
+ is not positive. */
ppl_new_Coefficient_from_mpz_t (&coef, val);
ppl_Linear_Expression_add_to_inhomogeneous (nb_iters_le, coef);
ppl_delete_Coefficient (coef);
@@ -1156,33 +1163,25 @@ build_loop_iteration_domains (scop_p scop, struct loop *loop,
PPL_CONSTRAINT_TYPE_LESS_OR_EQUAL);
ppl_Polyhedron_add_constraint (pol, ub);
- for (p = 0; p < n; p++)
+ /* Remove all but last N dimensions from POL to obtain constraints
+ on parameters. */
{
- ppl_Linear_Expression_t le;
-
- ppl_new_Linear_Expression_with_dimension (&le, dim);
- ppl_set_coef (le, nb + 1 + p, -1);
-
- value_set_si (val, -1);
- ppl_min_for_le_polyhedron (pol, le, val);
- if (!value_mone_p (val))
- {
- ppl_Linear_Expression_t parm_bound;
- ppl_Constraint_t cstr;
-
- ppl_new_Linear_Expression_with_dimension (&parm_bound, n);
- ppl_set_coef (parm_bound, p, -1);
- ppl_set_inhomogeneous_gmp (parm_bound, val);
- ppl_new_Constraint (&cstr, parm_bound,
- PPL_CONSTRAINT_TYPE_GREATER_OR_EQUAL);
- ppl_Pointset_Powerset_C_Polyhedron_add_constraint
- (SCOP_CONTEXT (scop), cstr);
-
- ppl_delete_Constraint (cstr);
- ppl_delete_Linear_Expression (parm_bound);
- }
+ ppl_dimension_type *dims = XNEWVEC (ppl_dimension_type, dim - n);
+ graphite_dim_t i;
+ for (i = 0; i < dim - n; i++)
+ dims[i] = i;
+ ppl_Polyhedron_remove_space_dimensions (pol, dims, dim - n);
+ XDELETEVEC (dims);
+ }
- ppl_delete_Linear_Expression (le);
+ /* Add constraints on parameters to SCoP context. */
+ {
+ ppl_Pointset_Powerset_C_Polyhedron_t constraints_ps;
+ ppl_new_Pointset_Powerset_C_Polyhedron_from_C_Polyhedron
+ (&constraints_ps, pol);
+ ppl_Pointset_Powerset_C_Polyhedron_intersection_assign
+ (SCOP_CONTEXT (scop), constraints_ps);
+ ppl_delete_Pointset_Powerset_C_Polyhedron (constraints_ps);
}
ppl_delete_Polyhedron (pol);