re PR tree-optimization/57488 (loop terminates early at -O3)

2013-06-24  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/57488
	* tree-ssa-pre.c (insert): Clear NEW sets before each iteration.

	* gcc.dg/torture/pr57488.c: New testcase.

From-SVN: r200363
This commit is contained in:
Richard Biener 2013-06-24 10:22:22 +00:00 committed by Richard Biener
parent 03a8a2d57d
commit 3dbc97a91e
4 changed files with 74 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2013-06-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/57488
* tree-ssa-pre.c (insert): Clear NEW sets before each iteration.
2013-06-24 Alan Modra <amodra@gmail.com>
* config/rs6000/rs6000.c (vspltis_constant): Correct for little-endian.

View File

@ -1,3 +1,8 @@
2013-06-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/57488
* gcc.dg/torture/pr57488.c: New testcase.
2013-06-24 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Dominique d'Humieres <dominiq@lps.ens.fr>

View File

@ -0,0 +1,58 @@
/* { dg-do run } */
extern void abort (void);
int i, j, *pj = &j, **ppj = &pj;
int x, *px = &x;
short s, *ps = &s, k;
unsigned short u, *pu = &u, **ppu = &pu;
char c, *pc = &c;
unsigned char v = 48;
static int
bar (int p)
{
p = k;
*px = **ppu = i;
*ppj = &p;
if (**ppj)
*pj = p;
return p;
}
void __attribute__((noinline))
foo ()
{
for (; i <= 3; i++)
for (; j; j--);
u ^= bar (*pj);
for (k = 1; k >= 0; k--)
{
int l;
bar (0);
for (l = 1; l < 5; l++)
{
int m;
for (m = 6; m; m--)
{
v--;
*ps = *pc;
}
}
}
}
int
main ()
{
foo ();
if (v != 0)
abort ();
return 0;
}

View File

@ -3665,6 +3665,12 @@ insert (void)
if (dump_file && dump_flags & TDF_DETAILS)
fprintf (dump_file, "Starting insert iteration %d\n", num_iterations);
new_stuff = insert_aux (ENTRY_BLOCK_PTR);
/* Clear the NEW sets before the next iteration. We have already
fully propagated its contents. */
if (new_stuff)
FOR_ALL_BB (bb)
bitmap_set_free (NEW_SETS (bb));
}
statistics_histogram_event (cfun, "insert iterations", num_iterations);
}