[llvm-dev] My experience using -DLLVM_BUILD_INSTRUMENTED_COVERAGE to generate coverage

Friedman, Eli via llvm-dev llvm-dev at lists.llvm.org
Fri Jun 16 18:08:08 PDT 2017

I've started looking at the state of code coverage recently; we figured 
LLVM itself would be a good test to figure out how mature it is, so I 
gave it a shot.  My experience:

1. You have to specify -DLLVM_USE_LINKER=gold (or maybe lld works; I 
didn't try).  If you link with binutils ld, the program will generate 
broken profile information.  Apparently, the linked binary is missing 
the __llvm_prf_names section.  This took me half a day to figure out.  
This issue isn't documented anywhere, and the only error message I got 
was "Assertion `!Key.empty()' failed." from llvm-cov.

2. The generated binaries are big and slow.  Comparing to a build 
without coverage, llc becomes 8x larger overall (text section becomes 
roughly 2x larger).  And check-llvm-codegen-arm goes from 3 seconds to 
250 seconds.

3. The generated profile information takes up a lot of space: llc 
generates a 90MB profraw file.

4. When prepare-code-coverage-artifact.py invokes llvm-profdata for the 
profiles generated by "make check", it takes 50GB of memory to process 
about 1.5GB of profiles.  Is it supposed to use that much?

5. Using prepare-code-coverage-artifact.py generates "warning: 229 
functions have mismatched data".  I'm not sure what's causing this... I 
guess it has something to do with merging the profile data for multiple 
binaries?  The error message is not very helpful.

5. The HTML output highlights the semicolon after a break or return 
statement in some switch statements in red.  (For example, 
LowerADDC_ADDE_SUBC_SUBE in ARMISelLowering.cpp.)  Not really important, 
but annoying.

6. On the bright side, when it works, the generated coverage information 
is precise and easy to read.


Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project

More information about the llvm-dev mailing list