Fixed llvm-cov to count edges instead of blocks.
authorYuchen Wu <yuchenericwu@hotmail.com>
Thu, 24 Oct 2013 01:51:04 +0000 (01:51 +0000)
committerYuchen Wu <yuchenericwu@hotmail.com>
Thu, 24 Oct 2013 01:51:04 +0000 (01:51 +0000)
commit887c20ffc2691c26be081da69fb8844cdbf63832
treefe9526c2397d5b1075458c5a991ea515682b3cb6
parentb32b95d814704b1e1a13240ab74d5a4b6f5594cb
Fixed llvm-cov to count edges instead of blocks.

This was a fundamental flaw in llvm-cov where it treated the values in
the GCDA files as block counts instead of edge counts. This created
incorrect line counts when branching was present. Instead, the edge
counts should be summed to obtain the correct block count.

The fix was tested using custom test files as well as single source
files from the test-suite directory. The behaviour can be verified by
reading the GCOV documentation that describes the GCDA spec ("ARC_COUNTS
gives the counter values for those arcs that are instrumented") and the
header description provided by GCOVProfiling.cpp ("instruments the code
that runs to records (sic) the edges between blocks that run and emit a
complementary "gcda" file on exit").

llvm-svn: 193299
llvm/include/llvm/Support/GCOV.h
llvm/lib/IR/GCOV.cpp