Commit ed1b53a0 by Michael Ploujnikov Committed by Michael Ploujnikov

Minimize clone counter memory usage in LTO.

gcc/lto:

	* lto-partition.c (privatize_symbol_name_1): Keep track of
	non-unique symbol counters in the lto_clone_numbers hash
	map.
	(lto_promote_cross_file_statics): Allocate and free the
	lto_clone_numbers hash map.
	(lto_promote_statics_nonwpa): Free the lto_clone_numbers hash
	map.

From-SVN: r266693
parent 53aedcce
2018-11-30 Michael Ploujnikov <michael.ploujnikov@oracle.com>
Minimize clone counter memory usage in LTO.
* lto-partition.c (privatize_symbol_name_1): Keep track of
non-unique symbol counters in the lto_clone_numbers hash
map.
(lto_promote_cross_file_statics): Allocate and free the
lto_clone_numbers hash map.
(lto_promote_statics_nonwpa): Free the lto_clone_numbers hash
map.
2018-11-28 Jan Hubicka <jh@suse.cz> 2018-11-28 Jan Hubicka <jh@suse.cz>
* lto.c (lto_read_decls): Fix handling of INTEGER_CST. * lto.c (lto_read_decls): Fix handling of INTEGER_CST.
......
...@@ -951,6 +951,9 @@ validize_symbol_for_target (symtab_node *node) ...@@ -951,6 +951,9 @@ validize_symbol_for_target (symtab_node *node)
} }
} }
/* Maps symbol names to unique lto clone counters. */
static hash_map<const char *, unsigned> *lto_clone_numbers;
/* Helper for privatize_symbol_name. Mangle NODE symbol name /* Helper for privatize_symbol_name. Mangle NODE symbol name
represented by DECL. */ represented by DECL. */
...@@ -963,9 +966,11 @@ privatize_symbol_name_1 (symtab_node *node, tree decl) ...@@ -963,9 +966,11 @@ privatize_symbol_name_1 (symtab_node *node, tree decl)
return false; return false;
name = maybe_rewrite_identifier (name); name = maybe_rewrite_identifier (name);
unsigned &clone_number = lto_clone_numbers->get_or_insert (name);
symtab->change_decl_assembler_name (decl, symtab->change_decl_assembler_name (decl,
clone_function_name_numbered ( clone_function_name (
name, "lto_priv")); name, "lto_priv", clone_number));
clone_number++;
if (node->lto_file_data) if (node->lto_file_data)
lto_record_renamed_decl (node->lto_file_data, name, lto_record_renamed_decl (node->lto_file_data, name,
...@@ -1157,6 +1162,8 @@ lto_promote_cross_file_statics (void) ...@@ -1157,6 +1162,8 @@ lto_promote_cross_file_statics (void)
part->encoder = compute_ltrans_boundary (part->encoder); part->encoder = compute_ltrans_boundary (part->encoder);
} }
lto_clone_numbers = new hash_map<const char *, unsigned>;
/* Look at boundaries and promote symbols as needed. */ /* Look at boundaries and promote symbols as needed. */
for (i = 0; i < n_sets; i++) for (i = 0; i < n_sets; i++)
{ {
...@@ -1187,6 +1194,7 @@ lto_promote_cross_file_statics (void) ...@@ -1187,6 +1194,7 @@ lto_promote_cross_file_statics (void)
promote_symbol (node); promote_symbol (node);
} }
} }
delete lto_clone_numbers;
} }
/* Rename statics in the whole unit in the case that /* Rename statics in the whole unit in the case that
...@@ -1196,9 +1204,12 @@ void ...@@ -1196,9 +1204,12 @@ void
lto_promote_statics_nonwpa (void) lto_promote_statics_nonwpa (void)
{ {
symtab_node *node; symtab_node *node;
lto_clone_numbers = new hash_map<const char *, unsigned>;
FOR_EACH_SYMBOL (node) FOR_EACH_SYMBOL (node)
{ {
rename_statics (NULL, node); rename_statics (NULL, node);
validize_symbol_for_target (node); validize_symbol_for_target (node);
} }
delete lto_clone_numbers;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment