re PR tree-optimization/39132 (wrong code generated with -ftree-loop-disttribution)

2009-02-10  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/39132
	* tree-loop-distribution.c (todo): New global var.
	(generate_memset_zero): Trigger TODO_rebuild_alias.
	(tree_loop_distribution): Return todo.

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

From-SVN: r144060
This commit is contained in:
Richard Guenther 2009-02-10 14:54:13 +00:00 committed by Richard Biener
parent a8800687f5
commit 7cae94fcba
4 changed files with 54 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2009-02-10 Richard Guenther <rguenther@suse.de>
PR tree-optimization/39132
* tree-loop-distribution.c (todo): New global var.
(generate_memset_zero): Trigger TODO_rebuild_alias.
(tree_loop_distribution): Return todo.
2009-02-10 H.J. Lu <hongjiu.lu@intel.com>
PR target/39119

View File

@ -1,3 +1,8 @@
2009-02-10 Richard Guenther <rguenther@suse.de>
PR tree-optimization/39132
* gcc.dg/torture/pr39132.c: New testcase.
2009-02-10 H.J. Lu <hongjiu.lu@intel.com>
PR target/39119

View File

@ -0,0 +1,34 @@
/* { dg-do run } */
/* { dg-options "-ftree-loop-distribution" } */
extern void abort(void);
struct epic_private
{
unsigned int *rx_ring;
unsigned int rx_skbuff[5];
};
int
main (void)
{
struct epic_private ep;
unsigned int rx_ring[5];
int i;
ep.rx_skbuff[0] = 5;
ep.rx_ring = rx_ring;
for (i = 0; i < 5; i++)
{
ep.rx_ring[i] = i;
ep.rx_skbuff[i] = 0;
}
if (ep.rx_skbuff[0] != 0)
abort ();
return 0;
}

View File

@ -77,6 +77,9 @@ static bitmap remaining_stmts;
predecessor a node that writes to memory. */
static bitmap upstream_mem_writes;
/* TODOs we need to run after the pass. */
static unsigned int todo;
/* Update the PHI nodes of NEW_LOOP. NEW_LOOP is a duplicate of
ORIG_LOOP. */
@ -331,6 +334,8 @@ generate_memset_zero (gimple stmt, tree op0, tree nb_iter,
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "generated memset zero\n");
todo |= TODO_rebuild_alias;
end:
free_data_ref (dr);
return res;
@ -1206,6 +1211,8 @@ tree_loop_distribution (void)
loop_iterator li;
int nb_generated_loops = 0;
todo = 0;
FOR_EACH_LOOP (li, loop, 0)
{
VEC (gimple, heap) *work_list = VEC_alloc (gimple, heap, 3);
@ -1237,7 +1244,7 @@ tree_loop_distribution (void)
VEC_free (gimple, heap, work_list);
}
return 0;
return todo;
}
static bool