[PATCH] Call flush_ssaname_freelist more often
authorJeff Law <law@redhat.com>
Fri, 23 Oct 2015 22:34:04 +0000 (16:34 -0600)
committerJeff Law <law@gcc.gnu.org>
Fri, 23 Oct 2015 22:34:04 +0000 (16:34 -0600)
[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.

From-SVN: r229272

gcc/ChangeLog
gcc/passes.c
gcc/tree-ssanames.c

index 7234019258667ee480f5248ba11aa94f6964f0d9..77fe67856fdc569eccc3b8f705053502212bb859 100644 (file)
@@ -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>
 
index 6ef6d2e50ff6994cf39de7173097be928b1f4160..0d147fd159d3246a089df6cbcb51f65995d15344 100644 (file)
@@ -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
index 82fd4a15f85926038f9f0f742979ce2c69cd70c1..4be0e53328d6be99b6956c931355f14fe3e8c1c2 100644 (file)
@@ -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.  */