mirror of git://gcc.gnu.org/git/gcc.git
dumpfile.c (FIRST_ME_AUTO_NUMBERED_DUMP): Bump to 4.
* dumpfile.c (FIRST_ME_AUTO_NUMBERED_DUMP): Bump to 4. * lto-lang.c (lto_link_dump_id, decl_merge_dump_id, partition_dump_id): New global vars. (lto_register_dumps): New hook. (LANG_HOOKS_REGISTER_DUMPS): New. * lto-partition.c: Dump into dump_file instead of symtab->dump_file. * lto-symtab.c: Include lto.h; dump into dump_file instead of symtab->dump_file. (lto_symtab_merge_decls): Initialize dump file. * lto.c (read_cgraph_and_symbols): Initialize dump file. (do_whole_program_analysis): Likewise. From-SVN: r261337
This commit is contained in:
parent
850078b738
commit
29a50dfb47
|
|
@ -1,3 +1,7 @@
|
|||
2018-06-08 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* dumpfile.c (FIRST_ME_AUTO_NUMBERED_DUMP): Bump to 4.
|
||||
|
||||
2018-06-08 David Edelsohn <dje.gcc@gmail.com>
|
||||
|
||||
* config/rs6000/rs6000.c (rs6000_passes_ieee128): Protect with #if
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ static struct dump_file_info dump_files[TDI_end] =
|
|||
DUMP_FILE_INFO (".gimple", "tree-gimple", DK_tree, 0),
|
||||
DUMP_FILE_INFO (".nested", "tree-nested", DK_tree, 0),
|
||||
#define FIRST_AUTO_NUMBERED_DUMP 1
|
||||
#define FIRST_ME_AUTO_NUMBERED_DUMP 3
|
||||
#define FIRST_ME_AUTO_NUMBERED_DUMP 4
|
||||
|
||||
DUMP_FILE_INFO (NULL, "lang-all", DK_lang, 0),
|
||||
DUMP_FILE_INFO (NULL, "tree-all", DK_tree, 0),
|
||||
|
|
|
|||
|
|
@ -1,3 +1,16 @@
|
|||
2018-06-08 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* lto-lang.c (lto_link_dump_id, decl_merge_dump_id, partition_dump_id):
|
||||
New global vars.
|
||||
(lto_register_dumps): New hook.
|
||||
(LANG_HOOKS_REGISTER_DUMPS): New.
|
||||
* lto-partition.c: Dump into dump_file instead of symtab->dump_file.
|
||||
* lto-symtab.c: Include lto.h; dump into dump_file instead of
|
||||
symtab->dump_file.
|
||||
(lto_symtab_merge_decls): Initialize dump file.
|
||||
* lto.c (read_cgraph_and_symbols): Initialize dump file.
|
||||
(do_whole_program_analysis): Likewise.
|
||||
|
||||
2018-06-08 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* lto-partition.c (lto_balanced_map): Use cgraph_node::uid
|
||||
|
|
|
|||
|
|
@ -37,6 +37,9 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "stringpool.h"
|
||||
#include "attribs.h"
|
||||
|
||||
/* LTO specific dumps. */
|
||||
int lto_link_dump_id, decl_merge_dump_id, partition_dump_id;
|
||||
|
||||
static tree handle_noreturn_attribute (tree *, tree, tree, int, bool *);
|
||||
static tree handle_leaf_attribute (tree *, tree, tree, int, bool *);
|
||||
static tree handle_const_attribute (tree *, tree, tree, int, bool *);
|
||||
|
|
@ -1375,6 +1378,23 @@ lto_init (void)
|
|||
return true;
|
||||
}
|
||||
|
||||
/* Register c++-specific dumps. */
|
||||
|
||||
void
|
||||
lto_register_dumps (gcc::dump_manager *dumps)
|
||||
{
|
||||
lto_link_dump_id = dumps->dump_register
|
||||
(".lto-link", "ipa-lto-link", "ipa-lto-link",
|
||||
DK_ipa, OPTGROUP_NONE, false);
|
||||
decl_merge_dump_id = dumps->dump_register
|
||||
(".lto-decl-merge", "ipa-lto-decl-merge", "ipa-lto-decl-merge",
|
||||
DK_ipa, OPTGROUP_NONE, false);
|
||||
partition_dump_id = dumps->dump_register
|
||||
(".lto-partition", "ipa-lto-partition", "ipa-lto-partition",
|
||||
DK_ipa, OPTGROUP_NONE, false);
|
||||
}
|
||||
|
||||
|
||||
/* Initialize tree structures required by the LTO front end. */
|
||||
|
||||
static void lto_init_ts (void)
|
||||
|
|
@ -1390,6 +1410,8 @@ static void lto_init_ts (void)
|
|||
#define LANG_HOOKS_COMPLAIN_WRONG_LANG_P lto_complain_wrong_lang_p
|
||||
#undef LANG_HOOKS_INIT_OPTIONS_STRUCT
|
||||
#define LANG_HOOKS_INIT_OPTIONS_STRUCT lto_init_options_struct
|
||||
#undef LANG_HOOKS_REGISTER_DUMPS
|
||||
#define LANG_HOOKS_REGISTER_DUMPS lto_register_dumps
|
||||
#undef LANG_HOOKS_HANDLE_OPTION
|
||||
#define LANG_HOOKS_HANDLE_OPTION lto_handle_option
|
||||
#undef LANG_HOOKS_POST_OPTIONS
|
||||
|
|
|
|||
|
|
@ -160,8 +160,8 @@ add_symbol_to_partition_1 (ltrans_partition part, symtab_node *node)
|
|||
if (symbol_partitioned_p (node))
|
||||
{
|
||||
node->in_other_partition = 1;
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file,
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Symbol node %s now used in multiple partitions\n",
|
||||
node->name ());
|
||||
}
|
||||
|
|
@ -541,13 +541,13 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
|
|||
order.qsort (node_cmp);
|
||||
noreorder.qsort (node_cmp);
|
||||
|
||||
if (symtab->dump_file)
|
||||
if (dump_file)
|
||||
{
|
||||
for (unsigned i = 0; i < order.length (); i++)
|
||||
fprintf (symtab->dump_file, "Balanced map symbol order:%s:%u\n",
|
||||
fprintf (dump_file, "Balanced map symbol order:%s:%u\n",
|
||||
order[i]->name (), order[i]->tp_first_run);
|
||||
for (unsigned i = 0; i < noreorder.length (); i++)
|
||||
fprintf (symtab->dump_file, "Balanced map symbol no_reorder:%s:%u\n",
|
||||
fprintf (dump_file, "Balanced map symbol no_reorder:%s:%u\n",
|
||||
noreorder[i]->name (), noreorder[i]->tp_first_run);
|
||||
}
|
||||
|
||||
|
|
@ -569,8 +569,8 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
|
|||
partition_size = PARAM_VALUE (MIN_PARTITION_SIZE);
|
||||
npartitions = 1;
|
||||
partition = new_partition ("");
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file, "Total unit size: %" PRId64 ", partition size: %" PRId64 "\n",
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Total unit size: %" PRId64 ", partition size: %" PRId64 "\n",
|
||||
total_size, partition_size);
|
||||
|
||||
auto_vec<symtab_node *> next_nodes;
|
||||
|
|
@ -763,8 +763,8 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
|
|||
best_n_nodes = lto_symtab_encoder_size (partition->encoder);
|
||||
best_varpool_pos = varpool_pos;
|
||||
}
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file, "Step %i: added %s/%i, size %i, "
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Step %i: added %s/%i, size %i, "
|
||||
"cost %" PRId64 "/%" PRId64 " "
|
||||
"best %" PRId64 "/%" PRId64", step %i\n", i,
|
||||
order[i]->name (), order[i]->order,
|
||||
|
|
@ -777,16 +777,16 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
|
|||
{
|
||||
if (best_i != i)
|
||||
{
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file, "Unwinding %i insertions to step %i\n",
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Unwinding %i insertions to step %i\n",
|
||||
i - best_i, best_i);
|
||||
undo_partition (partition, best_n_nodes);
|
||||
varpool_pos = best_varpool_pos;
|
||||
}
|
||||
gcc_assert (best_size == partition->insns);
|
||||
i = best_i;
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file,
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Partition insns: %i (want %" PRId64 ")\n",
|
||||
partition->insns, partition_size);
|
||||
/* When we are finished, avoid creating empty partition. */
|
||||
|
|
@ -799,8 +799,8 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
|
|||
last_visited_node = 0;
|
||||
cost = 0;
|
||||
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file, "New partition\n");
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "New partition\n");
|
||||
best_n_nodes = 0;
|
||||
best_cost = -1;
|
||||
|
||||
|
|
@ -812,8 +812,8 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
|
|||
/* Watch for overflow. */
|
||||
partition_size = INT_MAX / 16;
|
||||
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file,
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Total size: %" PRId64 " partition_size: %" PRId64 "\n",
|
||||
total_size, partition_size);
|
||||
if (partition_size < PARAM_VALUE (MIN_PARTITION_SIZE))
|
||||
|
|
@ -840,21 +840,21 @@ lto_balanced_map (int n_lto_partitions, int max_partition_size)
|
|||
gcc_assert (next_nodes.length () || npartitions != 1 || !best_cost || best_cost == -1);
|
||||
add_sorted_nodes (next_nodes, partition);
|
||||
|
||||
if (symtab->dump_file)
|
||||
if (dump_file)
|
||||
{
|
||||
fprintf (symtab->dump_file, "\nPartition sizes:\n");
|
||||
fprintf (dump_file, "\nPartition sizes:\n");
|
||||
unsigned partitions = ltrans_partitions.length ();
|
||||
|
||||
for (unsigned i = 0; i < partitions ; i++)
|
||||
{
|
||||
ltrans_partition p = ltrans_partitions[i];
|
||||
fprintf (symtab->dump_file, "partition %d contains %d (%2.2f%%)"
|
||||
fprintf (dump_file, "partition %d contains %d (%2.2f%%)"
|
||||
" symbols and %d (%2.2f%%) insns\n", i, p->symbols,
|
||||
100.0 * p->symbols / order.length (), p->insns,
|
||||
100.0 * p->insns / original_total_size);
|
||||
}
|
||||
|
||||
fprintf (symtab->dump_file, "\n");
|
||||
fprintf (dump_file, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -869,8 +869,8 @@ must_not_rename (symtab_node *node, const char *name)
|
|||
if (node->lto_file_data
|
||||
&& lto_get_decl_name_mapping (node->lto_file_data, name) != name)
|
||||
{
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file,
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Not privatizing symbol name: %s. It privatized already.\n",
|
||||
name);
|
||||
return true;
|
||||
|
|
@ -881,8 +881,8 @@ must_not_rename (symtab_node *node, const char *name)
|
|||
that are not really clones. */
|
||||
if (node->unique_name)
|
||||
{
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file,
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Not privatizing symbol name: %s. Has unique name.\n",
|
||||
name);
|
||||
return true;
|
||||
|
|
@ -972,8 +972,8 @@ privatize_symbol_name_1 (symtab_node *node, tree decl)
|
|||
IDENTIFIER_POINTER
|
||||
(DECL_ASSEMBLER_NAME (decl)));
|
||||
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file,
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Privatizing symbol name: %s -> %s\n",
|
||||
name, IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
|
||||
|
||||
|
|
@ -1018,8 +1018,8 @@ promote_symbol (symtab_node *node)
|
|||
TREE_PUBLIC (node->decl) = 1;
|
||||
DECL_VISIBILITY (node->decl) = VISIBILITY_HIDDEN;
|
||||
DECL_VISIBILITY_SPECIFIED (node->decl) = true;
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file,
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Promoting as hidden: %s (%s)\n", node->name (),
|
||||
IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (node->decl)));
|
||||
|
||||
|
|
@ -1035,8 +1035,8 @@ promote_symbol (symtab_node *node)
|
|||
TREE_PUBLIC (alias->decl) = 1;
|
||||
DECL_VISIBILITY (alias->decl) = VISIBILITY_HIDDEN;
|
||||
DECL_VISIBILITY_SPECIFIED (alias->decl) = true;
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file,
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Promoting alias as hidden: %s\n",
|
||||
IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (node->decl)));
|
||||
}
|
||||
|
|
@ -1102,8 +1102,8 @@ rename_statics (lto_symtab_encoder_t encoder, symtab_node *node)
|
|||
if (!s)
|
||||
return;
|
||||
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file,
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Renaming statics with asm name: %s\n", node->name ());
|
||||
|
||||
/* Assign every symbol in the set that shares the same ASM name an unique
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "ipa-utils.h"
|
||||
#include "builtins.h"
|
||||
#include "alias.h"
|
||||
#include "lto.h"
|
||||
#include "lto-symtab.h"
|
||||
#include "stringpool.h"
|
||||
#include "attribs.h"
|
||||
|
|
@ -45,9 +46,9 @@ lto_cgraph_replace_node (struct cgraph_node *node,
|
|||
struct cgraph_edge *e, *next;
|
||||
bool compatible_p;
|
||||
|
||||
if (symtab->dump_file)
|
||||
if (dump_file)
|
||||
{
|
||||
fprintf (symtab->dump_file, "Replacing cgraph node %s by %s"
|
||||
fprintf (dump_file, "Replacing cgraph node %s by %s"
|
||||
" for symbol %s\n",
|
||||
node->dump_name (),
|
||||
prevailing_node->dump_name (),
|
||||
|
|
@ -211,7 +212,7 @@ warn_type_compatibility_p (tree prevailing_type, tree type,
|
|||
if (TREE_CODE (type) != TREE_CODE (prevailing_type))
|
||||
lev |= 1;
|
||||
lev |= warn_type_compatibility_p (TREE_TYPE (prevailing_type),
|
||||
TREE_TYPE (type), false);
|
||||
TREE_TYPE (type), false);
|
||||
if (TREE_CODE (type) == METHOD_TYPE
|
||||
&& TREE_CODE (prevailing_type) == METHOD_TYPE)
|
||||
lev |= warn_type_compatibility_p (TYPE_METHOD_BASETYPE (prevailing_type),
|
||||
|
|
@ -271,7 +272,7 @@ warn_type_compatibility_p (tree prevailing_type, tree type,
|
|||
|
||||
if (set1 && set2 && set1 != set2)
|
||||
{
|
||||
tree t1 = type, t2 = prevailing_type;
|
||||
tree t1 = type, t2 = prevailing_type;
|
||||
|
||||
/* Alias sets of arrays with aliased components are the same as alias
|
||||
sets of the inner types. */
|
||||
|
|
@ -283,10 +284,10 @@ warn_type_compatibility_p (tree prevailing_type, tree type,
|
|||
t1 = TREE_TYPE (t1);
|
||||
t2 = TREE_TYPE (t2);
|
||||
}
|
||||
if ((!POINTER_TYPE_P (t1) || !POINTER_TYPE_P (t2))
|
||||
if ((!POINTER_TYPE_P (t1) || !POINTER_TYPE_P (t2))
|
||||
|| (set1 != TYPE_ALIAS_SET (ptr_type_node)
|
||||
&& set2 != TYPE_ALIAS_SET (ptr_type_node)))
|
||||
lev |= 5;
|
||||
lev |= 5;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -325,7 +326,7 @@ lto_symtab_merge (symtab_node *prevailing, symtab_node *entry)
|
|||
DECL_POSSIBLY_INLINED (decl) |= DECL_POSSIBLY_INLINED (prevailing_decl);
|
||||
|
||||
if (warn_type_compatibility_p (TREE_TYPE (prevailing_decl),
|
||||
TREE_TYPE (decl),
|
||||
TREE_TYPE (decl),
|
||||
DECL_COMMON (decl)
|
||||
|| DECL_EXTERNAL (decl)))
|
||||
return false;
|
||||
|
|
@ -536,8 +537,8 @@ lto_symtab_merge_p (tree prevailing, tree decl)
|
|||
{
|
||||
if (TREE_CODE (prevailing) != TREE_CODE (decl))
|
||||
{
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file, "Not merging decls; "
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not merging decls; "
|
||||
"TREE_CODE mismatch\n");
|
||||
return false;
|
||||
}
|
||||
|
|
@ -547,8 +548,8 @@ lto_symtab_merge_p (tree prevailing, tree decl)
|
|||
{
|
||||
if (DECL_BUILT_IN (prevailing) != DECL_BUILT_IN (decl))
|
||||
{
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file, "Not merging decls; "
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not merging decls; "
|
||||
"DECL_BUILT_IN mismatch\n");
|
||||
return false;
|
||||
}
|
||||
|
|
@ -556,8 +557,8 @@ lto_symtab_merge_p (tree prevailing, tree decl)
|
|||
&& (DECL_BUILT_IN_CLASS (prevailing) != DECL_BUILT_IN_CLASS (decl)
|
||||
|| DECL_FUNCTION_CODE (prevailing) != DECL_FUNCTION_CODE (decl)))
|
||||
{
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file, "Not merging decls; "
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not merging decls; "
|
||||
"DECL_BUILT_IN_CLASS or CODE mismatch\n");
|
||||
return false;
|
||||
}
|
||||
|
|
@ -572,8 +573,8 @@ lto_symtab_merge_p (tree prevailing, tree decl)
|
|||
if ((prev_attr == NULL) != (attr == NULL)
|
||||
|| (prev_attr && !attribute_value_equal (prev_attr, attr)))
|
||||
{
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file, "Not merging decls; "
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not merging decls; "
|
||||
"error attribute mismatch\n");
|
||||
return false;
|
||||
}
|
||||
|
|
@ -583,8 +584,8 @@ lto_symtab_merge_p (tree prevailing, tree decl)
|
|||
if ((prev_attr == NULL) != (attr == NULL)
|
||||
|| (prev_attr && !attribute_value_equal (prev_attr, attr)))
|
||||
{
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file, "Not merging decls; "
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not merging decls; "
|
||||
"warning attribute mismatch\n");
|
||||
return false;
|
||||
}
|
||||
|
|
@ -593,8 +594,8 @@ lto_symtab_merge_p (tree prevailing, tree decl)
|
|||
attr = lookup_attribute ("noreturn", DECL_ATTRIBUTES (decl));
|
||||
if ((prev_attr == NULL) != (attr == NULL))
|
||||
{
|
||||
if (symtab->dump_file)
|
||||
fprintf (symtab->dump_file, "Not merging decls; "
|
||||
if (dump_file)
|
||||
fprintf (dump_file, "Not merging decls; "
|
||||
"noreturn attribute mismatch\n");
|
||||
return false;
|
||||
}
|
||||
|
|
@ -631,7 +632,7 @@ lto_symtab_merge_decls_2 (symtab_node *first, bool diagnosed_p)
|
|||
visited. */
|
||||
if (lto_symtab_prevailing_decl (e->decl) != e->decl
|
||||
|| !lto_symtab_symbol_p (e)
|
||||
|| e->decl == prevailing->decl)
|
||||
|| e->decl == prevailing->decl)
|
||||
continue;
|
||||
|
||||
if (!lto_symtab_merge (prevailing, e)
|
||||
|
|
@ -683,9 +684,9 @@ lto_symtab_merge_decls_2 (symtab_node *first, bool diagnosed_p)
|
|||
FOR_EACH_VEC_ELT (mismatches, i, decl)
|
||||
{
|
||||
/* Do not diagnose two built-in declarations, there is no useful
|
||||
location in that case. It also happens for AVR if two built-ins
|
||||
use the same asm name because their libgcc assembler code is the
|
||||
same, see PR78562. */
|
||||
location in that case. It also happens for AVR if two built-ins
|
||||
use the same asm name because their libgcc assembler code is the
|
||||
same, see PR78562. */
|
||||
if (DECL_IS_BUILTIN (prevailing->decl)
|
||||
&& DECL_IS_BUILTIN (decl))
|
||||
continue;
|
||||
|
|
@ -719,7 +720,7 @@ lto_symtab_merge_decls_2 (symtab_node *first, bool diagnosed_p)
|
|||
diagnosed_p |= diag;
|
||||
}
|
||||
else if ((DECL_USER_ALIGN (prevailing->decl)
|
||||
&& DECL_USER_ALIGN (decl))
|
||||
&& DECL_USER_ALIGN (decl))
|
||||
&& DECL_ALIGN (prevailing->decl) < DECL_ALIGN (decl))
|
||||
{
|
||||
diagnosed_p |= warning_at (DECL_SOURCE_LOCATION (decl),
|
||||
|
|
@ -753,13 +754,13 @@ lto_symtab_merge_decls_1 (symtab_node *first)
|
|||
symtab_node *prevailing;
|
||||
bool diagnosed_p = false;
|
||||
|
||||
if (symtab->dump_file)
|
||||
if (dump_file)
|
||||
{
|
||||
fprintf (symtab->dump_file, "Merging nodes for %s. Candidates:\n",
|
||||
fprintf (dump_file, "Merging nodes for %s. Candidates:\n",
|
||||
first->asm_name ());
|
||||
for (e = first; e; e = e->next_sharing_asm_name)
|
||||
if (TREE_PUBLIC (e->decl))
|
||||
e->dump (symtab->dump_file);
|
||||
e->dump (dump_file);
|
||||
}
|
||||
|
||||
/* Compute the symbol resolutions. This is a no-op when using the
|
||||
|
|
@ -849,11 +850,11 @@ lto_symtab_merge_decls_1 (symtab_node *first)
|
|||
mismatches. */
|
||||
lto_symtab_merge_decls_2 (prevailing, diagnosed_p);
|
||||
|
||||
if (symtab->dump_file)
|
||||
if (dump_file)
|
||||
{
|
||||
fprintf (symtab->dump_file, "After resolution:\n");
|
||||
fprintf (dump_file, "After resolution:\n");
|
||||
for (e = prevailing; e; e = e->next_sharing_asm_name)
|
||||
e->dump (symtab->dump_file);
|
||||
e->dump (dump_file);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -864,6 +865,9 @@ lto_symtab_merge_decls (void)
|
|||
{
|
||||
symtab_node *node;
|
||||
|
||||
gcc_assert (!dump_file);
|
||||
dump_file = dump_begin (decl_merge_dump_id, NULL);
|
||||
|
||||
/* Populate assembler name hash. */
|
||||
symtab->symtab_initialize_asm_name_hash ();
|
||||
|
||||
|
|
@ -871,6 +875,10 @@ lto_symtab_merge_decls (void)
|
|||
if (!node->previous_sharing_asm_name
|
||||
&& node->next_sharing_asm_name)
|
||||
lto_symtab_merge_decls_1 (node);
|
||||
|
||||
if (dump_file)
|
||||
dump_end (decl_merge_dump_id, dump_file);
|
||||
dump_file = NULL;
|
||||
}
|
||||
|
||||
/* Helper to process the decl chain for the symbol table entry *SLOT. */
|
||||
|
|
@ -897,7 +905,7 @@ lto_symtab_merge_symbols_1 (symtab_node *prevailing)
|
|||
/* No matter how we are going to deal with resolution, we will ultimately
|
||||
use prevailing definition. */
|
||||
if (ce)
|
||||
ipa_merge_profiles (dyn_cast<cgraph_node *> (prevailing),
|
||||
ipa_merge_profiles (dyn_cast<cgraph_node *> (prevailing),
|
||||
dyn_cast<cgraph_node *> (e));
|
||||
|
||||
/* If we decided to replace the node by TO, do it. */
|
||||
|
|
@ -919,7 +927,7 @@ lto_symtab_merge_symbols_1 (symtab_node *prevailing)
|
|||
{
|
||||
lto_free_function_in_decl_state_for_node (ce);
|
||||
if (!ce->weakref)
|
||||
ce->release_body ();
|
||||
ce->release_body ();
|
||||
ce->reset ();
|
||||
symtab->call_cgraph_removal_hooks (ce);
|
||||
}
|
||||
|
|
@ -956,7 +964,7 @@ lto_symtab_merge_symbols (void)
|
|||
symtab->symtab_initialize_asm_name_hash ();
|
||||
|
||||
/* Do the actual merging.
|
||||
At this point we invalidate hash translating decls into symtab nodes
|
||||
At this point we invalidate hash translating decls into symtab nodes
|
||||
because after removing one of duplicate decls the hash is not correcly
|
||||
updated to the ohter dupliate. */
|
||||
FOR_EACH_SYMBOL (node)
|
||||
|
|
|
|||
|
|
@ -2972,29 +2972,43 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
|
|||
all_file_decl_data[i]->current_decl_state = NULL;
|
||||
}
|
||||
|
||||
/* Finally merge the cgraph according to the decl merging decisions. */
|
||||
timevar_push (TV_IPA_LTO_CGRAPH_MERGE);
|
||||
if (symtab->dump_file)
|
||||
{
|
||||
fprintf (symtab->dump_file, "Before merging:\n");
|
||||
symtab->dump (symtab->dump_file);
|
||||
}
|
||||
if (!flag_ltrans)
|
||||
{
|
||||
/* Finally merge the cgraph according to the decl merging decisions. */
|
||||
timevar_push (TV_IPA_LTO_CGRAPH_MERGE);
|
||||
|
||||
gcc_assert (!dump_file);
|
||||
dump_file = dump_begin (lto_link_dump_id, NULL);
|
||||
|
||||
if (dump_file)
|
||||
{
|
||||
fprintf (dump_file, "Before merging:\n");
|
||||
symtab->dump (dump_file);
|
||||
}
|
||||
lto_symtab_merge_symbols ();
|
||||
/* Removal of unreachable symbols is needed to make verify_symtab to pass;
|
||||
we are still having duplicated comdat groups containing local statics.
|
||||
We could also just remove them while merging. */
|
||||
symtab->remove_unreachable_nodes (dump_file);
|
||||
}
|
||||
ggc_collect ();
|
||||
symtab->state = IPA_SSA;
|
||||
/* FIXME: Technically all node removals happening here are useless, because
|
||||
WPA should not stream them. */
|
||||
if (flag_ltrans)
|
||||
symtab->remove_unreachable_nodes (dump_file);
|
||||
ggc_collect ();
|
||||
|
||||
timevar_pop (TV_IPA_LTO_CGRAPH_MERGE);
|
||||
if (dump_file)
|
||||
dump_end (lto_link_dump_id, dump_file);
|
||||
dump_file = NULL;
|
||||
timevar_pop (TV_IPA_LTO_CGRAPH_MERGE);
|
||||
}
|
||||
symtab->state = IPA_SSA;
|
||||
/* All node removals happening here are useless, because
|
||||
WPA should not stream them. Still always perform remove_unreachable_nodes
|
||||
because we may reshape clone tree, get rid of dead masters of inline
|
||||
clones and remove symbol entries for read-only variables we keep around
|
||||
only to be able to constant fold them. */
|
||||
if (flag_ltrans)
|
||||
{
|
||||
if (symtab->dump_file)
|
||||
symtab->dump (symtab->dump_file);
|
||||
symtab->remove_unreachable_nodes (symtab->dump_file);
|
||||
}
|
||||
|
||||
/* Indicate that the cgraph is built and ready. */
|
||||
symtab->function_flags_ready = true;
|
||||
|
|
@ -3152,19 +3166,19 @@ do_whole_program_analysis (void)
|
|||
if (seen_error ())
|
||||
return;
|
||||
|
||||
if (symtab->dump_file)
|
||||
{
|
||||
fprintf (symtab->dump_file, "Optimized ");
|
||||
symtab->dump (symtab->dump_file);
|
||||
}
|
||||
|
||||
symtab_node::checking_verify_symtab_nodes ();
|
||||
bitmap_obstack_release (NULL);
|
||||
|
||||
/* We are about to launch the final LTRANS phase, stop the WPA timer. */
|
||||
timevar_pop (TV_WHOPR_WPA);
|
||||
|
||||
timevar_push (TV_WHOPR_PARTITIONING);
|
||||
|
||||
gcc_assert (!dump_file);
|
||||
dump_file = dump_begin (partition_dump_id, NULL);
|
||||
|
||||
if (dump_file)
|
||||
symtab->dump (dump_file);
|
||||
|
||||
symtab_node::checking_verify_symtab_nodes ();
|
||||
bitmap_obstack_release (NULL);
|
||||
if (flag_lto_partition == LTO_PARTITION_1TO1)
|
||||
lto_1_to_1_map ();
|
||||
else if (flag_lto_partition == LTO_PARTITION_MAX)
|
||||
|
|
@ -3192,6 +3206,9 @@ do_whole_program_analysis (void)
|
|||
to globals with hidden visibility because they are accessed from multiple
|
||||
partitions. */
|
||||
lto_promote_cross_file_statics ();
|
||||
if (dump_file)
|
||||
dump_end (partition_dump_id, dump_file);
|
||||
dump_file = NULL;
|
||||
timevar_pop (TV_WHOPR_PARTITIONING);
|
||||
|
||||
timevar_stop (TV_PHASE_OPT_GEN);
|
||||
|
|
|
|||
|
|
@ -51,6 +51,8 @@ extern void lto_obj_end_section (void);
|
|||
extern lto_file *lto_set_current_out_file (lto_file *file);
|
||||
extern lto_file *lto_get_current_out_file (void);
|
||||
|
||||
extern int lto_link_dump_id, decl_merge_dump_id, partition_dump_id;
|
||||
|
||||
/* Hash table entry to hold the start offset and length of an LTO
|
||||
section in a .o file. */
|
||||
struct lto_section_slot
|
||||
|
|
|
|||
Loading…
Reference in New Issue