diff options
author | cpopetz <cpopetz@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-11-10 17:17:15 +0000 |
---|---|---|
committer | cpopetz <cpopetz@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-11-10 17:17:15 +0000 |
commit | 887f59f0e42368a418f8eef9eea15b666493b5ad (patch) | |
tree | ab47712e15147a92950972c9fe18941868e1019a /gcc/gcov.c | |
parent | bd41a79ee42d515c1e9d575fca34663312a2431e (diff) | |
download | gcc-887f59f0e42368a418f8eef9eea15b666493b5ad.tar.gz |
* gcov.c (struct arcdata): Add hits and total, remove prob.
(output_branch_counts): New.
(process_args): Set output_branch_counts if -c.
(calculate_branch_probs): Store hits and total instead of
percentage.
(output_data): Emit counts if output_branch_counts is true.
* gcov.texi (Invoking Gcov): Document -c switch..
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@30476 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gcov.c')
-rw-r--r-- | gcc/gcov.c | 66 |
1 files changed, 47 insertions, 19 deletions
diff --git a/gcc/gcov.c b/gcc/gcov.c index 822531cce09..46e0c435c33 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -138,7 +138,8 @@ struct bb_info { struct arcdata { - int prob; + int hits; + int total; int call_insn; struct arcdata *next; }; @@ -213,6 +214,11 @@ static int output_function_summary = 0; static char *object_directory = 0; +/* Output the number of times a branch was taken as opposed to the percentage + of times it was taken. Turned on by the -c option */ + +static int output_branch_counts = 0; + /* Forward declarations. */ static void process_args PROTO ((int, char **)); static void open_files PROTO ((void)); @@ -314,6 +320,8 @@ process_args (argc, argv) { if (argv[i][1] == 'b') output_branch_probs = 1; + else if (argv[i][1] == 'c') + output_branch_counts = 1; else if (argv[i][1] == 'v') fputs (gcov_version_string, stderr); else if (argv[i][1] == 'n') @@ -878,10 +886,11 @@ calculate_branch_probs (current_graph, block_num, branch_probs, last_line_num) continue; a_ptr = (struct arcdata *) xmalloc (sizeof (struct arcdata)); + a_ptr->total = total; if (total == 0) - a_ptr->prob = -1; + a_ptr->hits = 0; else - a_ptr->prob = ((arcptr->arc_count * 100) + (total >> 1)) / total; + a_ptr->hits = arcptr->arc_count; a_ptr->call_insn = arcptr->fake; if (output_function_summary) @@ -889,15 +898,15 @@ calculate_branch_probs (current_graph, block_num, branch_probs, last_line_num) if (a_ptr->call_insn) { function_calls++; - if (a_ptr->prob != -1) + if (a_ptr->total != 0) function_calls_executed++; } else { function_branches++; - if (a_ptr->prob != -1) + if (a_ptr->total != 0) function_branches_executed++; - if (a_ptr->prob > 0) + if (a_ptr->hits > 0) function_branches_taken++; } } @@ -1180,15 +1189,15 @@ output_data () if (a_ptr->call_insn) { total_calls++; - if (a_ptr->prob != -1) + if (a_ptr->total != 0) total_calls_executed++; } else { total_branches++; - if (a_ptr->prob != -1) + if (a_ptr->total != 0) total_branches_executed++; - if (a_ptr->prob > 0) + if (a_ptr->hits > 0) total_branches_taken++; } } @@ -1336,24 +1345,43 @@ output_data () { if (a_ptr->call_insn) { - if (a_ptr->prob == -1) + if (a_ptr->total == 0) fnotice (gcov_file, "call %d never executed\n", i); - else - fnotice (gcov_file, - "call %d returns = %d%%\n", - i, 100 - a_ptr->prob); + else + { + if (output_branch_counts) + fnotice (gcov_file, + "call %d returns = %d\n", + i, a_ptr->total - a_ptr->hits); + else + fnotice (gcov_file, + "call %d returns = %d%%\n", + i, 100 - ((a_ptr->hits * 100) + + (a_ptr->total >> 1))/a_ptr->total); + } } else { - if (a_ptr->prob == -1) + if (a_ptr->total == 0) fnotice (gcov_file, "branch %d never executed\n", i); else - fnotice (gcov_file, "branch %d taken = %d%%\n", i, - a_ptr->prob); + { + if (output_branch_counts) + fnotice (gcov_file, + "branch %d taken = %d\n", + i, a_ptr->hits); + else + fnotice (gcov_file, + "branch %d taken = %d%%\n", i, + ((a_ptr->hits * 100) + + (a_ptr->total >> 1))/ + a_ptr->total); + + } } - } - } + } + } /* Gracefully handle errors while reading the source file. */ if (retval == NULL) |