summaryrefslogtreecommitdiffstats
path: root/gcc/profile.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2006-04-12 07:51:18 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2006-04-12 07:51:18 +0000
commit348068568bc849f00e7a21c76c333e206973336a (patch)
tree80ae1d904e6b818aa1efcec96d149c538d27c7dd /gcc/profile.c
parentd7e51a3571fc67e974c8c90403d24808b8cf3f8c (diff)
downloadppe42-gcc-348068568bc849f00e7a21c76c333e206973336a.tar.gz
ppe42-gcc-348068568bc849f00e7a21c76c333e206973336a.zip
2006-04-12 Richard Guenther <rguenther@suse.de>
* profile.c (compute_branch_probabilities): Remove code encapsulated in !ir_type (), which are remanents of the removed RTL profiling code. * rtl-profile.c: Remove. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112884 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/profile.c')
-rw-r--r--gcc/profile.c180
1 files changed, 38 insertions, 142 deletions
diff --git a/gcc/profile.c b/gcc/profile.c
index 2f6d8aa5708..4e2213a6e2d 100644
--- a/gcc/profile.c
+++ b/gcc/profile.c
@@ -490,7 +490,6 @@ compute_branch_probabilities (void)
{
edge e;
edge_iterator ei;
- rtx note;
if (bb->count < 0)
{
@@ -546,37 +545,9 @@ compute_branch_probabilities (void)
index = 19;
hist_br_prob[index]++;
- /* Do this for RTL only. */
- if (!ir_type ())
- {
- note = find_reg_note (BB_END (bb), REG_BR_PROB, 0);
- /* There may be already note put by some other pass, such
- as builtin_expect expander. */
- if (note)
- XEXP (note, 0) = GEN_INT (prob);
- else
- REG_NOTES (BB_END (bb))
- = gen_rtx_EXPR_LIST (REG_BR_PROB, GEN_INT (prob),
- REG_NOTES (BB_END (bb)));
- }
num_branches++;
}
}
- /* Otherwise try to preserve the existing REG_BR_PROB probabilities
- tree based profile guessing put into code. BB can be the
- ENTRY_BLOCK, and it can have multiple (fake) successors in
- EH cases, but it still has no code; don't crash in this case. */
- else if (profile_status == PROFILE_ABSENT
- && !ir_type ()
- && EDGE_COUNT (bb->succs) > 1
- && BB_END (bb)
- && (note = find_reg_note (BB_END (bb), REG_BR_PROB, 0)))
- {
- int prob = INTVAL (XEXP (note, 0));
-
- BRANCH_EDGE (bb)->probability = prob;
- FALLTHRU_EDGE (bb)->probability = REG_BR_PROB_BASE - prob;
- }
/* As a last resort, distribute the probabilities evenly.
Use simple heuristics that if there are normal edges,
give all abnormals frequency of 0, otherwise distribute the
@@ -972,8 +943,7 @@ branch_prob (void)
flag_bits |= GCOV_ARC_FALLTHROUGH;
/* On trees we don't have fallthru flags, but we can
recompute them from CFG shape. */
- if (ir_type ()
- && e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)
+ if (e->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE)
&& e->src->next_bb == e->dest)
flag_bits |= GCOV_ARC_FALLTHROUGH;
@@ -989,116 +959,57 @@ branch_prob (void)
/* Line numbers. */
if (coverage_begin_output ())
{
+ gcov_position_t offset;
+
/* Initialize the output. */
output_location (NULL, 0, NULL, NULL);
- if (!ir_type ())
+ FOR_EACH_BB (bb)
{
- gcov_position_t offset;
-
- FOR_EACH_BB (bb)
- {
- rtx insn = BB_HEAD (bb);
- int ignore_next_note = 0;
-
- offset = 0;
-
- /* We are looking for line number notes. Search backward
- before basic block to find correct ones. */
- insn = prev_nonnote_insn (insn);
- if (!insn)
- insn = get_insns ();
- else
- insn = NEXT_INSN (insn);
+ block_stmt_iterator bsi;
- while (insn != BB_END (bb))
- {
- if (NOTE_P (insn))
- {
- /* Must ignore the line number notes that
- immediately follow the end of an inline function
- to avoid counting it twice. There is a note
- before the call, and one after the call. */
- if (NOTE_LINE_NUMBER (insn)
- == NOTE_INSN_REPEATED_LINE_NUMBER)
- ignore_next_note = 1;
- else if (NOTE_LINE_NUMBER (insn) <= 0)
- /*NOP*/;
- else if (ignore_next_note)
- ignore_next_note = 0;
- else
- {
- expanded_location s;
- NOTE_EXPANDED_LOCATION (s, insn);
- output_location (s.file, s.line, &offset, bb);
- }
- }
- insn = NEXT_INSN (insn);
- }
+ offset = 0;
- if (offset)
- {
- /* A file of NULL indicates the end of run. */
- gcov_write_unsigned (0);
- gcov_write_string (NULL);
- gcov_write_length (offset);
- }
+ if (bb == ENTRY_BLOCK_PTR->next_bb)
+ {
+ expanded_location curr_location =
+ expand_location (DECL_SOURCE_LOCATION (current_function_decl));
+ output_location (curr_location.file, curr_location.line,
+ &offset, bb);
}
- }
- else
- {
- gcov_position_t offset;
- FOR_EACH_BB (bb)
+ for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
{
- block_stmt_iterator bsi;
-
- offset = 0;
-
- if (bb == ENTRY_BLOCK_PTR->next_bb)
- {
- expanded_location curr_location =
- expand_location (DECL_SOURCE_LOCATION
- (current_function_decl));
- output_location (curr_location.file, curr_location.line,
- &offset, bb);
- }
-
- for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi))
- {
- tree stmt = bsi_stmt (bsi);
- if (EXPR_HAS_LOCATION (stmt))
- output_location (EXPR_FILENAME (stmt),
- EXPR_LINENO (stmt),
- &offset, bb);
- }
+ tree stmt = bsi_stmt (bsi);
+ if (EXPR_HAS_LOCATION (stmt))
+ output_location (EXPR_FILENAME (stmt), EXPR_LINENO (stmt),
+ &offset, bb);
+ }
- /* Notice GOTO expressions we eliminated while constructing the
- CFG. */
- if (single_succ_p (bb) && single_succ_edge (bb)->goto_locus)
- {
- /* ??? source_locus type is marked deprecated in input.h. */
- source_locus curr_location = single_succ_edge (bb)->goto_locus;
- /* ??? The FILE/LINE API is inconsistent for these cases. */
+ /* Notice GOTO expressions we eliminated while constructing the
+ CFG. */
+ if (single_succ_p (bb) && single_succ_edge (bb)->goto_locus)
+ {
+ /* ??? source_locus type is marked deprecated in input.h. */
+ source_locus curr_location = single_succ_edge (bb)->goto_locus;
+ /* ??? The FILE/LINE API is inconsistent for these cases. */
#ifdef USE_MAPPED_LOCATION
- output_location (LOCATION_FILE (curr_location),
- LOCATION_LINE (curr_location),
- &offset, bb);
+ output_location (LOCATION_FILE (curr_location),
+ LOCATION_LINE (curr_location), &offset, bb);
#else
- output_location (curr_location->file, curr_location->line,
- &offset, bb);
+ output_location (curr_location->file, curr_location->line,
+ &offset, bb);
#endif
- }
+ }
- if (offset)
- {
- /* A file of NULL indicates the end of run. */
- gcov_write_unsigned (0);
- gcov_write_string (NULL);
- gcov_write_length (offset);
- }
+ if (offset)
+ {
+ /* A file of NULL indicates the end of run. */
+ gcov_write_unsigned (0);
+ gcov_write_string (NULL);
+ gcov_write_length (offset);
}
- }
+ }
}
ENTRY_BLOCK_PTR->index = ENTRY_BLOCK;
@@ -1133,26 +1044,11 @@ branch_prob (void)
instrument_values (values);
/* Commit changes done by instrumentation. */
- if (ir_type ())
- bsi_commit_edge_inserts ();
- else
- {
- commit_edge_insertions_watch_calls ();
- allocate_reg_info (max_reg_num (), FALSE, FALSE);
- }
+ bsi_commit_edge_inserts ();
}
free_aux_for_edges ();
- if (!ir_type ())
- {
- /* Re-merge split basic blocks and the mess introduced by
- insert_insn_on_edge. */
- cleanup_cfg (profile_arc_flag ? CLEANUP_EXPENSIVE : 0);
- if (dump_file)
- dump_flow_info (dump_file, dump_flags);
- }
-
free_edge_list (el);
if (flag_branch_probabilities)
profile_status = PROFILE_READ;
OpenPOWER on IntegriCloud