aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcov.cc
diff options
context:
space:
mode:
authorJørgen Kvalsvik <j@lambda.is>2024-06-04 14:16:22 +0200
committerJørgen Kvalsvik <j@lambda.is>2024-06-26 12:19:34 +0200
commit7a9b535d8abe27abdaa68cdcb22172a666030d06 (patch)
tree32f1ac0fd38eaf6fb2be1aa996b338579490f1b0 /gcc/gcov.cc
parent0bf002100453a0f531855c093f095dc15274a78c (diff)
downloadgcc-7a9b535d8abe27abdaa68cdcb22172a666030d06.zip
gcc-7a9b535d8abe27abdaa68cdcb22172a666030d06.tar.gz
gcc-7a9b535d8abe27abdaa68cdcb22172a666030d06.tar.bz2
Record edge true/false value for gcov
Make gcov aware which edges are the true/false to more accurately reconstruct the CFG. There are plenty of bits left in arc_info and it opens up for richer reporting. gcc/ChangeLog: * gcov-io.h (GCOV_ARC_TRUE): New. (GCOV_ARC_FALSE): New. * gcov.cc (struct arc_info): Add true_value, false_value. (read_graph_file): Read true_value, false_value. * profile.cc (branch_prob): Write GCOV_ARC_TRUE, GCOV_ARC_FALSE.
Diffstat (limited to 'gcc/gcov.cc')
-rw-r--r--gcc/gcov.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/gcov.cc b/gcc/gcov.cc
index 6f30557..2e4bd9d 100644
--- a/gcc/gcov.cc
+++ b/gcc/gcov.cc
@@ -117,6 +117,12 @@ struct arc_info
/* Loop making arc. */
unsigned int cycle : 1;
+ /* Is a true arc. */
+ unsigned int true_value : 1;
+
+ /* Is a false arc. */
+ unsigned int false_value : 1;
+
/* Links to next arc on src and dst lists. */
struct arc_info *succ_next;
struct arc_info *pred_next;
@@ -2010,6 +2016,8 @@ read_graph_file (void)
arc->on_tree = !!(flags & GCOV_ARC_ON_TREE);
arc->fake = !!(flags & GCOV_ARC_FAKE);
arc->fall_through = !!(flags & GCOV_ARC_FALLTHROUGH);
+ arc->true_value = !!(flags & GCOV_ARC_TRUE);
+ arc->false_value = !!(flags & GCOV_ARC_FALSE);
arc->succ_next = src_blk->succ;
src_blk->succ = arc;