diff options
author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-03 23:35:42 +0000 |
---|---|---|
committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-02-03 23:35:42 +0000 |
commit | 553eb299aadfe54096cf60a3331eb520e169e0f6 (patch) | |
tree | d998d2832e7420def69a99beb6da3a0cadc8cdf5 /gcc | |
parent | 67c3f5800258cc7f24b26b3a62e43eb30eee6df4 (diff) | |
download | gcc-553eb299aadfe54096cf60a3331eb520e169e0f6.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121554 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/gcov-io.h | 8 | ||||
-rw-r--r-- | gcc/value-prof.c | 18 |
3 files changed, 26 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 77e9964be19..d8ee26993cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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, diff --git a/gcc/gcov-io.h b/gcc/gcov-io.h index 61f3c667d2e..a874b32dc62 100644 --- a/gcc/gcov-io.h +++ b/gcc/gcov-io.h @@ -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 diff --git a/gcc/value-prof.c b/gcc/value-prof.c index 0d5f0411e1d..b03e6777ae8 100644 --- a/gcc/value-prof.c +++ b/gcc/value-prof.c @@ -1434,12 +1434,17 @@ stringop_block_profile (tree stmt, unsigned int *expected_align, 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, unsigned int *expected_align, 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_values *values) 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: |