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:
parent
8b3057b30d
commit
2706a6158b
6 changed files with 47 additions and 32 deletions
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
15
gcc/testsuite/gcc.dg/pr44393.c
Normal file
15
gcc/testsuite/gcc.dg/pr44393.c
Normal 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;
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue