summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2015-10-23 22:34:04 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>2015-10-23 22:34:04 +0000
commit0ccdd20e3928921fd45e2370604469e8ff3623b7 (patch)
tree473ae624fa03edb8c9c84b07db7d569cedfa07f7
parent6cded08567ecae0ecce4a85500df28b06eca1102 (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/passes.c13
-rw-r--r--gcc/tree-ssanames.c7
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. */