diff --git a/gcc/lto/lang.opt b/gcc/lto/lang.opt index 9e7d1fc..7c671c0 100644 --- a/gcc/lto/lang.opt +++ b/gcc/lto/lang.opt @@ -117,6 +117,15 @@ Dump the details of LTO objects. body= LTO Driver RejectNegative Joined Var(flag_lto_dump_body) +optimized-blocks= +LTO Driver RejectNegative Joined Var(flag_tree_optimized_blocks) + +optimized-stats= +LTO Driver RejectNegative Joined Var(flag_tree_optimized_stats) + +optimized-vops= +LTO Driver RejectNegative Joined Var(flag_tree_optimized_vops) + type-stats LTO Var(flag_lto_dump_type_stats) Dump the statistics of tree types. diff --git a/gcc/lto/lto-dump.c b/gcc/lto/lto-dump.c index 40fdbbe..623c825 100644 --- a/gcc/lto/lto-dump.c +++ b/gcc/lto/lto-dump.c @@ -215,6 +215,66 @@ dump_symbol () fprintf (stderr, "\n"); } +/* Dump gimple body (TDF_NONE) of specific function. */ +void +dump_body_none () +{ + fprintf (stderr, "Gimple body of function: %s\n", + flag_lto_dump_body); + cgraph_node *cnode; + FOR_EACH_FUNCTION (cnode) + if (!strcmp (cnode->name (), flag_lto_dump_body)) + { + cnode->get_untransformed_body (); + debug_function (cnode->decl, 0); + } +} + +/* Dump gimple body (TDF_BLOCKS) of specific function. */ +void +dump_body_blocks () +{ + fprintf (stderr, "Gimple body of function: %s\n", + flag_tree_optimized_blocks); + cgraph_node *cnode; + FOR_EACH_FUNCTION (cnode) + if (!strcmp (cnode->name (), flag_tree_optimized_blocks)) + { + cnode->get_untransformed_body (); + debug_function (cnode->decl, TDF_BLOCKS); + } +} + +/* Dump gimple body (TDF_STATS) of specific function. */ +void +dump_body_stats () +{ + fprintf (stderr, "Gimple body of function: %s\n", + flag_tree_optimized_stats); + cgraph_node *cnode; + FOR_EACH_FUNCTION (cnode) + if (!strcmp (cnode->name (), flag_tree_optimized_stats)) + { + cnode->get_untransformed_body (); + debug_function (cnode->decl, TDF_STATS); + } +} + +/* Dump gimple body (TDF_VOPS) of specific function. */ +void +dump_body_vops () +{ + fprintf (stderr, "Gimple body of function: %s\n", + flag_tree_optimized_vops); + cgraph_node *cnode; + FOR_EACH_FUNCTION (cnode) + if (!strcmp (cnode->name (), flag_tree_optimized_vops)) + { + cnode->get_untransformed_body (); + debug_function (cnode->decl, TDF_VOPS); + } +} + /* Number of parallel tasks to run, -1 if we want to use GNU Make jobserver. */ static int lto_parallelism; @@ -3580,6 +3640,22 @@ lto_main (void) if (flag_lto_dump_symbol) dump_symbol (); + /* Dump gimple body (TDF_NONE) of specific function. */ + if (flag_lto_dump_body) + dump_body_none (); + + /* Dump gimple body (TDF_BLOCKS) of specific function. */ + if (flag_tree_optimized_blocks) + dump_body_blocks (); + + /* Dump gimple body (TDF_STATS) of specific function. */ + if (flag_tree_optimized_stats) + dump_body_stats (); + + /* Dump gimple body (TDF_VOPS) of specific function. */ + if (flag_tree_optimized_vops) + dump_body_vops (); + timevar_stop (TV_PHASE_STREAM_IN); if (!seen_error ())