This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Clean up value-prof.c a bit.


Hi.

The patch is a small clean up.

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

gcc/ChangeLog:

2019-08-16  Martin Liska  <mliska@suse.cz>

	* profile.c (instrument_values): Do not set
	0 as last argument.
	* tree-profile.c (gimple_gen_interval_profiler): Remove
	last argument.
	(gimple_gen_pow2_profiler): Likewise.
	(gimple_gen_topn_values_profiler): Likewise.
	(gimple_gen_ic_profiler): Likewise.
	(gimple_gen_time_profiler): Likewise.
	(gimple_gen_average_profiler): Likewise.
	(gimple_gen_ior_profiler): Likewise.
	* value-prof.c (dump_histogram_value): Use default
	in switch statement instead of HIST_TYPE_MAX.
	(stream_in_histogram_value): Likewise.
	(gimple_duplicate_stmt_histograms): Do not
	use NULL for implicitly set arguments.
	(gimple_divmod_values_to_profile): Do not use
	reserve+quick_push.
	(gimple_indirect_call_to_profile): Likewise.
	(gimple_find_values_to_profile): Use implicit
	function call arguments.
	* value-prof.h (gimple_alloc_histogram_value):
	Set default values.
	(gimple_gen_interval_profiler): Remove last argument.
	(gimple_gen_pow2_profiler): Likewise.
	(gimple_gen_topn_values_profiler): Likewise.
	(gimple_gen_ic_profiler): Likewise.
	(gimple_gen_time_profiler): Likewise.
	(gimple_gen_average_profiler): Likewise.
	(gimple_gen_ior_profiler): Likewise.
---
 gcc/profile.c      | 14 +++++++-------
 gcc/tree-profile.c | 36 +++++++++++++++++-------------------
 gcc/value-prof.c   | 36 ++++++++++++++++--------------------
 gcc/value-prof.h   | 18 +++++++++---------
 4 files changed, 49 insertions(+), 55 deletions(-)


diff --git a/gcc/profile.c b/gcc/profile.c
index 6c8127ab3de..8d39a7d094e 100644
--- a/gcc/profile.c
+++ b/gcc/profile.c
@@ -160,31 +160,31 @@ instrument_values (histogram_values values)
       switch (hist->type)
 	{
 	case HIST_TYPE_INTERVAL:
-	  gimple_gen_interval_profiler (hist, t, 0);
+	  gimple_gen_interval_profiler (hist, t);
 	  break;
 
 	case HIST_TYPE_POW2:
-	  gimple_gen_pow2_profiler (hist, t, 0);
+	  gimple_gen_pow2_profiler (hist, t);
 	  break;
 
 	case HIST_TYPE_TOPN_VALUES:
-	  gimple_gen_topn_values_profiler (hist, t, 0);
+	  gimple_gen_topn_values_profiler (hist, t);
 	  break;
 
  	case HIST_TYPE_INDIR_CALL:
- 	  gimple_gen_ic_profiler (hist, t, 0);
+	  gimple_gen_ic_profiler (hist, t);
   	  break;
 
 	case HIST_TYPE_AVERAGE:
-	  gimple_gen_average_profiler (hist, t, 0);
+	  gimple_gen_average_profiler (hist, t);
 	  break;
 
 	case HIST_TYPE_IOR:
-	  gimple_gen_ior_profiler (hist, t, 0);
+	  gimple_gen_ior_profiler (hist, t);
 	  break;
 
 	case HIST_TYPE_TIME_PROFILE:
-	  gimple_gen_time_profiler (t, 0);
+	  gimple_gen_time_profiler (t);
 	  break;
 
 	default:
diff --git a/gcc/tree-profile.c b/gcc/tree-profile.c
index 554a8c98419..4c1ead5781f 100644
--- a/gcc/tree-profile.c
+++ b/gcc/tree-profile.c
@@ -293,11 +293,11 @@ prepare_instrumented_value (gimple_stmt_iterator *gsi, histogram_value value)
    tag of the section for counters, BASE is offset of the counter position.  */
 
 void
-gimple_gen_interval_profiler (histogram_value value, unsigned tag, unsigned base)
+gimple_gen_interval_profiler (histogram_value value, unsigned tag)
 {
   gimple *stmt = value->hvalue.stmt;
   gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
-  tree ref = tree_coverage_counter_ref (tag, base), ref_ptr;
+  tree ref = tree_coverage_counter_ref (tag, 0), ref_ptr;
   gcall *call;
   tree val;
   tree start = build_int_cst_type (integer_type_node,
@@ -316,14 +316,14 @@ gimple_gen_interval_profiler (histogram_value value, unsigned tag, unsigned base
 
 /* Output instructions as GIMPLE trees to increment the power of two histogram
    counter.  VALUE is the expression whose value is profiled.  TAG is the tag
-   of the section for counters, BASE is offset of the counter position.  */
+   of the section for counters.  */
 
 void
-gimple_gen_pow2_profiler (histogram_value value, unsigned tag, unsigned base)
+gimple_gen_pow2_profiler (histogram_value value, unsigned tag)
 {
   gimple *stmt = value->hvalue.stmt;
   gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
-  tree ref_ptr = tree_coverage_counter_addr (tag, base);
+  tree ref_ptr = tree_coverage_counter_addr (tag, 0);
   gcall *call;
   tree val;
 
@@ -336,15 +336,14 @@ gimple_gen_pow2_profiler (histogram_value value, unsigned tag, unsigned base)
 
 /* Output instructions as GIMPLE trees for code to find the most N common
    values.  VALUE is the expression whose value is profiled.  TAG is the tag
-   of the section for counters, BASE is offset of the counter position.  */
+   of the section for counters.  */
 
 void
-gimple_gen_topn_values_profiler (histogram_value value, unsigned tag,
-				 unsigned base)
+gimple_gen_topn_values_profiler (histogram_value value, unsigned tag)
 {
   gimple *stmt = value->hvalue.stmt;
   gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
-  tree ref_ptr = tree_coverage_counter_addr (tag, base);
+  tree ref_ptr = tree_coverage_counter_addr (tag, 0);
   gcall *call;
   tree val;
 
@@ -359,17 +358,16 @@ gimple_gen_topn_values_profiler (histogram_value value, unsigned tag,
 /* Output instructions as GIMPLE trees for code to find the most
    common called function in indirect call.
    VALUE is the call expression whose indirect callee is profiled.
-   TAG is the tag of the section for counters, BASE is offset of the
-   counter position.  */
+   TAG is the tag of the section for counters.  */
 
 void
-gimple_gen_ic_profiler (histogram_value value, unsigned tag, unsigned base)
+gimple_gen_ic_profiler (histogram_value value, unsigned tag)
 {
   tree tmp1;
   gassign *stmt1, *stmt2, *stmt3;
   gimple *stmt = value->hvalue.stmt;
   gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
-  tree ref_ptr = tree_coverage_counter_addr (tag, base);
+  tree ref_ptr = tree_coverage_counter_addr (tag, 0);
 
   ref_ptr = force_gimple_operand_gsi (&gsi, ref_ptr,
 				      true, NULL_TREE, true, GSI_SAME_STMT);
@@ -485,7 +483,7 @@ gimple_gen_ic_func_profiler (void)
    counter position and GSI is the iterator we place the counter.  */
 
 void
-gimple_gen_time_profiler (unsigned tag, unsigned base)
+gimple_gen_time_profiler (unsigned tag)
 {
   tree type = get_gcov_type ();
   basic_block entry = ENTRY_BLOCK_PTR_FOR_FN (cfun);
@@ -504,7 +502,7 @@ gimple_gen_time_profiler (unsigned tag, unsigned base)
   e->probability = true_edge->probability.invert ();
 
   gimple_stmt_iterator gsi = gsi_start_bb (cond_bb);
-  tree original_ref = tree_coverage_counter_ref (tag, base);
+  tree original_ref = tree_coverage_counter_ref (tag, 0);
   tree ref = force_gimple_operand_gsi (&gsi, original_ref, true, NULL_TREE,
 				       true, GSI_SAME_STMT);
   tree one = build_int_cst (type, 1);
@@ -564,11 +562,11 @@ gimple_gen_time_profiler (unsigned tag, unsigned base)
    tag of the section for counters, BASE is offset of the counter position.  */
 
 void
-gimple_gen_average_profiler (histogram_value value, unsigned tag, unsigned base)
+gimple_gen_average_profiler (histogram_value value, unsigned tag)
 {
   gimple *stmt = value->hvalue.stmt;
   gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
-  tree ref_ptr = tree_coverage_counter_addr (tag, base);
+  tree ref_ptr = tree_coverage_counter_addr (tag, 0);
   gcall *call;
   tree val;
 
@@ -585,11 +583,11 @@ gimple_gen_average_profiler (histogram_value value, unsigned tag, unsigned base)
    tag of the section for counters, BASE is offset of the counter position.  */
 
 void
-gimple_gen_ior_profiler (histogram_value value, unsigned tag, unsigned base)
+gimple_gen_ior_profiler (histogram_value value, unsigned tag)
 {
   gimple *stmt = value->hvalue.stmt;
   gimple_stmt_iterator gsi = gsi_for_stmt (stmt);
-  tree ref_ptr = tree_coverage_counter_addr (tag, base);
+  tree ref_ptr = tree_coverage_counter_addr (tag, 0);
   gcall *call;
   tree val;
 
diff --git a/gcc/value-prof.c b/gcc/value-prof.c
index 00ede8d985f..55ea0973a03 100644
--- a/gcc/value-prof.c
+++ b/gcc/value-prof.c
@@ -300,7 +300,7 @@ dump_histogram_value (FILE *dump_file, histogram_value hist)
 	fprintf (dump_file, "Time profile time:%" PRId64 ".\n",
 		 (int64_t) hist->hvalue.counters[0]);
       break;
-    case HIST_TYPE_MAX:
+    default:
       gcc_unreachable ();
    }
 }
@@ -360,7 +360,7 @@ stream_in_histogram_value (class lto_input_block *ib, gimple *stmt)
       bp = streamer_read_bitpack (ib);
       type = bp_unpack_enum (&bp, hist_type, HIST_TYPE_MAX);
       next = bp_unpack_value (&bp, 1);
-      new_val = gimple_alloc_histogram_value (cfun, type, stmt, NULL);
+      new_val = gimple_alloc_histogram_value (cfun, type, stmt);
       switch (type)
 	{
 	case HIST_TYPE_INTERVAL:
@@ -384,7 +384,7 @@ stream_in_histogram_value (class lto_input_block *ib, gimple *stmt)
 	  ncounters = 1;
 	  break;
 
-	case HIST_TYPE_MAX:
+	default:
 	  gcc_unreachable ();
 	}
       new_val->hvalue.counters = XNEWVAR (gcov_type, sizeof (*new_val->hvalue.counters) * ncounters);
@@ -429,7 +429,7 @@ gimple_duplicate_stmt_histograms (struct function *fun, gimple *stmt,
   histogram_value val;
   for (val = gimple_histogram_value (ofun, ostmt); val != NULL; val = val->hvalue.next)
     {
-      histogram_value new_val = gimple_alloc_histogram_value (fun, val->type, NULL, NULL);
+      histogram_value new_val = gimple_alloc_histogram_value (fun, val->type);
       memcpy (new_val, val, sizeof (*val));
       new_val->hvalue.stmt = stmt;
       new_val->hvalue.counters = XNEWVAR (gcov_type, sizeof (*new_val->hvalue.counters) * new_val->n_counters);
@@ -1791,14 +1791,12 @@ gimple_divmod_values_to_profile (gimple *stmt, histogram_values *values)
       divisor = gimple_assign_rhs2 (stmt);
       op0 = gimple_assign_rhs1 (stmt);
 
-      values->reserve (3);
-
       if (TREE_CODE (divisor) == SSA_NAME)
 	/* Check for the case where the divisor is the same value most
 	   of the time.  */
-	values->quick_push (gimple_alloc_histogram_value (cfun,
-						      HIST_TYPE_TOPN_VALUES,
-						      stmt, divisor));
+	values->safe_push (gimple_alloc_histogram_value (cfun,
+							 HIST_TYPE_TOPN_VALUES,
+							 stmt, divisor));
 
       /* For mod, check whether it is not often a noop (or replaceable by
 	 a few subtractions).  */
@@ -1808,16 +1806,15 @@ gimple_divmod_values_to_profile (gimple *stmt, histogram_values *values)
 	{
           tree val;
           /* Check for a special case where the divisor is power of 2.  */
-	  values->quick_push (gimple_alloc_histogram_value (cfun,
-		                                            HIST_TYPE_POW2,
-							    stmt, divisor));
-
+	  values->safe_push (gimple_alloc_histogram_value (cfun,
+							   HIST_TYPE_POW2,
+							   stmt, divisor));
 	  val = build2 (TRUNC_DIV_EXPR, type, op0, divisor);
 	  hist = gimple_alloc_histogram_value (cfun, HIST_TYPE_INTERVAL,
 					       stmt, val);
 	  hist->hdata.intvl.int_start = 0;
 	  hist->hdata.intvl.steps = 2;
-	  values->quick_push (hist);
+	  values->safe_push (hist);
 	}
       return;
 
@@ -1840,11 +1837,9 @@ gimple_indirect_call_to_profile (gimple *stmt, histogram_values *values)
     return;
 
   callee = gimple_call_fn (stmt);
-
-  values->reserve (3);
-
-  values->quick_push (gimple_alloc_histogram_value (cfun, HIST_TYPE_INDIR_CALL,
-						    stmt, callee));
+  histogram_value v = gimple_alloc_histogram_value (cfun, HIST_TYPE_INDIR_CALL,
+						    stmt, callee);
+  values->safe_push (v);
 
   return;
 }
@@ -1911,7 +1906,8 @@ gimple_find_values_to_profile (histogram_values *values)
     for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
       gimple_values_to_profile (gsi_stmt (gsi), values);
 
-  values->safe_push (gimple_alloc_histogram_value (cfun, HIST_TYPE_TIME_PROFILE, 0, 0));
+  values->safe_push (gimple_alloc_histogram_value (cfun,
+						   HIST_TYPE_TIME_PROFILE));
 
   FOR_EACH_VEC_ELT (*values, i, hist)
     {
diff --git a/gcc/value-prof.h b/gcc/value-prof.h
index 1078722163b..77c06f60096 100644
--- a/gcc/value-prof.h
+++ b/gcc/value-prof.h
@@ -73,7 +73,8 @@ extern void gimple_find_values_to_profile (histogram_values *);
 extern bool gimple_value_profile_transformations (void);
 
 histogram_value gimple_alloc_histogram_value (struct function *, enum hist_type,
-					      gimple *stmt, tree);
+					      gimple *stmt = NULL,
+					      tree value = NULL_TREE);
 histogram_value gimple_histogram_value (struct function *, gimple *);
 histogram_value gimple_histogram_value_of_type (struct function *, gimple *,
 						enum hist_type);
@@ -97,15 +98,14 @@ bool get_nth_most_common_value (gimple *stmt, const char *counter_type,
 /* In tree-profile.c.  */
 extern void gimple_init_gcov_profiler (void);
 extern void gimple_gen_edge_profiler (int, edge);
-extern void gimple_gen_interval_profiler (histogram_value, unsigned, unsigned);
-extern void gimple_gen_pow2_profiler (histogram_value, unsigned, unsigned);
-extern void gimple_gen_topn_values_profiler (histogram_value, unsigned,
-					     unsigned);
-extern void gimple_gen_ic_profiler (histogram_value, unsigned, unsigned);
+extern void gimple_gen_interval_profiler (histogram_value, unsigned);
+extern void gimple_gen_pow2_profiler (histogram_value, unsigned);
+extern void gimple_gen_topn_values_profiler (histogram_value, unsigned);
+extern void gimple_gen_ic_profiler (histogram_value, unsigned);
 extern void gimple_gen_ic_func_profiler (void);
-extern void gimple_gen_time_profiler (unsigned, unsigned);
-extern void gimple_gen_average_profiler (histogram_value, unsigned, unsigned);
-extern void gimple_gen_ior_profiler (histogram_value, unsigned, unsigned);
+extern void gimple_gen_time_profiler (unsigned);
+extern void gimple_gen_average_profiler (histogram_value, unsigned);
+extern void gimple_gen_ior_profiler (histogram_value, unsigned);
 extern void stream_out_histogram_value (struct output_block *, histogram_value);
 extern void stream_in_histogram_value (class lto_input_block *, gimple *);
 extern struct cgraph_node* find_func_by_profile_id (int func_id);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]