Fix GNU coding style in lto-common.c.
2019-05-06 Martin Liska <mliska@suse.cz> * lto-common.c: Update coding style. * lto.c (materialize_cgraph): Likewise. From-SVN: r270898
This commit is contained in:
parent
66d62d9f2e
commit
ee7a003f97
3 changed files with 133 additions and 116 deletions
|
@ -1,3 +1,8 @@
|
|||
2019-05-06 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* lto-common.c: Update coding style.
|
||||
* lto.c (materialize_cgraph): Likewise.
|
||||
|
||||
2019-05-06 Hrishikesh Kulkarni <hrishikeshparag@gmail.com>
|
||||
Martin Liska <mliska@suse.cz>
|
||||
|
||||
|
|
|
@ -76,15 +76,15 @@ hash_name (const void *p)
|
|||
static int
|
||||
eq_name (const void *p1, const void *p2)
|
||||
{
|
||||
const struct lto_section_slot *s1 =
|
||||
(const struct lto_section_slot *) p1;
|
||||
const struct lto_section_slot *s2 =
|
||||
(const struct lto_section_slot *) p2;
|
||||
const struct lto_section_slot *s1
|
||||
= (const struct lto_section_slot *) p1;
|
||||
const struct lto_section_slot *s2
|
||||
= (const struct lto_section_slot *) p2;
|
||||
|
||||
return strcmp (s1->name, s2->name) == 0;
|
||||
}
|
||||
|
||||
/* Free lto_section_slot */
|
||||
/* Free lto_section_slot. */
|
||||
|
||||
static void
|
||||
free_with_string (void *arg)
|
||||
|
@ -95,9 +95,9 @@ free_with_string (void *arg)
|
|||
free (arg);
|
||||
}
|
||||
|
||||
/* Create section hash table */
|
||||
/* Create section hash table. */
|
||||
|
||||
htab_t
|
||||
htab_t
|
||||
lto_obj_create_section_hash_table (void)
|
||||
{
|
||||
return htab_create (37, hash_name, eq_name, free_with_string);
|
||||
|
@ -145,9 +145,9 @@ lto_splay_tree_id_equal_p (splay_tree_key key, unsigned HOST_WIDE_INT id)
|
|||
return *(unsigned HOST_WIDE_INT *) key == id;
|
||||
}
|
||||
|
||||
/* Insert a splay tree node into tree T with ID as key and FILE_DATA as value.
|
||||
/* Insert a splay tree node into tree T with ID as key and FILE_DATA as value.
|
||||
The ID is allocated separately because we need HOST_WIDE_INTs which may
|
||||
be wider than a splay_tree_key. */
|
||||
be wider than a splay_tree_key. */
|
||||
|
||||
static void
|
||||
lto_splay_tree_insert (splay_tree t, unsigned HOST_WIDE_INT id,
|
||||
|
@ -164,13 +164,13 @@ static splay_tree
|
|||
lto_splay_tree_new (void)
|
||||
{
|
||||
return splay_tree_new (lto_splay_tree_compare_ids,
|
||||
lto_splay_tree_delete_id,
|
||||
lto_splay_tree_delete_id,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/* Decode the content of memory pointed to by DATA in the in decl
|
||||
state object STATE. DATA_IN points to a data_in structure for
|
||||
decoding. Return the address after the decoded object in the
|
||||
state object STATE. DATA_IN points to a data_in structure for
|
||||
decoding. Return the address after the decoded object in the
|
||||
input. */
|
||||
|
||||
static const uint32_t *
|
||||
|
@ -255,7 +255,7 @@ hash_canonical_type (tree type)
|
|||
{
|
||||
hstate.add_int (TYPE_PRECISION (type));
|
||||
if (!type_with_interoperable_signedness (type))
|
||||
hstate.add_int (TYPE_UNSIGNED (type));
|
||||
hstate.add_int (TYPE_UNSIGNED (type));
|
||||
}
|
||||
|
||||
if (VECTOR_TYPE_P (type))
|
||||
|
@ -437,8 +437,8 @@ gimple_register_canonical_type (tree t)
|
|||
TYPE_CANONICAL (t) = TYPE_CANONICAL (TYPE_MAIN_VARIANT (t));
|
||||
else
|
||||
{
|
||||
gimple_register_canonical_type_1 (TYPE_MAIN_VARIANT (t),
|
||||
hash_canonical_type (TYPE_MAIN_VARIANT (t)));
|
||||
hashval_t h = hash_canonical_type (TYPE_MAIN_VARIANT (t));
|
||||
gimple_register_canonical_type_1 (TYPE_MAIN_VARIANT (t), h);
|
||||
TYPE_CANONICAL (t) = TYPE_CANONICAL (TYPE_MAIN_VARIANT (t));
|
||||
}
|
||||
}
|
||||
|
@ -460,7 +460,7 @@ lto_register_canonical_types (tree node, bool first_p)
|
|||
|| TREE_CODE (node) == ARRAY_TYPE)
|
||||
lto_register_canonical_types (TREE_TYPE (node), first_p);
|
||||
|
||||
if (!first_p)
|
||||
if (!first_p)
|
||||
gimple_register_canonical_type (node);
|
||||
}
|
||||
|
||||
|
@ -534,7 +534,7 @@ mentions_vars_p_decl_with_vis (tree t)
|
|||
if (mentions_vars_p_decl_common (t))
|
||||
return true;
|
||||
|
||||
/* Accessor macro has side-effects, use field-name here. */
|
||||
/* Accessor macro has side-effects, use field-name here. */
|
||||
CHECK_NO_VAR (DECL_ASSEMBLER_NAME_RAW (t));
|
||||
return false;
|
||||
}
|
||||
|
@ -594,7 +594,7 @@ mentions_vars_p_type (tree t)
|
|||
CHECK_VAR (TYPE_MIN_VALUE_RAW (t));
|
||||
CHECK_VAR (TYPE_MAX_VALUE_RAW (t));
|
||||
|
||||
/* Accessor is for derived node types only. */
|
||||
/* Accessor is for derived node types only. */
|
||||
CHECK_NO_VAR (TYPE_LANG_SLOT_1 (t));
|
||||
|
||||
CHECK_VAR (TYPE_CONTEXT (t));
|
||||
|
@ -748,7 +748,7 @@ mentions_vars_p (tree t)
|
|||
}
|
||||
|
||||
|
||||
/* Return the resolution for the decl with index INDEX from DATA_IN. */
|
||||
/* Return the resolution for the decl with index INDEX from DATA_IN. */
|
||||
|
||||
static enum ld_plugin_symbol_resolution
|
||||
get_resolution (struct data_in *data_in, unsigned index)
|
||||
|
@ -758,7 +758,7 @@ get_resolution (struct data_in *data_in, unsigned index)
|
|||
ld_plugin_symbol_resolution_t ret;
|
||||
/* We can have references to not emitted functions in
|
||||
DECL_FUNCTION_PERSONALITY at least. So we can and have
|
||||
to indeed return LDPR_UNKNOWN in some cases. */
|
||||
to indeed return LDPR_UNKNOWN in some cases. */
|
||||
if (data_in->globals_resolution.length () <= index)
|
||||
return LDPR_UNKNOWN;
|
||||
ret = data_in->globals_resolution[index];
|
||||
|
@ -1090,7 +1090,7 @@ compare_tree_sccs_1 (tree t1, tree t2, tree **map)
|
|||
if (code == VAR_DECL)
|
||||
{
|
||||
compare_values (DECL_HARD_REGISTER);
|
||||
/* DECL_IN_TEXT_SECTION is set during final asm output only. */
|
||||
/* DECL_IN_TEXT_SECTION is set during final asm output only. */
|
||||
compare_values (DECL_IN_CONSTANT_POOL);
|
||||
}
|
||||
}
|
||||
|
@ -1143,8 +1143,8 @@ compare_tree_sccs_1 (tree t1, tree t2, tree **map)
|
|||
compare_values (TYPE_PRECISION);
|
||||
compare_values (TYPE_ALIGN);
|
||||
/* Do not compare TYPE_ALIAS_SET. Doing so introduce ordering issues
|
||||
with calls to get_alias_set which may initialize it for streamed
|
||||
in types. */
|
||||
with calls to get_alias_set which may initialize it for streamed
|
||||
in types. */
|
||||
}
|
||||
|
||||
/* We don't want to compare locations, so there is nothing do compare
|
||||
|
@ -1479,7 +1479,7 @@ compare_tree_sccs (tree_scc *pscc, tree_scc *scc,
|
|||
return true;
|
||||
}
|
||||
/* Reset TREE_ASM_WRITTEN on scc for the next compare or in case
|
||||
the SCC prevails. */
|
||||
the SCC prevails. */
|
||||
for (unsigned j = 0; j < scc->len; ++j)
|
||||
TREE_ASM_WRITTEN (scc->entries[j]) = 0;
|
||||
}
|
||||
|
@ -1582,7 +1582,7 @@ unify_scc (struct data_in *data_in, unsigned from,
|
|||
if (len == 1)
|
||||
{
|
||||
/* If we got a debug reference queued, see if the prevailing
|
||||
tree has a debug reference and if not, register the one
|
||||
tree has a debug reference and if not, register the one
|
||||
for the tree we are about to throw away. */
|
||||
if (dref_queue.length () == 1)
|
||||
{
|
||||
|
@ -1807,19 +1807,19 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data,
|
|||
data_in->location_cache.apply_location_cache ();
|
||||
|
||||
/* Read in lto_in_decl_state objects. */
|
||||
data_ptr = (const uint32_t *) ((const char*) data + decl_offset);
|
||||
data_end =
|
||||
(const uint32_t *) ((const char*) data_ptr + header->decl_state_size);
|
||||
data_ptr = (const uint32_t *) ((const char*) data + decl_offset);
|
||||
data_end
|
||||
= (const uint32_t *) ((const char*) data_ptr + header->decl_state_size);
|
||||
num_decl_states = *data_ptr++;
|
||||
|
||||
|
||||
gcc_assert (num_decl_states > 0);
|
||||
decl_data->global_decl_state = lto_new_in_decl_state ();
|
||||
data_ptr = lto_read_in_decl_state (data_in, data_ptr,
|
||||
decl_data->global_decl_state);
|
||||
|
||||
/* Read in per-function decl states and enter them in hash table. */
|
||||
decl_data->function_decl_states =
|
||||
hash_table<decl_state_hasher>::create_ggc (37);
|
||||
decl_data->function_decl_states
|
||||
= hash_table<decl_state_hasher>::create_ggc (37);
|
||||
|
||||
for (i = 1; i < num_decl_states; i++)
|
||||
{
|
||||
|
@ -1835,7 +1835,7 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data,
|
|||
if (data_ptr != data_end)
|
||||
internal_error ("bytecode stream: garbage at the end of symbols section");
|
||||
|
||||
/* Set the current decl state to be the global state. */
|
||||
/* Set the current decl state to be the global state. */
|
||||
decl_data->current_decl_state = decl_data->global_decl_state;
|
||||
|
||||
lto_data_in_delete (data_in);
|
||||
|
@ -1854,40 +1854,40 @@ lto_parse_hex (const char *p)
|
|||
unsigned char part;
|
||||
ret <<= 4;
|
||||
if (c >= '0' && c <= '9')
|
||||
part = c - '0';
|
||||
part = c - '0';
|
||||
else if (c >= 'a' && c <= 'f')
|
||||
part = c - 'a' + 10;
|
||||
part = c - 'a' + 10;
|
||||
else if (c >= 'A' && c <= 'F')
|
||||
part = c - 'A' + 10;
|
||||
part = c - 'A' + 10;
|
||||
else
|
||||
internal_error ("could not parse hex number");
|
||||
internal_error ("could not parse hex number");
|
||||
ret |= part;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Read resolution for file named FILE_NAME. The resolution is read from
|
||||
RESOLUTION. */
|
||||
/* Read resolution for file named FILE_NAME. The resolution is read from
|
||||
RESOLUTION. */
|
||||
|
||||
static void
|
||||
lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file)
|
||||
{
|
||||
/* We require that objects in the resolution file are in the same
|
||||
order as the lto1 command line. */
|
||||
order as the lto1 command line. */
|
||||
unsigned int name_len;
|
||||
char *obj_name;
|
||||
unsigned int num_symbols;
|
||||
unsigned int i;
|
||||
struct lto_file_decl_data *file_data;
|
||||
splay_tree_node nd = NULL;
|
||||
splay_tree_node nd = NULL;
|
||||
|
||||
if (!resolution)
|
||||
return;
|
||||
|
||||
name_len = strlen (file->filename);
|
||||
obj_name = XNEWVEC (char, name_len + 1);
|
||||
fscanf (resolution, " "); /* Read white space. */
|
||||
fscanf (resolution, " "); /* Read white space. */
|
||||
|
||||
fread (obj_name, sizeof (char), name_len, resolution);
|
||||
obj_name[name_len] = '\0';
|
||||
|
@ -1901,10 +1901,10 @@ lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file)
|
|||
int64_t offset;
|
||||
t = fscanf (resolution, "@0x%16s", offset_p);
|
||||
if (t != 1)
|
||||
internal_error ("could not parse file offset");
|
||||
internal_error ("could not parse file offset");
|
||||
offset = lto_parse_hex (offset_p);
|
||||
if (offset != file->offset)
|
||||
internal_error ("unexpected offset");
|
||||
internal_error ("unexpected offset");
|
||||
}
|
||||
|
||||
free (obj_name);
|
||||
|
@ -1919,14 +1919,14 @@ lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file)
|
|||
char r_str[27];
|
||||
enum ld_plugin_symbol_resolution r = (enum ld_plugin_symbol_resolution) 0;
|
||||
unsigned int j;
|
||||
unsigned int lto_resolution_str_len =
|
||||
sizeof (lto_resolution_str) / sizeof (char *);
|
||||
unsigned int lto_resolution_str_len
|
||||
= sizeof (lto_resolution_str) / sizeof (char *);
|
||||
res_pair rp;
|
||||
|
||||
t = fscanf (resolution, "%u " HOST_WIDE_INT_PRINT_HEX_PURE " %26s %*[^\n]\n",
|
||||
&index, &id, r_str);
|
||||
t = fscanf (resolution, "%u " HOST_WIDE_INT_PRINT_HEX_PURE
|
||||
" %26s %*[^\n]\n", &index, &id, r_str);
|
||||
if (t != 3)
|
||||
internal_error ("invalid line in the resolution file");
|
||||
internal_error ("invalid line in the resolution file");
|
||||
|
||||
for (j = 0; j < lto_resolution_str_len; j++)
|
||||
{
|
||||
|
@ -1947,25 +1947,25 @@ lto_resolution_read (splay_tree file_ids, FILE *resolution, lto_file *file)
|
|||
}
|
||||
|
||||
file_data = (struct lto_file_decl_data *)nd->value;
|
||||
/* The indexes are very sparse. To save memory save them in a compact
|
||||
format that is only unpacked later when the subfile is processed. */
|
||||
/* The indexes are very sparse. To save memory save them in a compact
|
||||
format that is only unpacked later when the subfile is processed. */
|
||||
rp.res = r;
|
||||
rp.index = index;
|
||||
file_data->respairs.safe_push (rp);
|
||||
if (file_data->max_index < index)
|
||||
file_data->max_index = index;
|
||||
file_data->max_index = index;
|
||||
}
|
||||
}
|
||||
|
||||
/* List of file_decl_datas */
|
||||
/* List of file_decl_datas. */
|
||||
struct file_data_list
|
||||
{
|
||||
struct lto_file_decl_data *first, *last;
|
||||
};
|
||||
{
|
||||
struct lto_file_decl_data *first, *last;
|
||||
};
|
||||
|
||||
/* Is the name for a id'ed LTO section? */
|
||||
|
||||
static int
|
||||
static int
|
||||
lto_section_with_id (const char *name, unsigned HOST_WIDE_INT *id)
|
||||
{
|
||||
const char *s;
|
||||
|
@ -1981,11 +1981,11 @@ lto_section_with_id (const char *name, unsigned HOST_WIDE_INT *id)
|
|||
return sscanf (s, "." HOST_WIDE_INT_PRINT_HEX_PURE, id) == 1;
|
||||
}
|
||||
|
||||
/* Create file_data of each sub file id */
|
||||
/* Create file_data of each sub file id. */
|
||||
|
||||
static int
|
||||
static int
|
||||
create_subid_section_table (struct lto_section_slot *ls, splay_tree file_ids,
|
||||
struct file_data_list *list)
|
||||
struct file_data_list *list)
|
||||
{
|
||||
struct lto_section_slot s_slot, *new_slot;
|
||||
unsigned HOST_WIDE_INT id;
|
||||
|
@ -1996,8 +1996,8 @@ create_subid_section_table (struct lto_section_slot *ls, splay_tree file_ids,
|
|||
|
||||
if (!lto_section_with_id (ls->name, &id))
|
||||
return 1;
|
||||
|
||||
/* Find hash table of sub module id */
|
||||
|
||||
/* Find hash table of sub module id. */
|
||||
nd = lto_splay_tree_lookup (file_ids, id);
|
||||
if (nd != NULL)
|
||||
{
|
||||
|
@ -2011,15 +2011,16 @@ create_subid_section_table (struct lto_section_slot *ls, splay_tree file_ids,
|
|||
file_data->section_hash_table = lto_obj_create_section_hash_table ();
|
||||
lto_splay_tree_insert (file_ids, id, file_data);
|
||||
|
||||
/* Maintain list in linker order */
|
||||
/* Maintain list in linker order. */
|
||||
if (!list->first)
|
||||
list->first = file_data;
|
||||
list->first = file_data;
|
||||
if (list->last)
|
||||
list->last->next = file_data;
|
||||
list->last->next = file_data;
|
||||
|
||||
list->last = file_data;
|
||||
}
|
||||
|
||||
/* Copy section into sub module hash table */
|
||||
/* Copy section into sub module hash table. */
|
||||
new_name = XDUPVEC (char, ls->name, strlen (ls->name) + 1);
|
||||
s_slot.name = new_name;
|
||||
hash_slot = htab_find_slot (file_data->section_hash_table, &s_slot, INSERT);
|
||||
|
@ -2031,7 +2032,7 @@ create_subid_section_table (struct lto_section_slot *ls, splay_tree file_ids,
|
|||
return 1;
|
||||
}
|
||||
|
||||
/* Read declarations and other initializations for a FILE_DATA. */
|
||||
/* Read declarations and other initializations for a FILE_DATA. */
|
||||
|
||||
static void
|
||||
lto_file_finalize (struct lto_file_decl_data *file_data, lto_file *file)
|
||||
|
@ -2043,8 +2044,8 @@ lto_file_finalize (struct lto_file_decl_data *file_data, lto_file *file)
|
|||
int i;
|
||||
res_pair *rp;
|
||||
|
||||
/* Create vector for fast access of resolution. We do this lazily
|
||||
to save memory. */
|
||||
/* Create vector for fast access of resolution. We do this lazily
|
||||
to save memory. */
|
||||
resolutions.safe_grow_cleared (file_data->max_index + 1);
|
||||
for (i = 0; file_data->respairs.iterate (i, &rp); i++)
|
||||
resolutions[rp->index] = rp->res;
|
||||
|
@ -2063,14 +2064,14 @@ lto_file_finalize (struct lto_file_decl_data *file_data, lto_file *file)
|
|||
internal_error ("cannot read LTO decls from %s", file_data->file_name);
|
||||
return;
|
||||
}
|
||||
/* Frees resolutions */
|
||||
/* Frees resolutions. */
|
||||
lto_read_decls (file_data, data, resolutions);
|
||||
lto_free_section_data (file_data, LTO_section_decls, NULL, data, len);
|
||||
}
|
||||
|
||||
/* Finalize FILE_DATA in FILE and increase COUNT. */
|
||||
/* Finalize FILE_DATA in FILE and increase COUNT. */
|
||||
|
||||
static int
|
||||
static int
|
||||
lto_create_files_from_ids (lto_file *file, struct lto_file_decl_data *file_data,
|
||||
int *count)
|
||||
{
|
||||
|
@ -2084,11 +2085,11 @@ lto_create_files_from_ids (lto_file *file, struct lto_file_decl_data *file_data,
|
|||
}
|
||||
|
||||
/* Generate a TREE representation for all types and external decls
|
||||
entities in FILE.
|
||||
entities in FILE.
|
||||
|
||||
Read all of the globals out of the file. Then read the cgraph
|
||||
and process the .o index into the cgraph nodes so that it can open
|
||||
the .o file to load the functions and ipa information. */
|
||||
the .o file to load the functions and ipa information. */
|
||||
|
||||
static struct lto_file_decl_data *
|
||||
lto_file_read (lto_file *file, FILE *resolution_file, int *count)
|
||||
|
@ -2099,8 +2100,8 @@ lto_file_read (lto_file *file, FILE *resolution_file, int *count)
|
|||
struct lto_section_slot *section;
|
||||
struct file_data_list file_list;
|
||||
struct lto_section_list section_list;
|
||||
|
||||
memset (§ion_list, 0, sizeof (struct lto_section_list));
|
||||
|
||||
memset (§ion_list, 0, sizeof (struct lto_section_list));
|
||||
section_hash_table = lto_obj_build_section_table (file, §ion_list);
|
||||
|
||||
/* Dump the details of LTO objects. */
|
||||
|
@ -2115,19 +2116,20 @@ lto_file_read (lto_file *file, FILE *resolution_file, int *count)
|
|||
}
|
||||
|
||||
/* Find all sub modules in the object and put their sections into new hash
|
||||
tables in a splay tree. */
|
||||
tables in a splay tree. */
|
||||
file_ids = lto_splay_tree_new ();
|
||||
memset (&file_list, 0, sizeof (struct file_data_list));
|
||||
for (section = section_list.first; section != NULL; section = section->next)
|
||||
create_subid_section_table (section, file_ids, &file_list);
|
||||
|
||||
/* Add resolutions to file ids */
|
||||
/* Add resolutions to file ids. */
|
||||
lto_resolution_read (file_ids, resolution_file, file);
|
||||
|
||||
/* Finalize each lto file for each submodule in the merged object */
|
||||
for (file_data = file_list.first; file_data != NULL; file_data = file_data->next)
|
||||
/* Finalize each lto file for each submodule in the merged object. */
|
||||
for (file_data = file_list.first; file_data != NULL;
|
||||
file_data = file_data->next)
|
||||
lto_create_files_from_ids (file, file_data, count);
|
||||
|
||||
|
||||
splay_tree_delete (file_ids);
|
||||
htab_delete (section_hash_table);
|
||||
|
||||
|
@ -2176,10 +2178,10 @@ lto_read_section_data (struct lto_file_decl_data *file_data,
|
|||
{
|
||||
fd = open (file_data->file_name, O_RDONLY|O_BINARY);
|
||||
if (fd == -1)
|
||||
{
|
||||
{
|
||||
fatal_error (input_location, "Cannot open %s", file_data->file_name);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
fd_name = xstrdup (file_data->file_name);
|
||||
}
|
||||
|
||||
|
@ -2213,8 +2215,8 @@ lto_read_section_data (struct lto_file_decl_data *file_data,
|
|||
result = NULL;
|
||||
}
|
||||
#ifdef __MINGW32__
|
||||
/* Native windows doesn't supports delayed unlink on opened file. So
|
||||
we close file here again. This produces higher I/O load, but at least
|
||||
/* Native windows doesn't supports delayed unlink on opened file. So
|
||||
we close file here again. This produces higher I/O load, but at least
|
||||
it prevents to have dangling file handles preventing unlink. */
|
||||
free (fd_name);
|
||||
fd_name = NULL;
|
||||
|
@ -2223,7 +2225,7 @@ lto_read_section_data (struct lto_file_decl_data *file_data,
|
|||
#endif
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Get the section data from FILE_DATA of SECTION_TYPE with NAME.
|
||||
|
@ -2239,7 +2241,8 @@ get_section_data (struct lto_file_decl_data *file_data,
|
|||
htab_t section_hash_table = file_data->section_hash_table;
|
||||
struct lto_section_slot *f_slot;
|
||||
struct lto_section_slot s_slot;
|
||||
const char *section_name = lto_get_section_name (section_type, name, file_data);
|
||||
const char *section_name = lto_get_section_name (section_type, name,
|
||||
file_data);
|
||||
char *data = NULL;
|
||||
|
||||
*len = 0;
|
||||
|
@ -2291,7 +2294,7 @@ static lto_file *current_lto_file;
|
|||
if ((tt) && VAR_OR_FUNCTION_DECL_P (tt) \
|
||||
&& (TREE_PUBLIC (tt) || DECL_EXTERNAL (tt))) \
|
||||
{ \
|
||||
tt = lto_symtab_prevailing_decl (tt); \
|
||||
tt = lto_symtab_prevailing_decl (tt); \
|
||||
fixed = true; \
|
||||
} \
|
||||
} while (0)
|
||||
|
@ -2312,7 +2315,7 @@ lto_fixup_prevailing_decls (tree t)
|
|||
LTO_NO_PREVAIL (TREE_TYPE (t));
|
||||
if (CODE_CONTAINS_STRUCT (code, TS_COMMON)
|
||||
/* lto_symtab_prevail_decl use TREE_CHAIN to link to the prevailing decl.
|
||||
in the case T is a prevailed declaration we would ICE here. */
|
||||
in the case T is a prevailed declaration we would ICE here. */
|
||||
&& !VAR_OR_FUNCTION_DECL_P (t))
|
||||
LTO_NO_PREVAIL (TREE_CHAIN (t));
|
||||
if (DECL_P (t))
|
||||
|
@ -2401,7 +2404,7 @@ lto_fixup_prevailing_decls (tree t)
|
|||
#undef LTO_SET_PREVAIL
|
||||
#undef LTO_NO_PREVAIL
|
||||
|
||||
/* Helper function of lto_fixup_decls. Walks the var and fn streams in STATE,
|
||||
/* Helper function of lto_fixup_decls. Walks the var and fn streams in STATE,
|
||||
replaces var and function decls with the corresponding prevailing def. */
|
||||
|
||||
static void
|
||||
|
@ -2427,7 +2430,7 @@ lto_fixup_state (struct lto_in_decl_state *state)
|
|||
}
|
||||
}
|
||||
|
||||
/* Fix the decls from all FILES. Replaces each decl with the corresponding
|
||||
/* Fix the decls from all FILES. Replaces each decl with the corresponding
|
||||
prevailing one. */
|
||||
|
||||
static void
|
||||
|
@ -2457,10 +2460,11 @@ lto_fixup_decls (struct lto_file_decl_data **files)
|
|||
static GTY((length ("lto_stats.num_input_files + 1"))) struct lto_file_decl_data **all_file_decl_data;
|
||||
|
||||
/* Turn file datas for sub files into a single array, so that they look
|
||||
like separate files for further passes. */
|
||||
like separate files for further passes. */
|
||||
|
||||
static void
|
||||
lto_flatten_files (struct lto_file_decl_data **orig, int count, int last_file_ix)
|
||||
lto_flatten_files (struct lto_file_decl_data **orig, int count,
|
||||
int last_file_ix)
|
||||
{
|
||||
struct lto_file_decl_data *n, *next;
|
||||
int i, k;
|
||||
|
@ -2470,7 +2474,7 @@ lto_flatten_files (struct lto_file_decl_data **orig, int count, int last_file_ix
|
|||
= ggc_cleared_vec_alloc<lto_file_decl_data_ptr> (count + 1);
|
||||
/* Set the hooks so that all of the ipa passes can read in their data. */
|
||||
lto_set_in_hooks (all_file_decl_data, get_section_data, free_section_data);
|
||||
for (i = 0, k = 0; i < last_file_ix; i++)
|
||||
for (i = 0, k = 0; i < last_file_ix; i++)
|
||||
{
|
||||
for (n = orig[i]; n != NULL; n = next)
|
||||
{
|
||||
|
@ -2613,7 +2617,7 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
|
|||
delete canonical_type_hash_cache;
|
||||
canonical_type_hash_cache = NULL;
|
||||
|
||||
/* At this stage we know that majority of GGC memory is reachable.
|
||||
/* At this stage we know that majority of GGC memory is reachable.
|
||||
Growing the limits prevents unnecesary invocation of GGC. */
|
||||
ggc_grow ();
|
||||
ggc_collect ();
|
||||
|
@ -2648,19 +2652,19 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
|
|||
{
|
||||
if (snode->output_to_lto_symbol_table_p ())
|
||||
fatal_error (input_location, "missing resolution data for %s",
|
||||
IDENTIFIER_POINTER
|
||||
IDENTIFIER_POINTER
|
||||
(DECL_ASSEMBLER_NAME (snode->decl)));
|
||||
}
|
||||
else
|
||||
snode->resolution = *res;
|
||||
snode->resolution = *res;
|
||||
}
|
||||
for (i = 0; all_file_decl_data[i]; i++)
|
||||
if (all_file_decl_data[i]->resolution_map)
|
||||
{
|
||||
delete all_file_decl_data[i]->resolution_map;
|
||||
all_file_decl_data[i]->resolution_map = NULL;
|
||||
delete all_file_decl_data[i]->resolution_map;
|
||||
all_file_decl_data[i]->resolution_map = NULL;
|
||||
}
|
||||
|
||||
|
||||
timevar_pop (TV_IPA_LTO_CGRAPH_IO);
|
||||
|
||||
if (!quiet_flag)
|
||||
|
@ -2706,9 +2710,11 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
|
|||
gcc_assert (all_file_decl_data[i]->symtab_node_encoder);
|
||||
lto_symtab_encoder_delete (all_file_decl_data[i]->symtab_node_encoder);
|
||||
all_file_decl_data[i]->symtab_node_encoder = NULL;
|
||||
lto_free_function_in_decl_state (all_file_decl_data[i]->global_decl_state);
|
||||
lto_in_decl_state *global_decl_state
|
||||
= all_file_decl_data[i]->global_decl_state;
|
||||
lto_free_function_in_decl_state (global_decl_state);
|
||||
all_file_decl_data[i]->global_decl_state = NULL;
|
||||
all_file_decl_data[i]->current_decl_state = NULL;
|
||||
all_file_decl_data[i]->current_decl_state = NULL;
|
||||
}
|
||||
|
||||
if (!flag_ltrans)
|
||||
|
@ -2732,7 +2738,7 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
|
|||
ggc_collect ();
|
||||
|
||||
if (dump_file)
|
||||
dump_end (lto_link_dump_id, dump_file);
|
||||
dump_end (lto_link_dump_id, dump_file);
|
||||
dump_file = NULL;
|
||||
timevar_pop (TV_IPA_LTO_CGRAPH_MERGE);
|
||||
}
|
||||
|
@ -2838,9 +2844,9 @@ lto_eh_personality (void)
|
|||
return lto_eh_personality_decl;
|
||||
}
|
||||
|
||||
/* Set the process name based on the LTO mode. */
|
||||
/* Set the process name based on the LTO mode. */
|
||||
|
||||
static void
|
||||
static void
|
||||
lto_process_name (void)
|
||||
{
|
||||
if (flag_lto)
|
||||
|
|
|
@ -118,7 +118,7 @@ lto_materialize_function (struct cgraph_node *node)
|
|||
static void
|
||||
materialize_cgraph (void)
|
||||
{
|
||||
struct cgraph_node *node;
|
||||
struct cgraph_node *node;
|
||||
timevar_id_t lto_timer;
|
||||
|
||||
if (!quiet_flag)
|
||||
|
@ -252,7 +252,7 @@ stream_out_partitions (char *temp_filename, int blen, int min, int max,
|
|||
}
|
||||
/* Fork failed; lets do the job ourseleves. */
|
||||
else if (cpid == -1)
|
||||
stream_out_partitions_1 (temp_filename, blen, min, max);
|
||||
stream_out_partitions_1 (temp_filename, blen, min, max);
|
||||
else
|
||||
nruns++;
|
||||
}
|
||||
|
@ -291,7 +291,8 @@ lto_wpa_write_files (void)
|
|||
timevar_push (TV_WHOPR_WPA);
|
||||
|
||||
FOR_EACH_VEC_ELT (ltrans_partitions, i, part)
|
||||
lto_stats.num_output_symtab_nodes += lto_symtab_encoder_size (part->encoder);
|
||||
lto_stats.num_output_symtab_nodes
|
||||
+= lto_symtab_encoder_size (part->encoder);
|
||||
|
||||
timevar_pop (TV_WHOPR_WPA);
|
||||
|
||||
|
@ -324,15 +325,18 @@ lto_wpa_write_files (void)
|
|||
sprintf (temp_filename + blen, "%u.o", i);
|
||||
|
||||
if (!quiet_flag)
|
||||
fprintf (stderr, " %s (%s %i insns)", temp_filename, part->name, part->insns);
|
||||
fprintf (stderr, " %s (%s %i insns)", temp_filename, part->name,
|
||||
part->insns);
|
||||
if (symtab->dump_file)
|
||||
{
|
||||
lto_symtab_encoder_iterator lsei;
|
||||
|
||||
fprintf (symtab->dump_file, "Writing partition %s to file %s, %i insns\n",
|
||||
lto_symtab_encoder_iterator lsei;
|
||||
|
||||
fprintf (symtab->dump_file,
|
||||
"Writing partition %s to file %s, %i insns\n",
|
||||
part->name, temp_filename, part->insns);
|
||||
fprintf (symtab->dump_file, " Symbols in partition: ");
|
||||
for (lsei = lsei_start_in_partition (part->encoder); !lsei_end_p (lsei);
|
||||
for (lsei = lsei_start_in_partition (part->encoder);
|
||||
!lsei_end_p (lsei);
|
||||
lsei_next_in_partition (&lsei))
|
||||
{
|
||||
symtab_node *node = lsei_node (lsei);
|
||||
|
@ -348,13 +352,15 @@ lto_wpa_write_files (void)
|
|||
fprintf (symtab->dump_file, "%s ", node->asm_name ());
|
||||
cgraph_node *cnode = dyn_cast <cgraph_node *> (node);
|
||||
if (cnode
|
||||
&& lto_symtab_encoder_encode_body_p (part->encoder, cnode))
|
||||
&& lto_symtab_encoder_encode_body_p (part->encoder,
|
||||
cnode))
|
||||
fprintf (symtab->dump_file, "(body included)");
|
||||
else
|
||||
{
|
||||
varpool_node *vnode = dyn_cast <varpool_node *> (node);
|
||||
if (vnode
|
||||
&& lto_symtab_encoder_encode_initializer_p (part->encoder, vnode))
|
||||
&& lto_symtab_encoder_encode_initializer_p (part->encoder,
|
||||
vnode))
|
||||
fprintf (symtab->dump_file, "(initializer included)");
|
||||
}
|
||||
}
|
||||
|
@ -396,7 +402,7 @@ lto_wpa_write_files (void)
|
|||
fatal_error (input_location,
|
||||
"closing LTRANS output list %s: %m", ltrans_output_list);
|
||||
|
||||
free_ltrans_partitions();
|
||||
free_ltrans_partitions ();
|
||||
free (temp_filename);
|
||||
|
||||
timevar_pop (TV_WHOPR_WPA_IO);
|
||||
|
@ -634,7 +640,7 @@ lto_main (void)
|
|||
debuginfo_early_stop ();
|
||||
|
||||
/* Let the middle end know that we have read and merged all of
|
||||
the input files. */
|
||||
the input files. */
|
||||
symtab->compile ();
|
||||
|
||||
timevar_stop (TV_PHASE_OPT_GEN);
|
||||
|
|
Loading…
Add table
Reference in a new issue