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/flow.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/flow.c')
-rw-r--r-- | gcc/flow.c | 21 |
1 files changed, 14 insertions, 7 deletions
@@ -194,7 +194,8 @@ struct basic_block_def entry_exit_blocks[2] NULL, /* aux */ ENTRY_BLOCK, /* index */ 0, /* loop_depth */ - -1, -1 /* eh_beg, eh_end */ + -1, -1, /* eh_beg, eh_end */ + 0 /* count */ }, { NULL, /* head */ @@ -207,7 +208,8 @@ struct basic_block_def entry_exit_blocks[2] NULL, /* aux */ EXIT_BLOCK, /* index */ 0, /* loop_depth */ - -1, -1 /* eh_beg, eh_end */ + -1, -1, /* eh_beg, eh_end */ + 0 /* count */ } }; @@ -1382,6 +1384,7 @@ split_edge (edge_in) /* Wire them up. */ bb->pred = edge_in; bb->succ = edge_out; + bb->count = edge_in->count; edge_in->dest = bb; edge_in->flags &= ~EDGE_CRITICAL; @@ -1392,6 +1395,7 @@ split_edge (edge_in) edge_out->dest = old_succ; edge_out->flags = EDGE_FALLTHRU; edge_out->probability = REG_BR_PROB_BASE; + edge_out->count = edge_in->count; old_succ->pred = edge_out; @@ -3809,7 +3813,7 @@ insn_dead_p (pbi, x, call_ok, notes) /* Walk the set of memory locations we are currently tracking and see if one is an identical match to this memory location. If so, this memory write is dead (remember, we're walking - backwards from the end of the block to the start. */ + backwards from the end of the block to the start). */ temp = pbi->mem_set_list; while (temp) { @@ -5608,8 +5612,8 @@ dump_flow_info (file) register basic_block bb = BASIC_BLOCK (i); register edge e; - fprintf (file, "\nBasic block %d: first insn %d, last %d, loop_depth %d.\n", - i, INSN_UID (bb->head), INSN_UID (bb->end), bb->loop_depth); + fprintf (file, "\nBasic block %d: first insn %d, last %d, loop_depth %d, count %d.\n", + i, INSN_UID (bb->head), INSN_UID (bb->end), bb->loop_depth, bb->count); fprintf (file, "Predecessors: "); for (e = bb->pred; e ; e = e->pred_next) @@ -5652,6 +5656,9 @@ dump_edge_info (file, e, do_succ) else fprintf (file, " %d", side->index); + if (e->count) + fprintf (file, " count:%d", e->count); + if (e->flags) { static const char * const bitnames[] = { @@ -5690,8 +5697,8 @@ dump_bb (bb, outf) rtx last; edge e; - fprintf (outf, ";; Basic block %d, loop depth %d", - bb->index, bb->loop_depth); + fprintf (outf, ";; Basic block %d, loop depth %d, count %d", + bb->index, bb->loop_depth, bb->count); if (bb->eh_beg != -1 || bb->eh_end != -1) fprintf (outf, ", eh regions %d/%d", bb->eh_beg, bb->eh_end); putc ('\n', outf); |