Commit 28db21ee by Tobias Grosser Committed by Richard Biener

re PR tree-optimization/50561 (ICE when compiling zlib with -O2 -floop-flatten -floop-strip-mine)

2012-02-15  Tobias Grosser <grosser@fim.uni-passau.de>

	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.

From-SVN: r184265
parent 0c578db6
2012-02-15 Tobias Grosser <grosser@fim.uni-passau.de>
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 <avr@gjlay.de> 2012-02-15 Georg-Johann Lay <avr@gjlay.de>
* doc/extend.texi (AVR Built-in Functions): Remove doc for * doc/extend.texi (AVR Built-in Functions): Remove doc for
......
...@@ -277,12 +277,26 @@ lst_project_loop (lst_p outer, lst_p inner, mpz_t stride) ...@@ -277,12 +277,26 @@ lst_project_loop (lst_p outer, lst_p inner, mpz_t stride)
ppl_delete_Linear_Expression (expr); ppl_delete_Linear_Expression (expr);
/* Remove inner loop and the static schedule of its body. */ /* Remove inner loop and the static schedule of its body. */
ds = XNEWVEC (ppl_dimension_type, 2); /* FIXME: As long as we use PPL we are not able to remove the old
ds[0] = inner_dim; scattering dimensions. The reason is that these dimensions are not
ds[1] = inner_dim + 1; entirely unused. They are not necessary as part of the scheduling
ppl_Polyhedron_remove_space_dimensions (poly, ds, 2); vector, as the earlier dimensions already unambiguously define the
PBB_NB_SCATTERING_TRANSFORM (pbb) -= 2; execution time, however they may still be needed to carry modulo
free (ds); 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); mpz_clear (x);
...@@ -412,7 +426,21 @@ lst_do_flatten (lst_p lst) ...@@ -412,7 +426,21 @@ lst_do_flatten (lst_p lst)
if (LST_LOOP_P (l)) if (LST_LOOP_P (l))
{ {
res |= lst_flatten_loop (l, zero); 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); lst_update_scattering (lst);
......
2012-02-15 Tobias Grosser <grosser@fim.uni-passau.de>
PR tree-optimization/50561
* gcc.dg/graphite/pr50561.c: New testcase.
2012-02-15 Georg-Johann Lay <avr@gjlay.de> 2012-02-15 Georg-Johann Lay <avr@gjlay.de>
* gcc.target/avr/torture/builtin_insert_bits-1.c: New test. * gcc.target/avr/torture/builtin_insert_bits-1.c: New test.
......
/* { 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment