Commit b4da704c by Jan Hubicka

cgraph.c (cgraph_node::get_untransformed_body): Dump function bodies streamed in with -Q.


	* cgraph.c (cgraph_node::get_untransformed_body): Dump function
	bodies streamed in with -Q.
	* dumpfile.c (dump_files): Add lto-stream-out dump file.
	* dumpfile.h (tree_dump_index): Add lto_stream_out.
	* gimple-streamer-out.c: Include gimple-pretty-print.h
	(output_bb): Dump stmts streamed.
	* lto-section-out.c: Include print-tree.h
	(lto_begin_section): Dump sections created.
	(lto_output_decl_index): Dump decl encoded.
	* lto-streamer-out.c: Include print-tree.h
	(create_output_block): Dump output block created.
	(DFS::DFS_write_tree_body): Dump DFS SCCs streamed.
	(output_function): Dump function output.
	(output_constructor): Dump constructor streamed.
	(write_global_stream): Output indexes encoded.
	(produce_asm_for_decls): Dump streams encoded.
	* lto-streamer.c (streamer_dump_file): New global var.
	* lto-streamer.h (streamer_dump_file): Declare.
	* passes.c (ipa_write_summaries): Initialize streamer dump.
	* varpool.c (varpool_node::get_constructor): Dump constructors streamed
	in.

From-SVN: r261546
parent 70e18df7
2018-06-13 Jan Hubicka <hubicka@gcc.gnu.org>
* cgraph.c (cgraph_node::get_untransformed_body): Dump function
bodies streamed in with -Q.
* dumpfile.c (dump_files): Add lto-stream-out dump file.
* dumpfile.h (tree_dump_index): Add lto_stream_out.
* gimple-streamer-out.c: Include gimple-pretty-print.h
(output_bb): Dump stmts streamed.
* lto-section-out.c: Include print-tree.h
(lto_begin_section): Dump sections created.
(lto_output_decl_index): Dump decl encoded.
* lto-streamer-out.c: Include print-tree.h
(create_output_block): Dump output block created.
(DFS::DFS_write_tree_body): Dump DFS SCCs streamed.
(output_function): Dump function output.
(output_constructor): Dump constructor streamed.
(write_global_stream): Output indexes encoded.
(produce_asm_for_decls): Dump streams encoded.
* lto-streamer.c (streamer_dump_file): New global var.
* lto-streamer.h (streamer_dump_file): Declare.
* passes.c (ipa_write_summaries): Initialize streamer dump.
* varpool.c (varpool_node::get_constructor): Dump constructors streamed
in.
2018-06-13 Eric Botcazou <ebotcazou@adacore.com> 2018-06-13 Eric Botcazou <ebotcazou@adacore.com>
PR target/86048 PR target/86048
......
...@@ -3543,6 +3543,8 @@ cgraph_node::get_untransformed_body (void) ...@@ -3543,6 +3543,8 @@ cgraph_node::get_untransformed_body (void)
gcc_assert (DECL_STRUCT_FUNCTION (decl) == NULL); gcc_assert (DECL_STRUCT_FUNCTION (decl) == NULL);
if (!quiet_flag)
fprintf (stderr, " in:%s", IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
lto_input_function_body (file_data, this, data); lto_input_function_body (file_data, this, data);
lto_stats.num_function_bodies++; lto_stats.num_function_bodies++;
lto_free_section_data (file_data, LTO_section_function_body, name, lto_free_section_data (file_data, LTO_section_function_body, name,
......
...@@ -64,6 +64,7 @@ static struct dump_file_info dump_files[TDI_end] = ...@@ -64,6 +64,7 @@ static struct dump_file_info dump_files[TDI_end] =
DUMP_FILE_INFO (".original", "tree-original", DK_tree, 0), DUMP_FILE_INFO (".original", "tree-original", DK_tree, 0),
DUMP_FILE_INFO (".gimple", "tree-gimple", DK_tree, 0), DUMP_FILE_INFO (".gimple", "tree-gimple", DK_tree, 0),
DUMP_FILE_INFO (".nested", "tree-nested", DK_tree, 0), DUMP_FILE_INFO (".nested", "tree-nested", DK_tree, 0),
DUMP_FILE_INFO (".lto-stream-out", "ipa-lto-stream-out", DK_ipa, 0),
#define FIRST_AUTO_NUMBERED_DUMP 1 #define FIRST_AUTO_NUMBERED_DUMP 1
#define FIRST_ME_AUTO_NUMBERED_DUMP 4 #define FIRST_ME_AUTO_NUMBERED_DUMP 4
......
...@@ -33,6 +33,7 @@ enum tree_dump_index ...@@ -33,6 +33,7 @@ enum tree_dump_index
TDI_original, /* dump each function before optimizing it */ TDI_original, /* dump each function before optimizing it */
TDI_gimple, /* dump each function after gimplifying it */ TDI_gimple, /* dump each function after gimplifying it */
TDI_nested, /* dump each function after unnesting it */ TDI_nested, /* dump each function after unnesting it */
TDI_lto_stream_out, /* dump information about lto streaming */
TDI_lang_all, /* enable all the language dumps. */ TDI_lang_all, /* enable all the language dumps. */
TDI_tree_all, /* enable all the GENERIC/GIMPLE dumps. */ TDI_tree_all, /* enable all the GENERIC/GIMPLE dumps. */
......
...@@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see
#include "gimple-iterator.h" #include "gimple-iterator.h"
#include "cgraph.h" #include "cgraph.h"
#include "value-prof.h" #include "value-prof.h"
#include "gimple-pretty-print.h"
/* Output PHI function PHI to the main stream in OB. */ /* Output PHI function PHI to the main stream in OB. */
...@@ -220,6 +221,11 @@ output_bb (struct output_block *ob, basic_block bb, struct function *fn) ...@@ -220,6 +221,11 @@ output_bb (struct output_block *ob, basic_block bb, struct function *fn)
{ {
int region; int region;
gimple *stmt = gsi_stmt (bsi); gimple *stmt = gsi_stmt (bsi);
if (streamer_dump_file)
{
fprintf (streamer_dump_file, " Streaming gimple stmt ");
print_gimple_stmt (streamer_dump_file, stmt, 0, TDF_SLIM);
}
output_gimple_stmt (ob, stmt); output_gimple_stmt (ob, stmt);
......
...@@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -30,6 +30,7 @@ along with GCC; see the file COPYING3. If not see
#include "data-streamer.h" #include "data-streamer.h"
#include "langhooks.h" #include "langhooks.h"
#include "lto-compress.h" #include "lto-compress.h"
#include "print-tree.h"
static vec<lto_out_decl_state_ptr> decl_state_stack; static vec<lto_out_decl_state_ptr> decl_state_stack;
...@@ -66,6 +67,9 @@ lto_begin_section (const char *name, bool compress) ...@@ -66,6 +67,9 @@ lto_begin_section (const char *name, bool compress)
{ {
lang_hooks.lto.begin_section (name); lang_hooks.lto.begin_section (name);
if (streamer_dump_file)
fprintf (streamer_dump_file, "Creating %ssection %s\n",
compress ? "compressed " : "", name);
gcc_assert (compression_stream == NULL); gcc_assert (compression_stream == NULL);
if (compress) if (compress)
compression_stream = lto_start_compression (lto_append_data, NULL); compression_stream = lto_start_compression (lto_append_data, NULL);
...@@ -158,6 +162,12 @@ lto_output_decl_index (struct lto_output_stream *obs, ...@@ -158,6 +162,12 @@ lto_output_decl_index (struct lto_output_stream *obs,
if (!existed_p) if (!existed_p)
{ {
index = encoder->trees.length (); index = encoder->trees.length ();
if (streamer_dump_file)
{
print_node_brief (streamer_dump_file, " Encoding indexable ",
name, 4);
fprintf (streamer_dump_file, " as %i \n", index);
}
encoder->trees.safe_push (name); encoder->trees.safe_push (name);
new_entry_p = TRUE; new_entry_p = TRUE;
} }
......
...@@ -42,6 +42,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -42,6 +42,7 @@ along with GCC; see the file COPYING3. If not see
#include "gomp-constants.h" #include "gomp-constants.h"
#include "debug.h" #include "debug.h"
#include "omp-offload.h" #include "omp-offload.h"
#include "print-tree.h"
static void lto_write_tree (struct output_block*, tree, bool); static void lto_write_tree (struct output_block*, tree, bool);
...@@ -65,6 +66,9 @@ struct output_block * ...@@ -65,6 +66,9 @@ struct output_block *
create_output_block (enum lto_section_type section_type) create_output_block (enum lto_section_type section_type)
{ {
struct output_block *ob = XCNEW (struct output_block); struct output_block *ob = XCNEW (struct output_block);
if (streamer_dump_file)
fprintf (streamer_dump_file, "Creating output block for %s\n",
lto_section_name [section_type]);
ob->section_type = section_type; ob->section_type = section_type;
ob->decl_state = lto_get_out_decl_state (); ob->decl_state = lto_get_out_decl_state ();
...@@ -738,6 +742,14 @@ DFS::DFS_write_tree_body (struct output_block *ob, ...@@ -738,6 +742,14 @@ DFS::DFS_write_tree_body (struct output_block *ob,
enum tree_code code; enum tree_code code;
if (streamer_dump_file)
{
print_node_brief (streamer_dump_file, " Streaming ",
expr, 4);
fprintf (streamer_dump_file, " to %s\n",
lto_section_name [ob->section_type]);
}
code = TREE_CODE (expr); code = TREE_CODE (expr);
if (CODE_CONTAINS_STRUCT (code, TS_TYPED)) if (CODE_CONTAINS_STRUCT (code, TS_TYPED))
...@@ -1635,6 +1647,13 @@ lto_output_tree (struct output_block *ob, tree expr, ...@@ -1635,6 +1647,13 @@ lto_output_tree (struct output_block *ob, tree expr,
we stream out. */ we stream out. */
gcc_assert (!in_dfs_walk); gcc_assert (!in_dfs_walk);
if (streamer_dump_file)
{
print_node_brief (streamer_dump_file, " Streaming SCC of ",
expr, 4);
fprintf (streamer_dump_file, "\n");
}
/* Start the DFS walk. */ /* Start the DFS walk. */
/* Save ob state ... */ /* Save ob state ... */
/* let's see ... */ /* let's see ... */
...@@ -1651,6 +1670,12 @@ lto_output_tree (struct output_block *ob, tree expr, ...@@ -1651,6 +1670,12 @@ lto_output_tree (struct output_block *ob, tree expr,
streamer_write_uhwi (ob, ix); streamer_write_uhwi (ob, ix);
streamer_write_enum (ob->main_stream, LTO_tags, LTO_NUM_TAGS, streamer_write_enum (ob->main_stream, LTO_tags, LTO_NUM_TAGS,
lto_tree_code_to_tag (TREE_CODE (expr))); lto_tree_code_to_tag (TREE_CODE (expr)));
if (streamer_dump_file)
{
print_node_brief (streamer_dump_file, " Finished SCC of ",
expr, 4);
fprintf (streamer_dump_file, "\n\n");
}
lto_stats.num_pickle_refs_output++; lto_stats.num_pickle_refs_output++;
} }
} }
...@@ -2072,6 +2097,10 @@ output_function (struct cgraph_node *node) ...@@ -2072,6 +2097,10 @@ output_function (struct cgraph_node *node)
basic_block bb; basic_block bb;
struct output_block *ob; struct output_block *ob;
if (streamer_dump_file)
fprintf (streamer_dump_file, "\nStreaming body of %s\n",
node->name ());
function = node->decl; function = node->decl;
fn = DECL_STRUCT_FUNCTION (function); fn = DECL_STRUCT_FUNCTION (function);
ob = create_output_block (LTO_section_function_body); ob = create_output_block (LTO_section_function_body);
...@@ -2190,6 +2219,9 @@ output_function (struct cgraph_node *node) ...@@ -2190,6 +2219,9 @@ output_function (struct cgraph_node *node)
produce_asm (ob, function); produce_asm (ob, function);
destroy_output_block (ob); destroy_output_block (ob);
if (streamer_dump_file)
fprintf (streamer_dump_file, "Finished streaming %s\n",
node->name ());
} }
/* Output the body of function NODE->DECL. */ /* Output the body of function NODE->DECL. */
...@@ -2200,6 +2232,10 @@ output_constructor (struct varpool_node *node) ...@@ -2200,6 +2232,10 @@ output_constructor (struct varpool_node *node)
tree var = node->decl; tree var = node->decl;
struct output_block *ob; struct output_block *ob;
if (streamer_dump_file)
fprintf (streamer_dump_file, "\nStreaming constructor of %s\n",
node->name ());
ob = create_output_block (LTO_section_function_body); ob = create_output_block (LTO_section_function_body);
clear_line_info (ob); clear_line_info (ob);
...@@ -2216,6 +2252,9 @@ output_constructor (struct varpool_node *node) ...@@ -2216,6 +2252,9 @@ output_constructor (struct varpool_node *node)
produce_asm (ob, var); produce_asm (ob, var);
destroy_output_block (ob); destroy_output_block (ob);
if (streamer_dump_file)
fprintf (streamer_dump_file, "Finished streaming %s\n",
node->name ());
} }
...@@ -2485,6 +2524,12 @@ write_global_stream (struct output_block *ob, ...@@ -2485,6 +2524,12 @@ write_global_stream (struct output_block *ob,
for (index = 0; index < size; index++) for (index = 0; index < size; index++)
{ {
t = lto_tree_ref_encoder_get_tree (encoder, index); t = lto_tree_ref_encoder_get_tree (encoder, index);
if (streamer_dump_file)
{
fprintf (streamer_dump_file, " %i:", (int)index);
print_node_brief (streamer_dump_file, "", t, 4);
fprintf (streamer_dump_file, "\n");
}
if (!streamer_tree_cache_lookup (ob->writer_cache, t, NULL)) if (!streamer_tree_cache_lookup (ob->writer_cache, t, NULL))
stream_write_tree (ob, t, false); stream_write_tree (ob, t, false);
} }
...@@ -2860,12 +2905,18 @@ produce_asm_for_decls (void) ...@@ -2860,12 +2905,18 @@ produce_asm_for_decls (void)
} }
/* Write the global symbols. */ /* Write the global symbols. */
if (streamer_dump_file)
fprintf (streamer_dump_file, "Outputting global stream\n");
lto_output_decl_state_streams (ob, out_state); lto_output_decl_state_streams (ob, out_state);
num_fns = lto_function_decl_states.length (); num_fns = lto_function_decl_states.length ();
for (idx = 0; idx < num_fns; idx++) for (idx = 0; idx < num_fns; idx++)
{ {
fn_out_state = fn_out_state =
lto_function_decl_states[idx]; lto_function_decl_states[idx];
if (streamer_dump_file)
fprintf (streamer_dump_file, "Outputting stream for %s\n",
IDENTIFIER_POINTER
(DECL_ASSEMBLER_NAME (fn_out_state->fn_decl)));
lto_output_decl_state_streams (ob, fn_out_state); lto_output_decl_state_streams (ob, fn_out_state);
} }
......
...@@ -44,6 +44,8 @@ const char *section_name_prefix = LTO_SECTION_NAME_PREFIX; ...@@ -44,6 +44,8 @@ const char *section_name_prefix = LTO_SECTION_NAME_PREFIX;
/* Set when streaming LTO for offloading compiler. */ /* Set when streaming LTO for offloading compiler. */
bool lto_stream_offload_p; bool lto_stream_offload_p;
FILE *streamer_dump_file;
/* Return a string representing LTO tag TAG. */ /* Return a string representing LTO tag TAG. */
const char * const char *
......
...@@ -1221,5 +1221,6 @@ struct dref_entry { ...@@ -1221,5 +1221,6 @@ struct dref_entry {
extern vec<dref_entry> dref_queue; extern vec<dref_entry> dref_queue;
extern FILE *streamer_dump_file;
#endif /* GCC_LTO_STREAMER_H */ #endif /* GCC_LTO_STREAMER_H */
...@@ -2641,6 +2641,9 @@ ipa_write_summaries (void) ...@@ -2641,6 +2641,9 @@ ipa_write_summaries (void)
if ((!flag_generate_lto && !flag_generate_offload) || seen_error ()) if ((!flag_generate_lto && !flag_generate_offload) || seen_error ())
return; return;
gcc_assert (!dump_file);
streamer_dump_file = dump_begin (TDI_lto_stream_out, NULL);
select_what_to_stream (); select_what_to_stream ();
encoder = lto_symtab_encoder_new (false); encoder = lto_symtab_encoder_new (false);
...@@ -2683,6 +2686,11 @@ ipa_write_summaries (void) ...@@ -2683,6 +2686,11 @@ ipa_write_summaries (void)
ipa_write_summaries_1 (compute_ltrans_boundary (encoder)); ipa_write_summaries_1 (compute_ltrans_boundary (encoder));
free (order); free (order);
if (streamer_dump_file)
{
dump_end (TDI_lto_stream_out, streamer_dump_file);
streamer_dump_file = NULL;
}
} }
/* Same as execute_pass_list but assume that subpasses of IPA passes /* Same as execute_pass_list but assume that subpasses of IPA passes
......
...@@ -307,6 +307,8 @@ varpool_node::get_constructor (void) ...@@ -307,6 +307,8 @@ varpool_node::get_constructor (void)
file_data->file_name, file_data->file_name,
name); name);
if (!quiet_flag)
fprintf (stderr, " in:%s", IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl)));
lto_input_variable_constructor (file_data, this, data); lto_input_variable_constructor (file_data, this, data);
gcc_assert (DECL_INITIAL (decl) != error_mark_node); gcc_assert (DECL_INITIAL (decl) != error_mark_node);
lto_stats.num_function_bodies++; lto_stats.num_function_bodies++;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment