cgraphunit.c (handle_alias_pairs): Declare; free alias_pairs
authorJan Hubicka <jh@suse.cz>
Sat, 19 May 2012 20:36:48 +0000 (22:36 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sat, 19 May 2012 20:36:48 +0000 (20:36 +0000)
* cgraphunit.c (handle_alias_pairs): Declare; free alias_pairs
(cgraph_process_new_functions): Process also aliases.
* lto-streamer-out.c (struct sets): Remove.
(trivally_defined_alias): Remove.
(output_alias_pair_p): Remove.
(output_unreferenced_globals): Remove.
(produce_symtab); Do not handle alias pairs.
(produce_asm_for_decls): Likewise.
* lto-streamer-in.c (input_alias_pairs): Remove.
(lto_read_body): Do not input alias pairs.
(lto_input_constructors_and_inits): Remove.

From-SVN: r187681

gcc/ChangeLog
gcc/cgraphunit.c
gcc/lto-streamer-in.c
gcc/lto-streamer-out.c
gcc/lto/ChangeLog
gcc/lto/lto.c

index 63b7674b2b2d8c0b5a5384a79d030a414205854e..84928803e9ebb1c8e9a6a5af515767ca86e928df 100644 (file)
@@ -1,3 +1,17 @@
+2012-05-18  Jan Hubicka  <jh@suse.cz>
+
+       * cgraphunit.c (handle_alias_pairs): Declare; free alias_pairs
+       (cgraph_process_new_functions): Process also aliases.
+       * lto-streamer-out.c (struct sets): Remove.
+       (trivally_defined_alias): Remove.
+       (output_alias_pair_p): Remove.
+       (output_unreferenced_globals): Remove.
+       (produce_symtab); Do not handle alias pairs.
+       (produce_asm_for_decls): Likewise.
+       * lto-streamer-in.c (input_alias_pairs): Remove.
+       (lto_read_body): Do not input alias pairs.
+       (lto_input_constructors_and_inits): Remove.
+
 2012-05-18  Jan Hubicka  <jh@suse.cz>
 
        * cgraphunit.c (handle_alias_pairs): Cleanup; handle all types of aliases.
index 7cd9fdf02b1f2f7ce03026d1c6cee772d5de0aa4..e3416c6adaac092ea98735d6177f04b0bc89aa78 100644 (file)
@@ -205,6 +205,7 @@ static void expand_all_functions (void);
 static void mark_functions_to_output (void);
 static void expand_function (struct cgraph_node *);
 static void cgraph_analyze_function (struct cgraph_node *);
+static void handle_alias_pairs (void);
 
 FILE *cgraph_dump_file;
 
@@ -284,6 +285,8 @@ cgraph_process_new_functions (void)
 
   if (!cgraph_new_nodes)
     return false;
+  finish_aliases_1 ();
+  handle_alias_pairs ();
   /*  Note that this queue may grow as its being processed, as the new
       functions may generate new ones.  */
   for (csi = csi_start (cgraph_new_nodes); !csi_end_p (csi); csi_next (&csi))
@@ -1089,6 +1092,7 @@ handle_alias_pairs (void)
          VEC_unordered_remove (alias_pair, alias_pairs, i);
        }
     }
+  VEC_free (alias_pair, gc, alias_pairs);
 }
 
 
index 5d617755ac41190c1fd5436790dd28c8957f10dc..63497f6d45603e963d7b71dbb5a9ae15afea4034 100644 (file)
@@ -931,39 +931,6 @@ input_function (tree fn_decl, struct data_in *data_in,
 }
 
 
-/* Read initializer expressions for public statics.  DATA_IN is the
-   file being read.  IB is the input block used for reading.  */
-
-static void
-input_alias_pairs (struct lto_input_block *ib, struct data_in *data_in)
-{
-  tree var;
-
-  clear_line_info (data_in);
-
-  var = stream_read_tree (ib, data_in);
-  while (var)
-    {
-      const char *orig_name, *new_name;
-      alias_pair *p;
-
-      p = VEC_safe_push (alias_pair, gc, alias_pairs, NULL);
-      p->decl = var;
-      p->target = stream_read_tree (ib, data_in);
-
-      /* If the target is a static object, we may have registered a
-        new name for it to avoid clashes between statics coming from
-        different files.  In that case, use the new name.  */
-      orig_name = IDENTIFIER_POINTER (p->target);
-      new_name = lto_get_decl_name_mapping (data_in->file_data, orig_name);
-      if (strcmp (orig_name, new_name) != 0)
-       p->target = get_identifier (new_name);
-
-      var = stream_read_tree (ib, data_in);
-    }
-}
-
-
 /* Read the body from DATA for function FN_DECL and fill it in.
    FILE_DATA are the global decls and types.  SECTION_TYPE is either
    LTO_section_function_body or LTO_section_static_initializer.  If
@@ -1059,10 +1026,6 @@ lto_read_body (struct lto_file_decl_data *file_data, tree fn_decl,
 
       pop_cfun ();
     }
-  else
-    {
-      input_alias_pairs (&ib_main, data_in);
-    }
 
   clear_line_info (data_in);
   lto_data_in_delete (data_in);
@@ -1081,17 +1044,6 @@ lto_input_function_body (struct lto_file_decl_data *file_data,
 }
 
 
-/* Read in VAR_DECL using DATA.  FILE_DATA holds the global decls and
-   types.  */
-
-void
-lto_input_constructors_and_inits (struct lto_file_decl_data *file_data,
-                                 const char *data)
-{
-  lto_read_body (file_data, NULL, data, LTO_section_static_initializer);
-}
-
-
 /* Read the physical representation of a tree node with tag TAG from
    input block IB using the per-file context in DATA_IN.  */
 
index a4b28422664ab03ebd388ee722ee55adea76d0b6..7f12e1c56b15a80891977cb3f53003c2dd36463c 100644 (file)
@@ -852,115 +852,6 @@ output_function (struct cgraph_node *node)
 }
 
 
-/* Used to pass data to trivally_defined_alias callback.  */
-struct sets {
-  cgraph_node_set set;
-  varpool_node_set vset;
-};
-
-
-/* Return true if alias pair P belongs to the set of cgraph nodes in
-   SET.  If P is a an alias for a VAR_DECL, it can always be emitted.
-   However, for FUNCTION_DECL aliases, we should only output the pair
-   if it belongs to a function whose cgraph node is in SET.
-   Otherwise, the LTRANS phase will get into trouble when finalizing
-   aliases because the alias will refer to a function not defined in
-   the file processed by LTRANS.  */
-
-static bool
-trivally_defined_alias (tree decl ATTRIBUTE_UNUSED,
-                       tree target, void *data)
-{
-  struct sets *set = (struct sets *) data;
-  struct cgraph_node *fnode = NULL;
-  struct varpool_node *vnode = NULL;
-
-  fnode = cgraph_node_for_asm (target);
-  if (fnode)
-    return cgraph_node_in_set_p (fnode, set->set);
-  vnode = varpool_node_for_asm (target);
-  return vnode && varpool_node_in_set_p (vnode, set->vset);
-}
-
-/* Return true if alias pair P should be output in the current
-   partition contains cgrpah nodes SET and varpool nodes VSET.
-   DEFINED is set of all aliases whose targets are defined in
-   the partition.
-
-   Normal aliases are output when they are defined, while WEAKREF
-   aliases are output when they are used.  */
-
-static bool
-output_alias_pair_p (alias_pair *p, symbol_alias_set_t *defined,
-                    cgraph_node_set set, varpool_node_set vset)
-{
-  struct cgraph_node *node;
-  struct varpool_node *vnode;
-
-  if (lookup_attribute ("weakref", DECL_ATTRIBUTES (p->decl)))
-    {
-      if (TREE_CODE (p->decl) == VAR_DECL)
-       {
-         vnode = varpool_get_node (p->decl);
-         return (vnode
-                 && referenced_from_this_partition_p (&vnode->symbol.ref_list,
-                                                     set, vset));
-       }
-      node = cgraph_get_node (p->decl);
-      return (node
-             && (referenced_from_this_partition_p (&node->symbol.ref_list,
-                                                   set, vset)
-                 || reachable_from_this_partition_p (node, set)));
-    }
-  else
-    return symbol_alias_set_contains (defined, p->decl);
-}
-
-/* Output any unreferenced global symbol defined in SET, alias pairs
-   and labels.  */
-
-static void
-output_unreferenced_globals (cgraph_node_set set, varpool_node_set vset)
-{
-  struct output_block *ob;
-  alias_pair *p;
-  unsigned i;
-  symbol_alias_set_t *defined;
-  struct sets setdata;
-
-  setdata.set = set;
-  setdata.vset = vset;
-
-  ob = create_output_block (LTO_section_static_initializer);
-  ob->cgraph_node = NULL;
-
-  clear_line_info (ob);
-
-  /* Make string 0 be a NULL string.  */
-  streamer_write_char_stream (ob->string_stream, 0);
-
-  /* We really need to propagate in both directoins:
-     for normal aliases we propagate from first defined alias to
-     all aliases defined based on it.  For weakrefs we propagate in
-     the oposite direction.  */
-  defined = propagate_aliases_backward (trivally_defined_alias, &setdata);
-
-  /* Emit the alias pairs for the nodes in SET.  */
-  FOR_EACH_VEC_ELT (alias_pair, alias_pairs, i, p)
-    if (output_alias_pair_p (p, defined, set, vset))
-      {
-       stream_write_tree (ob, p->decl, true);
-       stream_write_tree (ob, p->target, true);
-      }
-  symbol_alias_set_destroy (defined);
-
-  streamer_write_record_start (ob, LTO_null);
-
-  produce_asm (ob, NULL);
-  destroy_output_block (ob);
-}
-
-
 /* Emit toplevel asms.  */
 
 void
@@ -1387,8 +1278,7 @@ write_symbol (struct streamer_tree_cache_d *cache,
    SET and VSET are cgraph/varpool node sets we are outputting.  */
 
 static void
-produce_symtab (struct output_block *ob,
-               cgraph_node_set set, varpool_node_set vset)
+produce_symtab (struct output_block *ob)
 {
   struct streamer_tree_cache_d *cache = ob->writer_cache;
   char *section_name = lto_get_section_name (LTO_section_symtab, NULL, NULL);
@@ -1399,12 +1289,6 @@ produce_symtab (struct output_block *ob,
   lto_varpool_encoder_t varpool_encoder = ob->decl_state->varpool_node_encoder;
   lto_cgraph_encoder_t encoder = ob->decl_state->cgraph_node_encoder;
   int i;
-  alias_pair *p;
-  struct sets setdata;
-  symbol_alias_set_t *defined;
-
-  setdata.set = set;
-  setdata.vset = vset;
 
   lto_begin_section (section_name, false);
   free (section_name);
@@ -1478,13 +1362,6 @@ produce_symtab (struct output_block *ob,
       write_symbol (cache, &stream, vnode->symbol.decl, seen, false);
     }
 
-  /* Write all aliases.  */
-  defined = propagate_aliases_backward (trivally_defined_alias, &setdata);
-  FOR_EACH_VEC_ELT (alias_pair, alias_pairs, i, p)
-    if (output_alias_pair_p (p, defined, set, vset))
-      write_symbol (cache, &stream, p->decl, seen, true);
-  symbol_alias_set_destroy (defined);
-
   lto_write_stream (&stream);
   pointer_set_destroy (seen);
 
@@ -1499,7 +1376,8 @@ produce_symtab (struct output_block *ob,
    recover these on other side.  */
 
 static void
-produce_asm_for_decls (cgraph_node_set set, varpool_node_set vset)
+produce_asm_for_decls (cgraph_node_set set ATTRIBUTE_UNUSED,
+                      varpool_node_set vset ATTRIBUTE_UNUSED)
 {
   struct lto_out_decl_state *out_state;
   struct lto_out_decl_state *fn_out_state;
@@ -1514,11 +1392,6 @@ produce_asm_for_decls (cgraph_node_set set, varpool_node_set vset)
   ob = create_output_block (LTO_section_decls);
   ob->global = true;
 
-  /* Write out unreferenced globals, alias pairs and labels.  We defer
-     doing this until now so that we can write out only what is
-     needed.  */
-  output_unreferenced_globals (set, vset);
-
   memset (&header, 0, sizeof (struct lto_decl_header));
 
   section_name = lto_get_section_name (LTO_section_decls, NULL, NULL);
@@ -1528,6 +1401,8 @@ produce_asm_for_decls (cgraph_node_set set, varpool_node_set vset)
   /* Make string 0 be a NULL string.  */
   streamer_write_char_stream (ob->string_stream, 0);
 
+  gcc_assert (!alias_pairs);
+
   /* Write the global symbols.  */
   out_state = lto_get_out_decl_state ();
   num_fns = VEC_length (lto_out_decl_state_ptr, lto_function_decl_states);
@@ -1591,7 +1466,7 @@ produce_asm_for_decls (cgraph_node_set set, varpool_node_set vset)
   /* Write the symbol table.  It is used by linker to determine dependencies
      and thus we can skip it for WPA.  */
   if (!flag_wpa)
-    produce_symtab (ob, set, vset);
+    produce_symtab (ob);
 
   /* Write command line opts.  */
   lto_write_options ();
index 04d4d03ee5b8b843b2b93b3a0008c6c7dbe5a52f..06774d833b009b3e2cf4e5c15faae7ca844ee37e 100644 (file)
@@ -1,3 +1,8 @@
+2012-05-18  Jan Hubicka  <jh@suse.cz>
+
+       * lto.c (lto_materialize_constructors_and_inits): Remove.
+       (read_cgraph_and_symbols): Remove handling of alias pairs.
+
 2012-05-17  Jan Hubicka  <jh@suse.cz>
 
        * lto-partition.c (add_references_to_partition): Handle external vars.
index 00f623f6a0d61b549d7f1420959a4fcd4546877e..b94c8a7f8694dc10be56a5cd74cb35182e705b4e 100644 (file)
@@ -156,20 +156,6 @@ lto_splay_tree_new (void)
                         NULL);
 }
 
-/* Read the constructors and inits.  */
-
-static void
-lto_materialize_constructors_and_inits (struct lto_file_decl_data * file_data)
-{
-  size_t len;
-  const char *data = lto_get_section_data (file_data, 
-                                          LTO_section_static_initializer,
-                                          NULL, &len);
-  lto_input_constructors_and_inits (file_data, data);
-  lto_free_section_data (file_data, LTO_section_static_initializer, NULL,
-                        data, len);
-}
-
 /* Return true when NODE has a clone that is analyzed (i.e. we need
    to load its body even if the node itself is not needed).  */
 
@@ -1883,15 +1869,6 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
 
   timevar_push (TV_IPA_LTO_DECL_INIT_IO);
 
-  /* FIXME lto. This loop needs to be changed to use the pass manager to
-     call the ipa passes directly.  */
-  if (!seen_error ())
-    for (i = 0; i < last_file_ix; i++)
-      {
-       struct lto_file_decl_data *file_data = all_file_decl_data [i];
-       lto_materialize_constructors_and_inits (file_data);
-      }
-
   /* Indicate that the cgraph is built and ready.  */
   cgraph_function_flags_ready = true;