From: Michael Ploujnikov Date: Fri, 30 Nov 2018 22:31:02 +0000 (+0000) Subject: Minimize clone counter memory usage in LTO. X-Git-Tag: upstream/12.2.0~27669 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ed1b53a0abc298f13a89e2bb69cbedfb5c4dd6f9;p=platform%2Fupstream%2Fgcc.git 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 --- diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index ca998df..7b9846c 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 24e7c238..867f075 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; }