This releases SSA names properly in some places. Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
Richard. 2012-02-10 Richard Guenther <rguent...@suse.de> * tree-nrv.c (tree_nrv): Release VDEFs. * tree-sra.c (sra_modify_constructor_assign): Likewise. (sra_modify_assign): Likewise. * tree-vect-stmts.c (vect_remove_stores): Likewise. * tree-vect-loop.c (vect_transform_loop): Likewise. * tree-ssa-dom.c (optimize_stmt): Likewise. * tree-vect-slp.c (vect_schedule_slp): Likewise. * tree-ssa-math-opts.c (execute_cse_sincos): Likewise. Index: gcc/tree-nrv.c =================================================================== *** gcc/tree-nrv.c.orig 2012-04-04 14:57:38.000000000 +0200 --- gcc/tree-nrv.c 2012-04-04 15:17:13.331595050 +0200 *************** tree_nrv (void) *** 244,249 **** --- 244,250 ---- { unlink_stmt_vdef (stmt); gsi_remove (&gsi, true); + release_defs (stmt); } else { Index: gcc/tree-sra.c =================================================================== *** gcc/tree-sra.c.orig 2012-04-04 14:57:38.000000000 +0200 --- gcc/tree-sra.c 2012-04-04 15:17:13.334595082 +0200 *************** sra_modify_constructor_assign (gimple *s *** 2821,2826 **** --- 2821,2827 ---- { unlink_stmt_vdef (*stmt); gsi_remove (gsi, true); + release_defs (*stmt); return SRA_AM_REMOVED; } else *************** sra_modify_constructor_assign (gimple *s *** 2844,2849 **** --- 2845,2851 ---- init_subtree_with_zero (acc, gsi, false, loc); unlink_stmt_vdef (*stmt); gsi_remove (gsi, true); + release_defs (*stmt); return SRA_AM_REMOVED; } else *************** sra_modify_assign (gimple *stmt, gimple_ *** 3094,3099 **** --- 3096,3102 ---- gsi_next (gsi); unlink_stmt_vdef (*stmt); gsi_remove (&orig_gsi, true); + release_defs (*stmt); sra_stats.deleted++; return SRA_AM_REMOVED; } *************** sra_modify_assign (gimple *stmt, gimple_ *** 3114,3119 **** --- 3117,3123 ---- gcc_assert (*stmt == gsi_stmt (*gsi)); unlink_stmt_vdef (*stmt); gsi_remove (gsi, true); + release_defs (*stmt); sra_stats.deleted++; return SRA_AM_REMOVED; } Index: gcc/tree-vect-stmts.c =================================================================== *** gcc/tree-vect-stmts.c.orig 2012-04-04 14:57:38.000000000 +0200 --- gcc/tree-vect-stmts.c 2012-04-04 15:17:13.337595115 +0200 *************** vect_remove_stores (gimple first_stmt) *** 5653,5659 **** --- 5653,5661 ---- next = STMT_VINFO_RELATED_STMT (stmt_info); /* Free the attached stmt_vec_info and remove the stmt. */ next_si = gsi_for_stmt (next); + unlink_stmt_vdef (next); gsi_remove (&next_si, true); + release_defs (next); free_stmt_vec_info (next); next = tmp; } Index: gcc/tree-vect-loop.c =================================================================== *** gcc/tree-vect-loop.c.orig 2012-04-04 14:57:38.000000000 +0200 --- gcc/tree-vect-loop.c 2012-04-04 15:17:13.338595125 +0200 *************** vect_transform_loop (loop_vec_info loop_ *** 5476,5483 **** else { /* Free the attached stmt_vec_info and remove the stmt. */ ! free_stmt_vec_info (gsi_stmt (si)); gsi_remove (&si, true); continue; } } --- 5476,5486 ---- else { /* Free the attached stmt_vec_info and remove the stmt. */ ! gimple store = gsi_stmt (si); ! free_stmt_vec_info (store); ! unlink_stmt_vdef (store); gsi_remove (&si, true); + release_defs (store); continue; } } Index: gcc/tree-ssa-dom.c =================================================================== *** gcc/tree-ssa-dom.c.orig 2012-04-04 15:02:16.000000000 +0200 --- gcc/tree-ssa-dom.c 2012-04-04 15:17:52.463010484 +0200 *************** optimize_stmt (basic_block bb, gimple_st *** 2301,2306 **** --- 2301,2307 ---- if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, " Flagged to clear EH edges.\n"); } + release_defs (stmt); return; } } Index: gcc/tree-vect-slp.c =================================================================== *** gcc/tree-vect-slp.c.orig 2012-04-04 14:57:38.000000000 +0200 --- gcc/tree-vect-slp.c 2012-04-04 15:17:13.341595156 +0200 *************** vect_schedule_slp (loop_vec_info loop_vi *** 3043,3049 **** --- 3043,3051 ---- store = STMT_VINFO_RELATED_STMT (vinfo_for_stmt (store)); /* Free the attached stmt_vec_info and remove the stmt. */ gsi = gsi_for_stmt (store); + unlink_stmt_vdef (store); gsi_remove (&gsi, true); + release_defs (store); free_stmt_vec_info (store); } } Index: gcc/tree-ssa-math-opts.c =================================================================== *** gcc/tree-ssa-math-opts.c.orig 2012-04-04 15:03:35.000000000 +0200 --- gcc/tree-ssa-math-opts.c 2012-04-04 15:17:13.342595167 +0200 *************** execute_cse_sincos (void) *** 1430,1435 **** --- 1430,1437 ---- gimple_set_location (new_stmt, loc); unlink_stmt_vdef (stmt); gsi_replace (&gsi, new_stmt, true); + if (gimple_vdef (stmt)) + release_ssa_name (gimple_vdef (stmt)); } break; *************** execute_cse_sincos (void) *** 1450,1455 **** --- 1452,1459 ---- gimple_set_location (new_stmt, loc); unlink_stmt_vdef (stmt); gsi_replace (&gsi, new_stmt, true); + if (gimple_vdef (stmt)) + release_ssa_name (gimple_vdef (stmt)); } break; *************** execute_cse_sincos (void) *** 1465,1470 **** --- 1469,1476 ---- gimple_set_location (new_stmt, loc); unlink_stmt_vdef (stmt); gsi_replace (&gsi, new_stmt, true); + if (gimple_vdef (stmt)) + release_ssa_name (gimple_vdef (stmt)); } break; Index: gcc/tree-eh.c =================================================================== *** gcc/tree-eh.c.orig 2012-04-04 14:57:38.000000000 +0200 --- gcc/tree-eh.c 2012-04-04 15:17:13.343595178 +0200 *************** sink_clobbers (basic_block bb) *** 3268,3279 **** vdef = gimple_vdef (stmt); if (vdef && TREE_CODE (vdef) == SSA_NAME) { vdef = SSA_NAME_VAR (vdef); mark_sym_for_renaming (vdef); gimple_set_vdef (stmt, vdef); gimple_set_vuse (stmt, vdef); } - release_defs (stmt); gsi_insert_before (&dgsi, stmt, GSI_SAME_STMT); } --- 3268,3279 ---- vdef = gimple_vdef (stmt); if (vdef && TREE_CODE (vdef) == SSA_NAME) { + release_ssa_name (vdef); vdef = SSA_NAME_VAR (vdef); mark_sym_for_renaming (vdef); gimple_set_vdef (stmt, vdef); gimple_set_vuse (stmt, vdef); } gsi_insert_before (&dgsi, stmt, GSI_SAME_STMT); } *************** cleanup_empty_eh_move_lp (basic_block bb *** 3955,3961 **** /* Delete the RESX that was matched within the empty handler block. */ gsi = gsi_last_bb (bb); ! mark_virtual_ops_for_renaming (gsi_stmt (gsi)); gsi_remove (&gsi, true); /* Clean up E_OUT for the fallthru. */ --- 3955,3961 ---- /* Delete the RESX that was matched within the empty handler block. */ gsi = gsi_last_bb (bb); ! unlink_stmt_vdef (gsi_stmt (gsi)); gsi_remove (&gsi, true); /* Clean up E_OUT for the fallthru. */