From ed1b53a0abc298f13a89e2bb69cbedfb5c4dd6f9 Mon Sep 17 00:00:00 2001 From: Michael Ploujnikov Date: Fri, 30 Nov 2018 22:31:02 +0000 Subject: [PATCH] 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 --- gcc/lto/ChangeLog | 11 +++++++++++ gcc/lto/lto-partition.c | 15 +++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index ca998df8b73..7b9846cd8f6 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,14 @@ +2018-11-30 Michael Ploujnikov + + 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 * lto.c (lto_read_decls): Fix handling of INTEGER_CST. diff --git a/gcc/lto/lto-partition.c b/gcc/lto/lto-partition.c index 24e7c238597..867f075b580 100644 --- a/gcc/lto/lto-partition.c +++ b/gcc/lto/lto-partition.c @@ -951,6 +951,9 @@ validize_symbol_for_target (symtab_node *node) } } +/* Maps symbol names to unique lto clone counters. */ +static hash_map *lto_clone_numbers; + /* Helper for privatize_symbol_name. Mangle NODE symbol name represented by DECL. */ @@ -963,9 +966,11 @@ privatize_symbol_name_1 (symtab_node *node, tree decl) return false; name = maybe_rewrite_identifier (name); + unsigned &clone_number = lto_clone_numbers->get_or_insert (name); symtab->change_decl_assembler_name (decl, - clone_function_name_numbered ( - name, "lto_priv")); + clone_function_name ( + name, "lto_priv", clone_number)); + clone_number++; if (node->lto_file_data) lto_record_renamed_decl (node->lto_file_data, name, @@ -1157,6 +1162,8 @@ lto_promote_cross_file_statics (void) part->encoder = compute_ltrans_boundary (part->encoder); } + lto_clone_numbers = new hash_map; + /* Look at boundaries and promote symbols as needed. */ for (i = 0; i < n_sets; i++) { @@ -1187,6 +1194,7 @@ lto_promote_cross_file_statics (void) promote_symbol (node); } } + delete lto_clone_numbers; } /* Rename statics in the whole unit in the case that @@ -1196,9 +1204,12 @@ void lto_promote_statics_nonwpa (void) { symtab_node *node; + + lto_clone_numbers = new hash_map; FOR_EACH_SYMBOL (node) { rename_statics (NULL, node); validize_symbol_for_target (node); } + delete lto_clone_numbers; } -- 2.30.2