diff options
Diffstat (limited to 'gcc/profile.c')
-rw-r--r-- | gcc/profile.c | 58 |
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 (); } |