aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto-section-in.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2019-10-30 11:38:52 +0100
committerMartin Liska <marxin@gcc.gnu.org>2019-10-30 10:38:52 +0000
commit3c56d8d8de26c7d7ac46733b7b3c01ae34e144f1 (patch)
treefa3f3e368cfb454737f1269277b2ea7d8b2c89e1 /gcc/lto-section-in.c
parent01509e2f045ab897000de7a2b242a059a99a89a3 (diff)
downloadgcc-3c56d8d8de26c7d7ac46733b7b3c01ae34e144f1.zip
gcc-3c56d8d8de26c7d7ac46733b7b3c01ae34e144f1.tar.gz
gcc-3c56d8d8de26c7d7ac46733b7b3c01ae34e144f1.tar.bz2
Use symtab_node::order in LTO sections with body.
2019-10-30 Martin Liska <mliska@suse.cz> PR lto/91393 PR lto/88220 * cgraph.c (cgraph_node::get_create): Overwrite node->order from a first_clone in order to get proper LTO section in LTO stream. (cgraph_node::get_untransformed_body): Use lto_get_section_data where symtab_node::order must be provided. * cgraphclones.c (cgraph_node::find_replacement): Update also symbol order. * ipa-fnsummary.c (ipa_fn_summary_read): Use new function lto_get_summary_section_data. * ipa-hsa.c (ipa_hsa_read_summary): Likewise. * ipa-icf.c (sem_item_optimizer::read_summary): Likewise. * ipa-prop.c (ipa_prop_read_jump_functions): Likewise. (ipcp_read_transformation_summaries): Likewise. * ipa-sra.c (ipa_sra_read_summary): Likewise. * lto-cgraph.c (input_node): Add also order_base. (input_varpool_node): Likewise. (input_cgraph_1): Assign the order_base. (input_cgraph_opt_summary): Use new lto_get_summary_section_data. * lto-opts.c (lto_write_options): Pass new argument. * lto-section-in.c (lto_get_section_data): Add new argumente order. (lto_get_summary_section_data): New. (lto_get_raw_section_data): Add order argument. (lto_create_simple_input_block): Likewise. * lto-section-out.c (lto_destroy_simple_output_block): Likewise. * lto-streamer-in.c (lto_input_toplevel_asms): Use lto_get_summary_section_data. (lto_input_mode_table): Likewise. * lto-streamer-out.c (produce_asm): Pass symtab_node::order. (lto_output_toplevel_asms): Pass new argument. (copy_function_or_variable): Likewise. (produce_lto_section):Likewise. (produce_symtab): Likewise. (lto_write_mode_table): Likewise. (produce_asm_for_decls): Likewise. * lto-streamer.c (lto_get_section_name): Concat symbol name and symbol order. * lto-streamer.h (lto_get_section_data): Add order argument. (lto_get_summary_section_data): New. (lto_get_raw_section_data): Add order argument. (lto_get_section_name): Likewise. * varpool.c (varpool_node::get_constructor): Pass order argument. 2019-10-30 Martin Liska <mliska@suse.cz> PR lto/91393 PR lto/88220 * lto-common.c (lto_file_finalize): Use lto_get_summary_section_data. (get_section_data): Add order argument. 2019-10-30 Martin Liska <mliska@suse.cz> PR lto/91393 PR lto/88220 * gcc.dg/lto/pr91393_0.c: New test. From-SVN: r277607
Diffstat (limited to 'gcc/lto-section-in.c')
-rw-r--r--gcc/lto-section-in.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/gcc/lto-section-in.c b/gcc/lto-section-in.c
index 60f111f..67d9984 100644
--- a/gcc/lto-section-in.c
+++ b/gcc/lto-section-in.c
@@ -131,10 +131,11 @@ struct lto_data_header
const char *
lto_get_section_data (struct lto_file_decl_data *file_data,
enum lto_section_type section_type,
- const char *name,
+ const char *name, int order,
size_t *len, bool decompress)
{
- const char *data = (get_section_f) (file_data, section_type, name, len);
+ const char *data = (get_section_f) (file_data, section_type, name, order,
+ len);
const size_t header_length = sizeof (struct lto_data_header);
struct lto_data_header *header;
struct lto_buffer buffer;
@@ -172,15 +173,27 @@ lto_get_section_data (struct lto_file_decl_data *file_data,
return data;
}
+/* Return a char pointer to the start of a data stream for an LTO pass.
+ FILE_DATA indicates where to obtain the data.
+ SECTION_TYPE is the type of information to be obtained.
+ LEN is the size of the data returned. */
+
+const char *
+lto_get_summary_section_data (struct lto_file_decl_data *file_data,
+ enum lto_section_type section_type, size_t *len)
+{
+ return lto_get_section_data (file_data, section_type, NULL, 0, len);
+}
+
/* Get the section data without any header parsing or uncompression. */
const char *
lto_get_raw_section_data (struct lto_file_decl_data *file_data,
enum lto_section_type section_type,
- const char *name,
+ const char *name, int order,
size_t *len)
{
- return (get_section_f) (file_data, section_type, name, len);
+ return (get_section_f) (file_data, section_type, name, order, len);
}
/* Free the data found from the above call. The first three
@@ -235,7 +248,8 @@ lto_create_simple_input_block (struct lto_file_decl_data *file_data,
enum lto_section_type section_type,
const char **datar, size_t *len)
{
- const char *data = lto_get_section_data (file_data, section_type, NULL, len);
+ const char *data = lto_get_section_data (file_data, section_type, NULL, 0,
+ len);
const struct lto_simple_header * header
= (const struct lto_simple_header *) data;