aboutsummaryrefslogtreecommitdiff
path: root/gcc/flow.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2000-05-19 22:51:49 +0200
committerRichard Henderson <rth@gcc.gnu.org>2000-05-19 13:51:49 -0700
commit51891abe62c625f17598bd4d64a71c6169693bb6 (patch)
treee57f4f516ce5ccbed54f9a6d32436cb91fcba1c4 /gcc/flow.c
parentb6cfd26443d6161c71b6069346cbe805f86774a4 (diff)
downloadgcc-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.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/gcc/flow.c b/gcc/flow.c
index b274130..08d61b1 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -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);