[PATCH] avail_exprs is no longer file scoped
authorJeff Law <law@redhat.com>
Fri, 18 Sep 2015 19:12:22 +0000 (13:12 -0600)
committerJeff Law <law@gcc.gnu.org>
Fri, 18 Sep 2015 19:12:22 +0000 (13:12 -0600)
* tree-ssa-dom.c (avail_exprs): No longer file scoped.  Bury
it into the avail_exprs_stack class.
(pass_dominator::execute): Corresponding changes to declaration
and initialization of avail_exprs.  Pass avail_exprs to
dump_dominator_optimization_stats.
(record_cond): Extract avail_exprs from avail_exprs_stack.
(lookup_avail_expr): Similarly.
(htab_staticstics): Remove unnecessary prototype.  Move to earlier
position in file.
(dump_dominator_optimization_stats): Make static and prototype.
Add argument for the hash table to dump.
(debug_dominator_optimization_stats): Remove.
* tree-ssa-dom.h (dump_dominator_optimization_stats): Remove
prototype.
(debug_dominator_optimization_stats): Similarly.
* tree-ssa-scopedtables.h (class avail_exprs_stack): Add missing
"void" in prototype for pop_to_marker method.  Add accessor method
for the underlying avail_exprs table.

* tree-ssa-threadedge.c: Remove trailing whitespace.

From-SVN: r227921

gcc/ChangeLog
gcc/tree-ssa-dom.c
gcc/tree-ssa-dom.h
gcc/tree-ssa-scopedtables.h
gcc/tree-ssa-threadedge.c

index 7b8b1f14432b2c5fd37112452835db5f35bb5fe3..d46088083c373565d5a8065f89429571966f7f10 100644 (file)
@@ -1,3 +1,27 @@
+2015-09-18  Jeff Law  <law@redhat.com>
+
+       PR tree-optimization/47679
+       * tree-ssa-dom.c (avail_exprs): No longer file scoped.  Bury
+       it into the avail_exprs_stack class.
+       (pass_dominator::execute): Corresponding changes to declaration
+       and initialization of avail_exprs.  Pass avail_exprs to
+       dump_dominator_optimization_stats.
+       (record_cond): Extract avail_exprs from avail_exprs_stack.
+       (lookup_avail_expr): Similarly.
+       (htab_staticstics): Remove unnecessary prototype.  Move to earlier
+       position in file.
+       (dump_dominator_optimization_stats): Make static and prototype.
+       Add argument for the hash table to dump.
+       (debug_dominator_optimization_stats): Remove.
+       * tree-ssa-dom.h (dump_dominator_optimization_stats): Remove
+       prototype.
+       (debug_dominator_optimization_stats): Similarly.
+       * tree-ssa-scopedtables.h (class avail_exprs_stack): Add missing
+       "void" in prototype for pop_to_marker method.  Add accessor method
+       for the underlying avail_exprs table.
+       
+       * tree-ssa-threadedge.c: Remove trailing whitespace.
+
 2014-09-18  John David Anglin  <danglin@gcc.gnu.org>
 
        * config/pa/pa-protos.h (pa_cint_ok_for_move): Change argument type to
index 963dea9b711815f0d19cb2e6a4258666bcc8dc46..bf5e8a116ab16d87e2c8b4dda40ab8b7d8972198 100644 (file)
@@ -78,15 +78,6 @@ struct edge_info
   vec<cond_equivalence> cond_equivalences;
 };
 
-/* Hash table with expressions made available during the renaming process.
-   When an assignment of the form X_i = EXPR is found, the statement is
-   stored in this table.  If the same expression EXPR is later found on the
-   RHS of another statement, it is replaced with X_i (thus performing
-   global redundancy elimination).  Similarly as we pass through conditionals
-   we record the conditional itself as having either a true or false value
-   in this table.  */
-static hash_table<expr_elt_hasher> *avail_exprs;
-
 /* Unwindable equivalences, both const/copy and expression varieties.  */
 static const_and_copies *const_and_copies;
 static avail_exprs_stack *avail_exprs_stack;
@@ -114,8 +105,6 @@ static struct opt_stats_d opt_stats;
 /* Local functions.  */
 static void optimize_stmt (basic_block, gimple_stmt_iterator);
 static tree lookup_avail_expr (gimple, bool);
-static void htab_statistics (FILE *,
-                            const hash_table<expr_elt_hasher> &);
 static void record_cond (cond_equivalence *);
 static void record_equality (tree, tree);
 static void record_equivalences_from_phis (basic_block);
@@ -123,6 +112,9 @@ static void record_equivalences_from_incoming_edge (basic_block);
 static void eliminate_redundant_computations (gimple_stmt_iterator *);
 static void record_equivalences_from_stmt (gimple, int);
 static edge single_incoming_edge_ignoring_loop_edges (basic_block);
+static void dump_dominator_optimization_stats (FILE *file,
+                                              hash_table<expr_elt_hasher> *);
+
 
 /* Free the edge_info data attached to E, if it exists.  */
 
@@ -548,7 +540,8 @@ pass_dominator::execute (function *fun)
   memset (&opt_stats, 0, sizeof (opt_stats));
 
   /* Create our hash tables.  */
-  avail_exprs = new hash_table<expr_elt_hasher> (1024);
+  hash_table<expr_elt_hasher> *avail_exprs
+    = new hash_table<expr_elt_hasher> (1024);
   avail_exprs_stack = new class avail_exprs_stack (avail_exprs);
   const_and_copies = new class const_and_copies ();
   need_eh_cleanup = BITMAP_ALLOC (NULL);
@@ -671,7 +664,7 @@ pass_dominator::execute (function *fun)
 
   /* Debugging dumps.  */
   if (dump_file && (dump_flags & TDF_STATS))
-    dump_dominator_optimization_stats (dump_file);
+    dump_dominator_optimization_stats (dump_file, avail_exprs);
 
   loop_optimizer_finalize ();
 
@@ -1008,10 +1001,22 @@ record_equivalences_from_incoming_edge (basic_block bb)
     record_temporary_equivalences (e);
 }
 
+/* Dump statistics for the hash table HTAB.  */
+
+static void
+htab_statistics (FILE *file, const hash_table<expr_elt_hasher> &htab)
+{
+  fprintf (file, "size %ld, %ld elements, %f collision/search ratio\n",
+          (long) htab.size (),
+          (long) htab.elements (),
+          htab.collisions ());
+}
+
 /* Dump SSA statistics on FILE.  */
 
-void
-dump_dominator_optimization_stats (FILE *file)
+static void
+dump_dominator_optimization_stats (FILE *file,
+                                  hash_table<expr_elt_hasher> *avail_exprs)
 {
   fprintf (file, "Total number of statements:                   %6ld\n\n",
           opt_stats.num_stmts);
@@ -1025,27 +1030,6 @@ dump_dominator_optimization_stats (FILE *file)
 }
 
 
-/* Dump SSA statistics on stderr.  */
-
-DEBUG_FUNCTION void
-debug_dominator_optimization_stats (void)
-{
-  dump_dominator_optimization_stats (stderr);
-}
-
-
-/* Dump statistics for the hash table HTAB.  */
-
-static void
-htab_statistics (FILE *file, const hash_table<expr_elt_hasher> &htab)
-{
-  fprintf (file, "size %ld, %ld elements, %f collision/search ratio\n",
-          (long) htab.size (),
-          (long) htab.elements (),
-          htab.collisions ());
-}
-
-
 /* Enter condition equivalence into the expression hash table.
    This indicates that a conditional expression has a known
    boolean value.  */
@@ -1056,6 +1040,7 @@ record_cond (cond_equivalence *p)
   class expr_hash_elt *element = new expr_hash_elt (&p->cond, p->value);
   expr_hash_elt **slot;
 
+  hash_table<expr_elt_hasher> *avail_exprs = avail_exprs_stack->avail_exprs ();
   slot = avail_exprs->find_slot_with_hash (element, element->hash (), INSERT);
   if (*slot == NULL)
     {
@@ -1917,6 +1902,7 @@ lookup_avail_expr (gimple stmt, bool insert)
     return NULL_TREE;
 
   /* Finally try to find the expression in the main expression hash table.  */
+  hash_table<expr_elt_hasher> *avail_exprs = avail_exprs_stack->avail_exprs ();
   slot = avail_exprs->find_slot (&element, (insert ? INSERT : NO_INSERT));
   if (slot == NULL)
     {
index f8f9698b091b2b1c130c8487f4e6c80e0ce0ce97..7ecdaf10b2b299495368365193950be297eccdd9 100644 (file)
@@ -20,8 +20,6 @@ along with GCC; see the file COPYING3.  If not see
 #ifndef GCC_TREE_SSA_DOM_H
 #define GCC_TREE_SSA_DOM_H
 
-extern void dump_dominator_optimization_stats (FILE *);
-extern void debug_dominator_optimization_stats (void);
 extern bool simple_iv_increment_p (gimple);
 
 #endif /* GCC_TREE_SSA_DOM_H */
index f37230e6319fc07532e482c190cd8efbb96e1f11..152df51937ff592dff410444ca33072c26ef8dd3 100644 (file)
@@ -122,11 +122,16 @@ class avail_exprs_stack
 
   /* Restore the AVAIL_EXPRs table to its state when the last marker
      was pushed.  */
-  void pop_to_marker ();
+  void pop_to_marker (void);
 
   /* Record a single available expression that can be unwound.  */
   void record_expr (expr_hash_elt_t, expr_hash_elt_t, char);
 
+  /* Get the underlying hash table.  Would this be better as
+     class inheritance?  */
+  hash_table<expr_elt_hasher> *avail_exprs (void)
+    { return m_avail_exprs; }
+
  private:
   vec<std::pair<expr_hash_elt_t, expr_hash_elt_t> > m_stack;
   hash_table<expr_elt_hasher> *m_avail_exprs;
index a72edc0daef240d88ee65c96c2f96494dbb13b30..48c4ca765db8e37ee09b250e30e7a6ab05efa4f2 100644 (file)
@@ -94,12 +94,12 @@ potentially_threadable_block (basic_block bb)
   /* Special case.  We can get blocks that are forwarders, but are
      not optimized away because they forward from outside a loop
      to the loop header.   We want to thread through them as we can
-     sometimes thread to the loop exit, which is obviously profitable. 
+     sometimes thread to the loop exit, which is obviously profitable.
      the interesting case here is when the block has PHIs.  */
   if (gsi_end_p (gsi_start_nondebug_bb (bb))
       && !gsi_end_p (gsi_start_phis (bb)))
     return true;
-  
+
   /* If BB has a single successor or a single predecessor, then
      there is no threading opportunity.  */
   if (single_succ_p (bb) || single_pred_p (bb))
@@ -148,7 +148,7 @@ lhs_of_dominating_assert (tree op, basic_block bb, gimple stmt)
    edge E.  Record unwind information for the equivalences onto STACK.
 
    If a PHI which prevents threading is encountered, then return FALSE
-   indicating we should not thread this edge, else return TRUE. 
+   indicating we should not thread this edge, else return TRUE.
 
    If SRC_MAP/DST_MAP exist, then mark the source and destination SSA_NAMEs
    of any equivalences recorded.  We use this to make invalidation after
@@ -423,10 +423,10 @@ record_temporary_equivalences_from_stmts_at_dest (edge e,
        }
 
       /* Record the context sensitive equivalence if we were able
-        to simplify this statement. 
+        to simplify this statement.
 
         If we have traversed a backedge at some point during threading,
-        then always enter something here.  Either a real equivalence, 
+        then always enter something here.  Either a real equivalence,
         or a NULL_TREE equivalence which is effectively invalidation of
         prior equivalences.  */
       if (cached_lhs
@@ -1238,7 +1238,7 @@ thread_through_normal_block (edge e,
       /* Second case.  */
       return -1;
     }
-  
+
   /* If we stopped at a COND_EXPR or SWITCH_EXPR, see if we know which arm
      will be taken.  */
   if (gimple_code (stmt) == GIMPLE_COND
@@ -1285,7 +1285,7 @@ thread_through_normal_block (edge e,
 
          /* See if we can thread through DEST as well, this helps capture
             secondary effects of threading without having to re-run DOM or
-            VRP. 
+            VRP.
 
             We don't want to thread back to a block we have already
             visited.  This may be overly conservative.  */
@@ -1445,7 +1445,7 @@ thread_across_edge (gcond *dummy_cond,
        const_and_copies->push_marker ();
        if (avail_exprs_stack)
          avail_exprs_stack->push_marker ();
-     
+
        /* Avoid threading to any block we have already visited.  */
        bitmap_clear (visited);
        bitmap_set_bit (visited, e->src->index);