aboutsummaryrefslogtreecommitdiff
path: root/gcc/profile.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/profile.c')
-rw-r--r--gcc/profile.c58
1 files changed, 31 insertions, 27 deletions
diff --git a/gcc/profile.c b/gcc/profile.c
index b1dc941b39e..4ab2553188b 100644
--- a/gcc/profile.c
+++ b/gcc/profile.c
@@ -150,8 +150,7 @@ instrument_edges (struct edge_list *el)
if (!inf->ignore && !inf->on_tree)
{
- if (e->flags & EDGE_ABNORMAL)
- abort ();
+ gcc_assert (!(e->flags & EDGE_ABNORMAL));
if (dump_file)
fprintf (dump_file, "Edge %d to %d instrumented%s\n",
e->src->index, e->dest->index,
@@ -197,7 +196,7 @@ instrument_values (histogram_values values)
break;
default:
- abort ();
+ gcc_unreachable ();
}
if (!coverage_counter_alloc (t, hist->n_counters))
continue;
@@ -221,9 +220,10 @@ instrument_values (histogram_values values)
break;
default:
- abort ();
+ gcc_unreachable ();
}
}
+ VEC_free (histogram_value, heap, values);
}
@@ -429,8 +429,7 @@ compute_branch_probabilities (void)
/* Calculate count for remaining edge by conservation. */
total = bb->count - total;
- if (! e)
- abort ();
+ gcc_assert (e);
EDGE_INFO (e)->count_valid = 1;
e->count = total;
bi->succ_count--;
@@ -457,8 +456,7 @@ compute_branch_probabilities (void)
/* Calculate count for remaining edge by conservation. */
total = bb->count - total + e->count;
- if (! e)
- abort ();
+ gcc_assert (e);
EDGE_INFO (e)->count_valid = 1;
e->count = total;
bi->pred_count--;
@@ -480,8 +478,7 @@ compute_branch_probabilities (void)
succ and pred count of zero. */
FOR_EACH_BB (bb)
{
- if (BB_INFO (bb)->succ_count || BB_INFO (bb)->pred_count)
- abort ();
+ gcc_assert (!BB_INFO (bb)->succ_count && !BB_INFO (bb)->pred_count);
}
/* For every edge, calculate its branch probability and add a reg_note
@@ -641,7 +638,7 @@ compute_branch_probabilities (void)
}
/* Load value histograms values whose description is stored in VALUES array
- from .da file. */
+ from .gcda file. */
static void
compute_value_histograms (histogram_values values)
@@ -688,21 +685,32 @@ compute_value_histograms (histogram_values values)
hist = VEC_index (histogram_value, values, i);
t = (int) hist->type;
- /* FIXME: make this work for trees. */
+ aact_count = act_count[t];
+ act_count[t] += hist->n_counters;
+
if (!ir_type ())
{
- aact_count = act_count[t];
- act_count[t] += hist->n_counters;
for (j = hist->n_counters; j > 0; j--)
hist_list = alloc_EXPR_LIST (0, GEN_INT (aact_count[j - 1]),
hist_list);
- hist_list = alloc_EXPR_LIST (0,
- copy_rtx ((rtx) hist->value), hist_list);
+ hist_list = alloc_EXPR_LIST (0,
+ copy_rtx (hist->hvalue.rtl.value), hist_list);
hist_list = alloc_EXPR_LIST (0, GEN_INT (hist->type), hist_list);
- REG_NOTES ((rtx) hist->insn) =
- alloc_EXPR_LIST (REG_VALUE_PROFILE, hist_list,
- REG_NOTES ((rtx) hist->insn));
+ REG_NOTES (hist->hvalue.rtl.insn) =
+ alloc_EXPR_LIST (REG_VALUE_PROFILE, hist_list,
+ REG_NOTES (hist->hvalue.rtl.insn));
}
+ else
+ {
+ tree stmt = hist->hvalue.tree.stmt;
+ stmt_ann_t ann = get_stmt_ann (stmt);
+ hist->hvalue.tree.next = ann->histograms;
+ ann->histograms = hist;
+ hist->hvalue.tree.counters =
+ xmalloc (sizeof (gcov_type) * hist->n_counters);
+ for (j = 0; j < hist->n_counters; j++)
+ hist->hvalue.tree.counters[j] = aact_count[j];
+ }
}
for (t = 0; t < GCOV_N_VALUE_COUNTERS; t++)
@@ -1104,8 +1112,7 @@ branch_prob (void)
n_instrumented = instrument_edges (el);
- if (n_instrumented != num_instrumented)
- abort ();
+ gcc_assert (n_instrumented == num_instrumented);
if (flag_profile_values)
instrument_values (values);
@@ -1165,8 +1172,7 @@ union_groups (basic_block bb1, basic_block bb2)
/* ??? I don't have a place for the rank field. OK. Lets go w/o it,
this code is unlikely going to be performance problem anyway. */
- if (bb1g == bb2g)
- abort ();
+ gcc_assert (bb1g != bb2g);
bb1g->aux = bb2g;
}
@@ -1310,9 +1316,8 @@ end_branch_prob (void)
void
tree_register_profile_hooks (void)
{
+ gcc_assert (ir_type ());
profile_hooks = &tree_profile_hooks;
- if (!ir_type ())
- abort ();
}
/* Set up hooks to enable RTL-based profiling. */
@@ -1320,7 +1325,6 @@ tree_register_profile_hooks (void)
void
rtl_register_profile_hooks (void)
{
+ gcc_assert (!ir_type ());
profile_hooks = &rtl_profile_hooks;
- if (ir_type ())
- abort ();
}