re PR tree-optimization/44393 (ICE: verify_ssa failed: no immediate_use list with -Os -ftree-loop-distribution)

2010-06-26  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/44393
	* tree-loop-distribution.c (generate_loops_for_partition): Fix
	stmt removal and VOP renaming.
	(generate_memset_zero): Remove redundant stmt updating.
	* tree-flow.h (mark_virtual_ops_in_bb): Remove.
	* tree-cfg.c (mark_virtual_ops_in_bb): Likewise.

	* gcc.dg/pr44393.c: New testcase.

From-SVN: r161434
This commit is contained in:
Richard Guenther 2010-06-26 15:55:05 +00:00 committed by Richard Biener
parent 8b3057b30d
commit 2706a6158b
6 changed files with 47 additions and 32 deletions

View file

@ -1,3 +1,12 @@
2010-06-26 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44393
* tree-loop-distribution.c (generate_loops_for_partition): Fix
stmt removal and VOP renaming.
(generate_memset_zero): Remove redundant stmt updating.
* tree-flow.h (mark_virtual_ops_in_bb): Remove.
* tree-cfg.c (mark_virtual_ops_in_bb): Likewise.
2010-06-26 Jan Hubicka <jh@suse.cz>
* ipa-split.c (consider_split): PHI in entry block is OK as long as all

View file

@ -1,3 +1,8 @@
2010-06-26 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44393
* gcc.dg/pr44393.c: New testcase.
2010-06-26 Jan Hubicka <jh@suse.cz>
* gcc.dg/tree-ssa/ipa-split-2.c: New testcase.

View file

@ -0,0 +1,15 @@
/* { dg-do compile } */
/* { dg-options "-Os -ftree-loop-distribution" } */
int i;
void foo ()
{
int **pp = 0, *p = 0;
while (--i)
{
*p++ = 0;
*pp++ = p;
}
i = *p;
}

View file

@ -5792,21 +5792,6 @@ move_stmt_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p,
return NULL_TREE;
}
/* Marks virtual operands of all statements in basic blocks BBS for
renaming. */
void
mark_virtual_ops_in_bb (basic_block bb)
{
gimple_stmt_iterator gsi;
for (gsi = gsi_start_phis (bb); !gsi_end_p (gsi); gsi_next (&gsi))
mark_virtual_ops_for_renaming (gsi_stmt (gsi));
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
mark_virtual_ops_for_renaming (gsi_stmt (gsi));
}
/* Move basic block BB from function CFUN to function DEST_FN. The
block is moved out of the original linked list and placed after
block AFTER in the new list. Also, the block is removed from the

View file

@ -486,7 +486,6 @@ extern void end_recording_case_labels (void);
extern basic_block move_sese_region_to_fn (struct function *, basic_block,
basic_block, tree);
void remove_edge_and_dominated_blocks (edge);
void mark_virtual_ops_in_bb (basic_block);
bool tree_node_can_be_shared (tree);
/* In tree-cfgcleanup.c */

View file

@ -195,18 +195,28 @@ generate_loops_for_partition (struct loop *loop, bitmap partition, bool copy_p)
for (bsi = gsi_start_phis (bb); !gsi_end_p (bsi);)
if (!bitmap_bit_p (partition, x++))
remove_phi_node (&bsi, true);
{
gimple phi = gsi_stmt (bsi);
if (!is_gimple_reg (gimple_phi_result (phi)))
mark_virtual_phi_result_for_renaming (phi);
remove_phi_node (&bsi, true);
}
else
gsi_next (&bsi);
for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi);)
if (gimple_code (gsi_stmt (bsi)) != GIMPLE_LABEL
&& !bitmap_bit_p (partition, x++))
gsi_remove (&bsi, false);
else
gsi_next (&bsi);
mark_virtual_ops_in_bb (bb);
{
gimple stmt = gsi_stmt (bsi);
if (gimple_code (gsi_stmt (bsi)) != GIMPLE_LABEL
&& !bitmap_bit_p (partition, x++))
{
unlink_stmt_vdef (stmt);
gsi_remove (&bsi, true);
release_defs (stmt);
}
else
gsi_next (&bsi);
}
}
free (bbs);
@ -240,7 +250,6 @@ generate_memset_zero (gimple stmt, tree op0, tree nb_iter,
gimple_seq stmt_list = NULL, stmts;
gimple fn_call;
tree mem, fn;
gimple_stmt_iterator i;
struct data_reference *dr = XCNEW (struct data_reference);
location_t loc = gimple_location (stmt);
@ -291,13 +300,6 @@ generate_memset_zero (gimple stmt, tree op0, tree nb_iter,
fn = build_fold_addr_expr (implicit_built_in_decls [BUILT_IN_MEMSET]);
fn_call = gimple_build_call (fn, 3, mem, integer_zero_node, nb_bytes);
gimple_seq_add_stmt (&stmt_list, fn_call);
for (i = gsi_start (stmt_list); !gsi_end_p (i); gsi_next (&i))
{
gimple s = gsi_stmt (i);
update_stmt_if_modified (s);
}
gsi_insert_seq_after (&bsi, stmt_list, GSI_CONTINUE_LINKING);
res = true;