mirror of git://gcc.gnu.org/git/gcc.git
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:
parent
03a8a2d57d
commit
3dbc97a91e
|
|
@ -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>
|
2013-06-24 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* config/rs6000/rs6000.c (vspltis_constant): Correct for little-endian.
|
* config/rs6000/rs6000.c (vspltis_constant): Correct for little-endian.
|
||||||
|
|
|
||||||
|
|
@ -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>
|
2013-06-24 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
||||||
Dominique d'Humieres <dominiq@lps.ens.fr>
|
Dominique d'Humieres <dominiq@lps.ens.fr>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -3665,6 +3665,12 @@ insert (void)
|
||||||
if (dump_file && dump_flags & TDF_DETAILS)
|
if (dump_file && dump_flags & TDF_DETAILS)
|
||||||
fprintf (dump_file, "Starting insert iteration %d\n", num_iterations);
|
fprintf (dump_file, "Starting insert iteration %d\n", num_iterations);
|
||||||
new_stuff = insert_aux (ENTRY_BLOCK_PTR);
|
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);
|
statistics_histogram_event (cfun, "insert iterations", num_iterations);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue