diff options
author | Jan Hubicka <jh@suse.cz> | 2000-05-19 22:51:49 +0200 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2000-05-19 13:51:49 -0700 |
commit | 51891abe62c625f17598bd4d64a71c6169693bb6 (patch) | |
tree | e57f4f516ce5ccbed54f9a6d32436cb91fcba1c4 /gcc/toplev.c | |
parent | b6cfd26443d6161c71b6069346cbe805f86774a4 (diff) | |
download | gcc-51891abe62c625f17598bd4d64a71c6169693bb6.zip gcc-51891abe62c625f17598bd4d64a71c6169693bb6.tar.gz gcc-51891abe62c625f17598bd4d64a71c6169693bb6.tar.bz2 |
basic-block.h (struct edge_def): New field "count".
* basic-block.h (struct edge_def): New field "count".
(struct basic_block_def): Likewise.
* flow.c (entry_exit_blocks): Add count fileds.
(split_edge): Keep count information up-to-date.
(dump_edge_info, dump_flow_info): Dump count fields.
* final.c (count_instrumented_edges): Rename to edge from arc.
(end_final): Update users.
* profile.c: Include expr.h, basic-block.h.
(struct adj_list, ARC_TARGET, ARC_SOURCE, ARC_COUNT): Kill.
(struct bb_info, label_to_bb, label_to_bb_size, bb_graph): Kill.
(ignore_next_note, return_label_execution_count): Kill.
(bbg_file_name, da_file_name): Kill.
(edge_info, bb_info): New structures.
(EDGE_INFO, BB_INFO, GCOV_INDEX_TO_BB, BB_TO_GCOV_INDEX): New macros.
(count_instrumented_edges, total_num_edges): Rename to edge from arc.
(total_num_edges_instrumented): Likewise.
(init_arc, expand_spanning_tree): Kill.
(fill_spanning_tree, tablejump_entry_p): Kill.
(instrument_edges): Rewrite from instrument_arcs to use
commit_edge_insertions infrastructure.
(compute_branch_probabilities): Remove arguments; rewrite for
CFG infrastructure; use rtl_dump_file directly.
(branch_prob, find_spanning_tree): Likewise.
(union_groups, find_group): New.
(init_branch_prob): Make bbg_file_name and da_file_name local.
(end_branch_prob): Use rtl_dump_file directly.
(init_edge_profiler): Rename to edge from arc.
(output_arc_profiler): Kill.
(gen_edge_profiler): New.
(output_func_start_profiler): Turn off profiling. Make the
constructor static when we can.
* rtl.h (branch_prob, end_branch_prob): Update prototypes.
* toplev.c (DFI_flow): Remove.
(DFI_cfg, DFI_life): New.
(dump_file): Update accordingly.
(compile_file): Call end_branch_prob if profile_arc_flag too.
(rest_of_compilation): Move flow1 cfg creation to DFI_cfg. Do edge
profiling after the CFG is built. Move flow1 life analysis to
DFI_life. Always estimate remaining probabilities.
Co-Authored-By: Richard Henderson <rth@cygnus.com>
From-SVN: r34037
Diffstat (limited to 'gcc/toplev.c')
-rw-r--r-- | gcc/toplev.c | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/gcc/toplev.c b/gcc/toplev.c index 52f6cb8..e701889 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -261,8 +261,9 @@ enum dump_file_index DFI_gcse, DFI_loop, DFI_cse2, + DFI_cfg, DFI_bp, - DFI_flow, + DFI_life, DFI_combine, DFI_ce, DFI_regmove, @@ -303,8 +304,9 @@ struct dump_file_info dump_file[DFI_MAX] = { "gcse", 'G', 1, 0, 0 }, { "loop", 'L', 1, 0, 0 }, { "cse2", 't', 1, 0, 0 }, + { "cfg", 'f', 1, 0, 0 }, { "bp", 'b', 1, 0, 0 }, - { "flow", 'f', 1, 0, 0 }, + { "life", 'f', 1, 0, 0 }, /* Yes, duplicate enable switch. */ { "combine", 'c', 1, 0, 0 }, { "ce", 'C', 1, 0, 0 }, { "regmove", 'N', 1, 0, 0 }, @@ -2372,11 +2374,13 @@ compile_file (name) end_final (dump_base_name); - if (flag_test_coverage || flag_branch_probabilities) + if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities) { timevar_push (TV_DUMP); open_dump_file (DFI_bp, NULL); - end_branch_prob (rtl_dump_file); + + end_branch_prob (); + close_dump_file (DFI_bp, NULL, NULL_RTX); timevar_pop (TV_DUMP); } @@ -3101,33 +3105,32 @@ rest_of_compilation (decl) cse_not_expected = 1; - if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities) - { - timevar_push (TV_BRANCH_PROB); - open_dump_file (DFI_bp, decl); - - branch_prob (insns, rtl_dump_file); - - close_dump_file (DFI_bp, print_rtl, insns); - timevar_pop (TV_BRANCH_PROB); - - if (ggc_p) - ggc_collect (); - } - regclass_init (); - /* Print function header into flow dump now - because doing the flow analysis makes some of the dump. */ - - open_dump_file (DFI_flow, decl); /* Do control and data flow analysis; wrote some of the results to the dump file. */ timevar_push (TV_FLOW); + open_dump_file (DFI_cfg, decl); + find_basic_blocks (insns, max_reg_num (), rtl_dump_file); cleanup_cfg (insns); + + close_dump_file (DFI_cfg, print_rtl_with_bb, insns); + + if (profile_arc_flag || flag_test_coverage || flag_branch_probabilities) + { + timevar_push (TV_BRANCH_PROB); + open_dump_file (DFI_bp, decl); + + branch_prob (); + + close_dump_file (DFI_bp, print_rtl_with_bb, insns); + timevar_pop (TV_BRANCH_PROB); + } + + open_dump_file (DFI_life, decl); if (optimize) { struct loops loops; @@ -3137,8 +3140,7 @@ rest_of_compilation (decl) flow_loops_find (&loops); /* Estimate using heuristics if no profiling info is available. */ - if (! flag_branch_probabilities) - estimate_probability (&loops); + estimate_probability (&loops); if (rtl_dump_file) flow_loops_dump (&loops, rtl_dump_file, 0); @@ -3156,7 +3158,7 @@ rest_of_compilation (decl) setjmp_args_warning (); } - close_dump_file (DFI_flow, print_rtl_with_bb, insns); + close_dump_file (DFI_life, print_rtl_with_bb, insns); if (ggc_p) ggc_collect (); |