+2015-10-23 Jeff Law <law@redhat.com>
+
+ * passes.c (execute_function_todo): Do not call flush_ssaname_freelist
+ here. Instead...
+ (execute_todo): Call it here.
+ * tree-ssanames.c (make_ssa_name_fn): Unconditionally gather reuse
+ statistics
+ (pass_release_ssa_names::execute): Do not call flusH_ssaname_freelist.
+
2015-10-23 Gregor Richards <gregor.richards@uwaterloo.ca>
Szabolcs Nagy <szabolcs.nagy@arm.com>
{
cleanup_tree_cfg ();
- /* Once unreachable nodes have been removed from the CFG,
- there can't be any lingering references to released
- SSA_NAMES (because there is no more unreachable code).
-
- Thus, now is the time to flush the SSA_NAMEs freelist. */
- if (fn->gimple_df)
- flush_ssaname_freelist ();
-
/* When cleanup_tree_cfg merges consecutive blocks, it may
perform some simplistic propagation when removing single
valued PHI nodes. This propagation may, in turn, cause the
if (flags)
do_per_function (execute_function_todo, (void *)(size_t) flags);
+ /* At this point we should not have any unreachable code in the
+ CFG, so it is safe to flush the pending freelist for SSA_NAMES. */
+ if (cfun && cfun->gimple_df)
+ flush_ssaname_freelist ();
+
/* Always remove functions just as before inlining: IPA passes might be
interested to see bodies of extern inline functions that are not inlined
to analyze side effects. The full removal is done just at the end
if (!vec_safe_is_empty (FREE_SSANAMES (fn)))
{
t = FREE_SSANAMES (fn)->pop ();
- if (GATHER_STATISTICS)
- ssa_name_nodes_reused++;
+ ssa_name_nodes_reused++;
/* The node was cleared out when we put it on the free list, so
there is no need to do so again here. */
t = make_node (SSA_NAME);
SSA_NAME_VERSION (t) = SSANAMES (fn)->length ();
vec_safe_push (SSANAMES (fn), t);
- if (GATHER_STATISTICS)
- ssa_name_nodes_created++;
+ ssa_name_nodes_created++;
}
if (TYPE_P (var))
pass_release_ssa_names::execute (function *fun)
{
unsigned i, j;
- flush_ssaname_freelist ();
int n = vec_safe_length (FREE_SSANAMES (fun));
/* Now release the freelist. */