tree.h (init_phinodes, [...]): Move ...
authorDiego Novillo <dnovillo@google.com>
Tue, 13 May 2008 18:24:33 +0000 (14:24 -0400)
committerDiego Novillo <dnovillo@gcc.gnu.org>
Tue, 13 May 2008 18:24:33 +0000 (14:24 -0400)
2008-05-13  Diego Novillo  <dnovillo@google.com>
    Kenneth Zadeck  <zadeck@naturalbridge.com>

http://gcc.gnu.org/ml/gcc-patches/2008-05/msg00748.html

* tree.h (init_phinodes, fini_phinodes, release_phi_node,
phinodes_print_statistics, init_ssanames, fini_ssanames,
make_ssa_name, duplicate_ssa_name,
duplicate_ssa_name_ptr_info, release_ssa_name,
release_defs, replace_ssa_name_symbol,
ssanames_print_statistics): Move ...
* tree-flow.h: ... here.
* tree-ssanames.c (init_ssanames): Add arguments FN and
SIZE.  Use FN instead of cfun.
(make_ssa_name_fn): Rename from make_ssa_name.
(pass_release_ssa_names): Add TODO_dump_func to finish
flags.
* tree-flow-inline.h (make_ssa_name): Move from
tree-ssanames.c.  Convert to static inline.  Call
make_ssa_name_fn.
* omp-low.c (expand_omp_parallel):
* tree-flow-inline.h (redirect_edge_var_map_result):
* tree-ssa.c (init_tree_ssa): Add argument FN.  Use it
instead of cfun.
Update all users.

Co-Authored-By: Kenneth Zadeck <zadeck@naturalbridge.com>
From-SVN: r135270

gcc/ChangeLog
gcc/omp-low.c
gcc/tree-flow-inline.h
gcc/tree-flow.h
gcc/tree-inline.c
gcc/tree-optimize.c
gcc/tree-ssa.c
gcc/tree-ssanames.c
gcc/tree.h

index 3efb55118a10be85c4b2df3a3fa21d66e8cc498a..cd5f12b6d6eb818462588f7f1dbb1d4ae9c18a17 100644 (file)
@@ -1,3 +1,29 @@
+2008-05-13  Diego Novillo  <dnovillo@google.com>
+           Kenneth Zadeck  <zadeck@naturalbridge.com>
+
+       http://gcc.gnu.org/ml/gcc-patches/2008-05/msg00748.html
+
+       * tree.h (init_phinodes, fini_phinodes, release_phi_node,
+       phinodes_print_statistics, init_ssanames, fini_ssanames,
+       make_ssa_name, duplicate_ssa_name,
+       duplicate_ssa_name_ptr_info, release_ssa_name,
+       release_defs, replace_ssa_name_symbol,
+       ssanames_print_statistics): Move ...
+       * tree-flow.h: ... here.
+       * tree-ssanames.c (init_ssanames): Add arguments FN and
+       SIZE.  Use FN instead of cfun.
+       (make_ssa_name_fn): Rename from make_ssa_name.
+       (pass_release_ssa_names): Add TODO_dump_func to finish
+       flags.
+       * tree-flow-inline.h (make_ssa_name): Move from
+       tree-ssanames.c.  Convert to static inline.  Call
+       make_ssa_name_fn.
+       * omp-low.c (expand_omp_parallel):
+       * tree-flow-inline.h (redirect_edge_var_map_result):
+       * tree-ssa.c (init_tree_ssa): Add argument FN.  Use it
+       instead of cfun.
+       Update all users.
+
 2008-05-13  Tom Tromey  <tromey@redhat.com>
 
        PR preprocessor/22168:
index 1d3bf7b1f9c119e057bd8bf57f66263950456dc8..3f2ed91a0685ce77c4be5f5d043886d82cc33e74 100644 (file)
@@ -2659,7 +2659,7 @@ expand_omp_parallel (struct omp_region *region)
       if (gimple_in_ssa_p (cfun))
        {
          push_cfun (child_cfun);
-         init_tree_ssa ();
+         init_tree_ssa (child_cfun);
          init_ssa_operands ();
          cfun->gimple_df->in_ssa_p = true;
          pop_cfun ();
index f2fe01e18d40977b0c3e17b1982c73231517afc5..a4fe9c29c22e103a60bccc12429881d699e76921 100644 (file)
@@ -1689,4 +1689,15 @@ redirect_edge_var_map_result (edge_var_map *v)
 {
   return v->result;
 }
+
+
+/* Return an SSA_NAME node for variable VAR defined in statement STMT
+   in function cfun.  */
+
+static inline tree
+make_ssa_name (tree var, tree stmt)
+{
+  return make_ssa_name_fn (cfun, var, stmt);
+}
+
 #endif /* _TREE_FLOW_INLINE_H  */
index 848a9d986959d6fd357895f8294d1ba9c050e5c3..019cb7ba09c6c504e0bb39d0c1738e42d2037620 100644 (file)
@@ -829,6 +829,12 @@ extern void add_phi_arg (tree, tree, edge);
 extern void remove_phi_args (edge);
 extern void remove_phi_node (tree, tree, bool);
 extern tree phi_reverse (tree);
+extern void init_phinodes (void);
+extern void fini_phinodes (void);
+extern void release_phi_node (tree);
+#ifdef GATHER_STATISTICS
+extern void phinodes_print_statistics (void);
+#endif
 
 /* In gimple-low.c  */
 extern void record_vars_into (tree, tree);
@@ -893,8 +899,7 @@ extern void redirect_edge_var_map_dup (edge, edge);
 extern edge_var_map_vector redirect_edge_var_map_vector (edge);
 extern void redirect_edge_var_map_destroy (void);
 
-
-extern void init_tree_ssa (void);
+extern void init_tree_ssa (struct function *);
 extern edge ssa_redirect_edge (edge, basic_block);
 extern void flush_pending_stmts (edge);
 extern bool tree_ssa_useless_type_conversion (tree);
@@ -924,6 +929,20 @@ void mark_set_for_renaming (bitmap);
 tree get_current_def (tree);
 void set_current_def (tree, tree);
 
+/* In tree-ssanames.c  */
+extern void init_ssanames (struct function *, int);
+extern void fini_ssanames (void);
+extern tree make_ssa_name_fn (struct function *, tree, tree);
+extern tree duplicate_ssa_name (tree, tree);
+extern void duplicate_ssa_name_ptr_info (tree, struct ptr_info_def *);
+extern void release_ssa_name (tree);
+extern void release_defs (tree);
+extern void replace_ssa_name_symbol (tree, tree);
+
+#ifdef GATHER_STATISTICS
+extern void ssanames_print_statistics (void);
+#endif
+
 /* In tree-ssa-ccp.c  */
 bool fold_stmt (tree *);
 bool fold_stmt_inplace (tree);
index e7fed4f072375479bc7bd242e8c6f3debd300791..1ba7b60f6f122eabc8147a7e4eb83dc1ef3abf8e 100644 (file)
@@ -1301,7 +1301,7 @@ initialize_cfun (tree new_fndecl, tree callee_fndecl, gcov_type count,
 
   if (src_cfun->gimple_df)
     {
-      init_tree_ssa ();
+      init_tree_ssa (cfun);
       cfun->gimple_df->in_ssa_p = true;
       init_ssa_operands ();
     }
index 270353601da15a9c787ee4c2ea8409979a36a129..84e1e9d9db347e036af97d1c93300419f43d9028 100644 (file)
@@ -333,7 +333,7 @@ static unsigned int
 execute_init_datastructures (void)
 {
   /* Allocate hash tables, arrays and other structures.  */
-  init_tree_ssa ();
+  init_tree_ssa (cfun);
   return 0;
 }
 
index 9ba865e241d9ba117e3dc00abf1b17081f2a0635..150074f7c23618c9cc1c98853fa9467465f68e67 100644 (file)
@@ -944,18 +944,18 @@ uid_ssaname_map_hash (const void *item)
 /* Initialize global DFA and SSA structures.  */
 
 void
-init_tree_ssa (void)
+init_tree_ssa (struct function *fn)
 {
-  cfun->gimple_df = GGC_CNEW (struct gimple_df);
-  cfun->gimple_df->referenced_vars = htab_create_ggc (20, uid_decl_map_hash, 
-                                                     uid_decl_map_eq, NULL);
-  cfun->gimple_df->default_defs = htab_create_ggc (20, uid_ssaname_map_hash, 
-                                                  uid_ssaname_map_eq, NULL);
-  cfun->gimple_df->var_anns = htab_create_ggc (20, var_ann_hash, 
-                                              var_ann_eq, NULL);
-  cfun->gimple_df->call_clobbered_vars = BITMAP_GGC_ALLOC ();
-  cfun->gimple_df->addressable_vars = BITMAP_GGC_ALLOC ();
-  init_ssanames ();
+  fn->gimple_df = GGC_CNEW (struct gimple_df);
+  fn->gimple_df->referenced_vars = htab_create_ggc (20, uid_decl_map_hash, 
+                                                   uid_decl_map_eq, NULL);
+  fn->gimple_df->default_defs = htab_create_ggc (20, uid_ssaname_map_hash, 
+                                                uid_ssaname_map_eq, NULL);
+  fn->gimple_df->var_anns = htab_create_ggc (20, var_ann_hash, 
+                                            var_ann_eq, NULL);
+  fn->gimple_df->call_clobbered_vars = BITMAP_GGC_ALLOC ();
+  fn->gimple_df->addressable_vars = BITMAP_GGC_ALLOC ();
+  init_ssanames (fn, 0);
   init_phinodes ();
 }
 
index d418bc19b5fc8491f4c82c244c34b1f4786a71e0..8d675b43c4902ea5c44dc4b661cfc061d0649fe5 100644 (file)
@@ -67,12 +67,16 @@ unsigned int ssa_name_nodes_reused;
 unsigned int ssa_name_nodes_created;
 #endif
 
-/* Initialize management of SSA_NAMEs.  */
+/* Initialize management of SSA_NAMEs to default SIZE.  If SIZE is
+   zero use default.  */
 
 void
-init_ssanames (void)
+init_ssanames (struct function *fn, int size)
 {
-  SSANAMES (cfun) = VEC_alloc (tree, gc, 50);
+  if (size < 50)
+    size = 50;
+
+  SSANAMES (fn) = VEC_alloc (tree, gc, size);
 
   /* Version 0 is special, so reserve the first slot in the table.  Though
      currently unused, we may use version 0 in alias analysis as part of
@@ -81,8 +85,8 @@ init_ssanames (void)
 
      We use VEC_quick_push here because we know that SSA_NAMES has at
      least 50 elements reserved in it.  */
-  VEC_quick_push (tree, SSANAMES (cfun), NULL_TREE);
-  FREE_SSANAMES (cfun) = NULL;
+  VEC_quick_push (tree, SSANAMES (fn), NULL_TREE);
+  FREE_SSANAMES (fn) = NULL;
 }
 
 /* Finalize management of SSA_NAMEs.  */
@@ -105,13 +109,13 @@ ssanames_print_statistics (void)
 }
 #endif
 
-/* Return an SSA_NAME node for variable VAR defined in statement STMT.
-   STMT may be an empty statement for artificial references (e.g., default
-   definitions created when a variable is used without a preceding
-   definition).  */
+/* Return an SSA_NAME node for variable VAR defined in statement STMT
+   in function FN.  STMT may be an empty statement for artificial
+   references (e.g., default definitions created when a variable is
+   used without a preceding definition).  */
 
 tree
-make_ssa_name (tree var, tree stmt)
+make_ssa_name_fn (struct function *fn, tree var, tree stmt)
 {
   tree t;
   use_operand_p imm;
@@ -124,10 +128,10 @@ make_ssa_name (tree var, tree stmt)
              || TREE_CODE (stmt) == PHI_NODE);
 
   /* If our free list has an element, then use it.  */
-  if (FREE_SSANAMES (cfun))
+  if (FREE_SSANAMES (fn))
     {
-      t = FREE_SSANAMES (cfun);
-      FREE_SSANAMES (cfun) = TREE_CHAIN (FREE_SSANAMES (cfun));
+      t = FREE_SSANAMES (fn);
+      FREE_SSANAMES (fn) = TREE_CHAIN (FREE_SSANAMES (fn));
 #ifdef GATHER_STATISTICS
       ssa_name_nodes_reused++;
 #endif
@@ -135,13 +139,13 @@ make_ssa_name (tree var, tree stmt)
       /* The node was cleared out when we put it on the free list, so
         there is no need to do so again here.  */
       gcc_assert (ssa_name (SSA_NAME_VERSION (t)) == NULL);
-      VEC_replace (tree, SSANAMES (cfun), SSA_NAME_VERSION (t), t);
+      VEC_replace (tree, SSANAMES (fn), SSA_NAME_VERSION (t), t);
     }
   else
     {
       t = make_node (SSA_NAME);
-      SSA_NAME_VERSION (t) = num_ssa_names;
-      VEC_safe_push (tree, gc, SSANAMES (cfun), t);
+      SSA_NAME_VERSION (t) = VEC_length (tree, SSANAMES (fn));
+      VEC_safe_push (tree, gc, SSANAMES (fn), t);
 #ifdef GATHER_STATISTICS
       ssa_name_nodes_created++;
 #endif
@@ -358,6 +362,6 @@ struct gimple_opt_pass pass_release_ssa_names =
   0,                                   /* properties_provided */
   0,                                   /* properties_destroyed */
   0,                                   /* todo_flags_start */
-  0                                    /* todo_flags_finish */
+  TODO_dump_func                       /* todo_flags_finish */
  }
 };
index 82c44b10a5d3018e95325abd6bb1faea19223a2c..d4bd080ffed94574dd375ecd4fa9d0788a1aad7c 100644 (file)
@@ -3880,28 +3880,6 @@ extern tree make_tree_binfo_stat (unsigned MEM_STAT_DECL);
 extern tree make_tree_vec_stat (int MEM_STAT_DECL);
 #define make_tree_vec(t) make_tree_vec_stat (t MEM_STAT_INFO)
 
-/* Tree nodes for SSA analysis.  */
-
-extern void init_phinodes (void);
-extern void fini_phinodes (void);
-extern void release_phi_node (tree);
-#ifdef GATHER_STATISTICS
-extern void phinodes_print_statistics (void);
-#endif
-
-extern void init_ssanames (void);
-extern void fini_ssanames (void);
-extern tree make_ssa_name (tree, tree);
-extern tree duplicate_ssa_name (tree, tree);
-extern void duplicate_ssa_name_ptr_info (tree, struct ptr_info_def *);
-extern void release_ssa_name (tree);
-extern void release_defs (tree);
-extern void replace_ssa_name_symbol (tree, tree);
-
-#ifdef GATHER_STATISTICS
-extern void ssanames_print_statistics (void);
-#endif
-
 /* Return the (unique) IDENTIFIER_NODE node for a given name.
    The name is supplied as a char *.  */