PR gcov-profile/30650

Jan Hubicka jh@suse.cz
Sat Feb 3 23:37:00 GMT 2007


Hi,
this patch fixes division by zero bug and wrong computation of AVERAGE
counter in my patch for stringop profiling.  This reproduce during
profiled bootstrap. It also fixes a comments and counter counts as
noticed by Richard Guenther.

profiledbootstrapped/regtested i686-linux, installed.

Honza

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 121553)
+++ ChangeLog	(working copy)
@@ -1,3 +1,11 @@
+2007-02-03  Jan Hubicka  <jh@suse.cz>
+
+	PR gcov-profile/30650
+	* value-prof.c (stringop_block_profile): Fix handling of size counter;
+	do not divide by zero for never executed counters.
+	(tree_find_values_to_profile): Fix counters.
+	* gcov-ui.h (GCOV_COUNTER_AVERAGE, GCOV_COUNTER_IOR): Fix comments.
+
 2007-02-03  Ian Lance Taylor  <iant@google.com>
 
 	* lower-subreg.c (simple_move_operand): New static function,
Index: value-prof.c
===================================================================
--- value-prof.c	(revision 121553)
+++ value-prof.c	(working copy)
@@ -1434,12 +1434,17 @@ stringop_block_profile (tree stmt, unsig
   histogram = gimple_histogram_value_of_type (cfun, stmt, HIST_TYPE_AVERAGE);
   if (!histogram)
     *expected_size = -1;
+  else if (!histogram->hvalue.counters[1])
+    {
+      *expected_size = -1;
+      gimple_remove_histogram_value (cfun, stmt, histogram);
+    }
   else
     {
       gcov_type size;
       size = ((histogram->hvalue.counters[0]
-	      + histogram->hvalue.counters[0] / 2)
-	       / histogram->hvalue.counters[0]);
+	      + histogram->hvalue.counters[1] / 2)
+	       / histogram->hvalue.counters[1]);
       /* Even if we can hold bigger value in SIZE, INT_MAX
 	 is safe "infinity" for code generation strategies.  */
       if (size > INT_MAX)
@@ -1450,6 +1455,11 @@ stringop_block_profile (tree stmt, unsig
   histogram = gimple_histogram_value_of_type (cfun, stmt, HIST_TYPE_IOR);
   if (!histogram)
     *expected_align = 0;
+  else if (!histogram->hvalue.counters[0])
+    {
+      gimple_remove_histogram_value (cfun, stmt, histogram);
+      *expected_align = 0;
+    }
   else
     {
       gcov_type count;
@@ -1661,11 +1671,11 @@ tree_find_values_to_profile (histogram_v
 	  break;
 
 	case HIST_TYPE_AVERAGE:
-	  hist->n_counters = 3;
+	  hist->n_counters = 2;
 	  break;
 
 	case HIST_TYPE_IOR:
-	  hist->n_counters = 3;
+	  hist->n_counters = 1;
 	  break;
 
 	default:
Index: gcov-io.h
===================================================================
--- gcov-io.h	(revision 121553)
+++ gcov-io.h	(working copy)
@@ -329,10 +329,10 @@ typedef HOST_WIDEST_INT gcov_type;
 				      consecutive values of expression.  */
 
 #define GCOV_COUNTER_V_INDIR	5  /* The most common indirect address */
-#define GCOV_COUNTER_AVERAGE	6  /* The most common difference between
-				      consecutive values of expression.  */
-#define GCOV_COUNTER_IOR	7  /* The most common difference between
-				      consecutive values of expression.  */
+#define GCOV_COUNTER_AVERAGE	6  /* Compute average value passed to the
+				      counter.  */
+#define GCOV_COUNTER_IOR	7  /* IOR of the all values passed to
+				      counter.  */
 #define GCOV_LAST_VALUE_COUNTER 7  /* The last of counters used for value
 				      profiling.  */
 #define GCOV_COUNTERS		8



More information about the Gcc-patches mailing list