This makes us release the virtual SSA name associated with a call that is inlined. This removes some garbage that is otherwise kept live duing early opts (and thus reduces whole-program footprint).
With this patch and the separately posted ipa-prop change I can bootstrap & regtest with Index: gcc/tree-ssa.c =================================================================== --- gcc/tree-ssa.c (revision 207783) +++ gcc/tree-ssa.c (working copy) @@ -741,6 +741,16 @@ verify_def (basic_block bb, basic_block goto err; } + if (bb == NULL + /* ??? Too many latent cases in the main opt pipeline. But it's + worth to fix all cases before inlining as that reduces the + amount of garbage kept live. */ + && !cfun->after_inlining) + { + error ("removed STMT failed to release SSA name"); + goto err; + } + if (definition_block[SSA_NAME_VERSION (ssa_name)]) { error ("SSA_NAME created in two different blocks %i and %i", applied. Bootstrapped and tested (with the above applied) on x86_64-unknown-linux-gnu. Ok? Thanks, Richard. 2014-02-17 Richard Biener <rguent...@suse.de> * tree-inline.c (expand_call_inline): Release the virtual operand defined by the call we are about to inline. Index: gcc/tree-inline.c =================================================================== *** gcc/tree-inline.c (revision 207783) --- gcc/tree-inline.c (working copy) *************** expand_call_inline (basic_block bb, gimp *** 4364,4369 **** --- 4364,4372 ---- /* Unlink the calls virtual operands before replacing it. */ unlink_stmt_vdef (stmt); + if (gimple_vdef (stmt) + && TREE_CODE (gimple_vdef (stmt)) == SSA_NAME) + release_ssa_name (gimple_vdef (stmt)); /* If the inlined function returns a result that we care about, substitute the GIMPLE_CALL with an assignment of the return