From: rguenth Date: Wed, 15 Feb 2012 12:20:10 +0000 (+0000) Subject: 2012-02-15 Tobias Grosser X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f260bce70fdf66cf1a78a639582e09f5a62c2700;p=thirdparty%2Fgcc.git 2012-02-15 Tobias Grosser PR tree-optimization/50561 * graphite-flattening.c (lst_project_loop): Do not remove old scattering dimensions after flattening. (lst_do_flatten): Likewise. * gcc.dg/graphite/pr50561.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184265 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1d88845e56e7..1e3d36f22f3e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-02-15 Tobias Grosser + + PR tree-optimization/50561 + * graphite-flattening.c (lst_project_loop): Do not + remove old scattering dimensions after flattening. + (lst_do_flatten): Likewise. + 2012-02-15 Georg-Johann Lay * doc/extend.texi (AVR Built-in Functions): Remove doc for diff --git a/gcc/graphite-flattening.c b/gcc/graphite-flattening.c index ccd0f5f0c6ff..33f25e01b03f 100644 --- a/gcc/graphite-flattening.c +++ b/gcc/graphite-flattening.c @@ -277,12 +277,26 @@ lst_project_loop (lst_p outer, lst_p inner, mpz_t stride) ppl_delete_Linear_Expression (expr); /* Remove inner loop and the static schedule of its body. */ - ds = XNEWVEC (ppl_dimension_type, 2); - ds[0] = inner_dim; - ds[1] = inner_dim + 1; - ppl_Polyhedron_remove_space_dimensions (poly, ds, 2); - PBB_NB_SCATTERING_TRANSFORM (pbb) -= 2; - free (ds); + /* FIXME: As long as we use PPL we are not able to remove the old + scattering dimensions. The reason is that these dimensions are not + entirely unused. They are not necessary as part of the scheduling + vector, as the earlier dimensions already unambiguously define the + execution time, however they may still be needed to carry modulo + constraints as introduced e.g. by strip mining. The correct solution + would be to project these dimensions out of the scattering polyhedra. + In case they are still required to carry modulo constraints they should be kept + internally as existentially quantified dimensions. PPL does only support + projection of rational polyhedra, however in this case we need an integer + projection. With isl this will be trivial to implement. For now we just + leave the dimensions. This is a little ugly, but should be correct. */ + if (0) { + ds = XNEWVEC (ppl_dimension_type, 2); + ds[0] = inner_dim; + ds[1] = inner_dim + 1; + ppl_Polyhedron_remove_space_dimensions (poly, ds, 2); + PBB_NB_SCATTERING_TRANSFORM (pbb) -= 2; + free (ds); + } } mpz_clear (x); @@ -412,7 +426,21 @@ lst_do_flatten (lst_p lst) if (LST_LOOP_P (l)) { res |= lst_flatten_loop (l, zero); - remove_unused_scattering_dimensions (l); + + /* FIXME: As long as we use PPL we are not able to remove the old + scattering dimensions. The reason is that these dimensions are not + entirely unused. They are not necessary as part of the scheduling + vector, as the earlier dimensions already unambiguously define the + execution time, however they may still be needed to carry modulo + constraints as introduced e.g. by strip mining. The correct solution + would be to project these dimensions out of the scattering polyhedra. + In case they are still required to carry modulo constraints they should be kept + internally as existentially quantified dimensions. PPL does only support + projection of rational polyhedra, however in this case we need an integer + projection. With isl this will be trivial to implement. For now we just + leave the dimensions. This is a little ugly, but should be correct. */ + if (0) + remove_unused_scattering_dimensions (l); } lst_update_scattering (lst); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b0e7c456f883..64bdac5cfc25 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-02-15 Tobias Grosser + + PR tree-optimization/50561 + * gcc.dg/graphite/pr50561.c: New testcase. + 2012-02-15 Georg-Johann Lay * gcc.target/avr/torture/builtin_insert_bits-1.c: New test. diff --git a/gcc/testsuite/gcc.dg/graphite/pr50561.c b/gcc/testsuite/gcc.dg/graphite/pr50561.c new file mode 100644 index 000000000000..70c6bbcc2a36 --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr50561.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -floop-flatten -floop-strip-mine" } */ + +void f (unsigned *s) +{ + int n; + for (n = 0; n < 256; n++) + s[n] = 0; +}