diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-10-23 22:34:04 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-10-23 22:34:04 +0000 |
commit | 0ccdd20e3928921fd45e2370604469e8ff3623b7 (patch) | |
tree | 473ae624fa03edb8c9c84b07db7d569cedfa07f7 | |
parent | 6cded08567ecae0ecce4a85500df28b06eca1102 (diff) | |
download | gcc-0ccdd20e3928921fd45e2370604469e8ff3623b7.tar.gz |
[PATCH] Call flush_ssaname_freelist more often
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@229272 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/passes.c | 13 | ||||
-rw-r--r-- | gcc/tree-ssanames.c | 7 |
3 files changed, 16 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 72340192586..77fe67856fd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +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> diff --git a/gcc/passes.c b/gcc/passes.c index 6ef6d2e50ff..0d147fd159d 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -1919,14 +1919,6 @@ execute_function_todo (function *fn, void *data) { 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 @@ -2032,6 +2024,11 @@ execute_todo (unsigned int flags) 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 diff --git a/gcc/tree-ssanames.c b/gcc/tree-ssanames.c index 82fd4a15f85..4be0e53328d 100644 --- a/gcc/tree-ssanames.c +++ b/gcc/tree-ssanames.c @@ -151,8 +151,7 @@ make_ssa_name_fn (struct function *fn, tree var, gimple *stmt) 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. */ @@ -164,8 +163,7 @@ make_ssa_name_fn (struct function *fn, tree var, gimple *stmt) 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)) @@ -646,7 +644,6 @@ unsigned int 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. */ |