Commit 2706a615 by Richard Guenther Committed by Richard Biener

re PR tree-optimization/44393 (ICE: verify_ssa failed: no immediate_use list…

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
parent 8b3057b3
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> 2010-06-26 Jan Hubicka <jh@suse.cz>
* ipa-split.c (consider_split): PHI in entry block is OK as long as all * ipa-split.c (consider_split): PHI in entry block is OK as long as all
......
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> 2010-06-26 Jan Hubicka <jh@suse.cz>
* gcc.dg/tree-ssa/ipa-split-2.c: New testcase. * gcc.dg/tree-ssa/ipa-split-2.c: New testcase.
......
/* { 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;
}
...@@ -5792,21 +5792,6 @@ move_stmt_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p, ...@@ -5792,21 +5792,6 @@ move_stmt_r (gimple_stmt_iterator *gsi_p, bool *handled_ops_p,
return NULL_TREE; 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 /* 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 is moved out of the original linked list and placed after
block AFTER in the new list. Also, the block is removed from the block AFTER in the new list. Also, the block is removed from the
......
...@@ -486,7 +486,6 @@ extern void end_recording_case_labels (void); ...@@ -486,7 +486,6 @@ extern void end_recording_case_labels (void);
extern basic_block move_sese_region_to_fn (struct function *, basic_block, extern basic_block move_sese_region_to_fn (struct function *, basic_block,
basic_block, tree); basic_block, tree);
void remove_edge_and_dominated_blocks (edge); void remove_edge_and_dominated_blocks (edge);
void mark_virtual_ops_in_bb (basic_block);
bool tree_node_can_be_shared (tree); bool tree_node_can_be_shared (tree);
/* In tree-cfgcleanup.c */ /* In tree-cfgcleanup.c */
......
...@@ -195,18 +195,28 @@ generate_loops_for_partition (struct loop *loop, bitmap partition, bool copy_p) ...@@ -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);) for (bsi = gsi_start_phis (bb); !gsi_end_p (bsi);)
if (!bitmap_bit_p (partition, x++)) 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 else
gsi_next (&bsi); gsi_next (&bsi);
for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi);) for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi);)
if (gimple_code (gsi_stmt (bsi)) != GIMPLE_LABEL {
&& !bitmap_bit_p (partition, x++)) gimple stmt = gsi_stmt (bsi);
gsi_remove (&bsi, false); if (gimple_code (gsi_stmt (bsi)) != GIMPLE_LABEL
else && !bitmap_bit_p (partition, x++))
gsi_next (&bsi); {
unlink_stmt_vdef (stmt);
mark_virtual_ops_in_bb (bb); gsi_remove (&bsi, true);
release_defs (stmt);
}
else
gsi_next (&bsi);
}
} }
free (bbs); free (bbs);
...@@ -240,7 +250,6 @@ generate_memset_zero (gimple stmt, tree op0, tree nb_iter, ...@@ -240,7 +250,6 @@ generate_memset_zero (gimple stmt, tree op0, tree nb_iter,
gimple_seq stmt_list = NULL, stmts; gimple_seq stmt_list = NULL, stmts;
gimple fn_call; gimple fn_call;
tree mem, fn; tree mem, fn;
gimple_stmt_iterator i;
struct data_reference *dr = XCNEW (struct data_reference); struct data_reference *dr = XCNEW (struct data_reference);
location_t loc = gimple_location (stmt); location_t loc = gimple_location (stmt);
...@@ -291,13 +300,6 @@ generate_memset_zero (gimple stmt, tree op0, tree nb_iter, ...@@ -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 = build_fold_addr_expr (implicit_built_in_decls [BUILT_IN_MEMSET]);
fn_call = gimple_build_call (fn, 3, mem, integer_zero_node, nb_bytes); fn_call = gimple_build_call (fn, 3, mem, integer_zero_node, nb_bytes);
gimple_seq_add_stmt (&stmt_list, fn_call); 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); gsi_insert_seq_after (&bsi, stmt_list, GSI_CONTINUE_LINKING);
res = true; res = true;
......
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