|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init, llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4, llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1 |
|
| #
1c99f650 |
| 15-Mar-2022 |
Igor Kudrin <[email protected]> |
[llvm-cov gcov] Fix calculating coverage of template functions
Template functions share the same lines in source files, so the common container of lines' properties cannot be used to calculate the c
[llvm-cov gcov] Fix calculating coverage of template functions
Template functions share the same lines in source files, so the common container of lines' properties cannot be used to calculate the coverage statistics of individual functions.
> cat tmpl.cpp template <int N> int test() { return N; } int main() { return test<1>() + test<2>(); } > clang++ --coverage tmpl.cpp -o tmpl > ./tmpl > llvm-cov gcov tmpl.cpp -f ... Function '_Z4testILi1EEiv' Lines executed:100.00% of 1
Function '_Z4testILi2EEiv' Lines executed:-nan% of 0 ... > llvm-cov-patched gcov tmpl.cpp -f ... Function '_Z4testILi1EEiv' Lines executed:100.00% of 1
Function '_Z4testILi2EEiv' Lines executed:100.00% of 1 ...
Differential Revision: https://reviews.llvm.org/D121390
show more ...
|
|
Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2 |
|
| #
fc97efa4 |
| 23-Feb-2022 |
serge-sans-paille <[email protected]> |
Cleanup includes: ProfileData
Estimation of the impact on preprocessor output:
before: 1067349756 after: 1065940348
Discourse thread: https://discourse.llvm.org/t/include-what-you-use-include-clea
Cleanup includes: ProfileData
Estimation of the impact on preprocessor output:
before: 1067349756 after: 1065940348
Discourse thread: https://discourse.llvm.org/t/include-what-you-use-include-cleanup Differential Revision: https://reviews.llvm.org/D120434
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2 |
|
| #
2aed0813 |
| 07-Jan-2022 |
Kazu Hirata <[email protected]> |
[llvm] Use true/false instead of 1/0 (NFC)
Identified with modernize-use-bool-literals.
|
|
Revision tags: llvmorg-13.0.1-rc1, llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2, llvmorg-13.0.0-rc1, llvmorg-14-init, llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3 |
|
| #
0873016c |
| 20-Jun-2021 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Support GCC 12 format
GCC 12 will change the length field to represent the number of bytes instead of 32-bit words. This avoids padding for strings.
|
| #
e85eecff |
| 20-Jun-2021 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Change case to match the prevailing style && replace getString with readString
|
|
Revision tags: llvmorg-12.0.1-rc2, llvmorg-12.0.1-rc1, llvmorg-12.0.0, llvmorg-12.0.0-rc5 |
|
| #
82b3e28e |
| 06-Apr-2021 |
Abhina Sreeskantharajan <[email protected]> |
[SystemZ][z/OS][Windows] Add new OF_TextWithCRLF flag and use this flag instead of OF_Text
Problem: On SystemZ we need to open text files in text mode. On Windows, files opened in text mode adds a C
[SystemZ][z/OS][Windows] Add new OF_TextWithCRLF flag and use this flag instead of OF_Text
Problem: On SystemZ we need to open text files in text mode. On Windows, files opened in text mode adds a CRLF '\r\n' which may not be desirable.
Solution: This patch adds two new flags
- OF_CRLF which indicates that CRLF translation is used. - OF_TextWithCRLF = OF_Text | OF_CRLF indicates that the file is text and uses CRLF translation.
Developers should now use either the OF_Text or OF_TextWithCRLF for text files and OF_None for binary files. If the developer doesn't want carriage returns on Windows, they should use OF_Text, if they do want carriage returns on Windows, they should use OF_TextWithCRLF.
So this is the behaviour per platform with my patch:
z/OS: OF_None: open in binary mode OF_Text : open in text mode OF_TextWithCRLF: open in text mode
Windows: OF_None: open file with no carriage return OF_Text: open file with no carriage return OF_TextWithCRLF: open file with carriage return
The Major change is in llvm/lib/Support/Windows/Path.inc to only set text mode if the OF_CRLF is set. ``` if (Flags & OF_CRLF) CrtOpenFlags |= _O_TEXT; ```
These following files are the ones that still use OF_Text which I left unchanged. I modified all these except raw_ostream.cpp in recent patches so I know these were previously in Binary mode on Windows. ./llvm/lib/Support/raw_ostream.cpp ./llvm/lib/TableGen/Main.cpp ./llvm/tools/dsymutil/DwarfLinkerForBinary.cpp ./llvm/unittests/Support/Path.cpp ./clang/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp ./clang/lib/Frontend/CompilerInstance.cpp ./clang/lib/Driver/Driver.cpp ./clang/lib/Driver/ToolChains/Clang.cpp
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D99426
show more ...
|
|
Revision tags: llvmorg-12.0.0-rc4 |
|
| #
c83cd8fe |
| 25-Mar-2021 |
Abhina Sreeskantharajan <[email protected]> |
[NFC] Reordering parameters in getFile and getFileOrSTDIN
In future patches I will be setting the IsText parameter frequently so I will refactor the args to be in the following order. I have removed
[NFC] Reordering parameters in getFile and getFileOrSTDIN
In future patches I will be setting the IsText parameter frequently so I will refactor the args to be in the following order. I have removed the FileSize parameter because it is never used.
``` static ErrorOr<std::unique_ptr<MemoryBuffer>> getFile(const Twine &Filename, bool IsText = false, bool RequiresNullTerminator = true, bool IsVolatile = false);
static ErrorOr<std::unique_ptr<MemoryBuffer>> getFileOrSTDIN(const Twine &Filename, bool IsText = false, bool RequiresNullTerminator = true);
static ErrorOr<std::unique_ptr<MB>> getFileAux(const Twine &Filename, uint64_t MapSize, uint64_t Offset, bool IsText, bool RequiresNullTerminator, bool IsVolatile);
static ErrorOr<std::unique_ptr<WritableMemoryBuffer>> getFile(const Twine &Filename, bool IsVolatile = false); ```
Reviewed By: jhenderson
Differential Revision: https://reviews.llvm.org/D99182
show more ...
|
|
Revision tags: llvmorg-12.0.0-rc3, llvmorg-12.0.0-rc2, llvmorg-11.1.0, llvmorg-11.1.0-rc3, llvmorg-12.0.0-rc1, llvmorg-13-init, llvmorg-11.1.0-rc2, llvmorg-11.1.0-rc1 |
|
| #
f7463ca3 |
| 04-Jan-2021 |
Simon Pilgrim <[email protected]> |
[ProfileData] GCOVFile::readGCNO - silence undefined pointer warning. NFCI.
Silence clang static analyzer warning that 'fn' could still be in an undefined state - this shouldn't happen depending on
[ProfileData] GCOVFile::readGCNO - silence undefined pointer warning. NFCI.
Silence clang static analyzer warning that 'fn' could still be in an undefined state - this shouldn't happen depending on the likely tag order, but the analyzer can't know that.
show more ...
|
|
Revision tags: llvmorg-11.0.1, llvmorg-11.0.1-rc2 |
|
| #
7698a018 |
| 12-Dec-2020 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Replace Donald B. Johnson's cycle enumeration with iterative cycle finding
gcov computes the line execution count as the sum of (a) counts from predecessors on other lines and (b) th
[llvm-cov gcov] Replace Donald B. Johnson's cycle enumeration with iterative cycle finding
gcov computes the line execution count as the sum of (a) counts from predecessors on other lines and (b) the sum of loop execution counts of blocks on the same line (think of loops on one line).
For (b), we use Donald B. Johnson's cycle enumeration algorithm and perform cycle cancelling for each cycle. This number of candidate cycles were exponential and D93036 made it polynomial by skipping zero count cycles. The time complexity is high (O(V*E^2) (it could be O(E^2) but the linear `Blocks` check made it higher) and the implementation is complex.
We could just identify loops and sum all back edges. However, this requires a dominator tree construction which is more complex. The time complexity can be decreased to almost linear, though.
This patch just performs cycle cancelling iteratively. Add two members `traversable` and `incoming` to GCOVArc. There are 3 states:
* `!traversable`: blocks not on this line or explored blocks * `traversable && incoming == nullptr`: unexplored blocks * `traversable && incoming != nullptr`: blocks which are being explored (on the stack)
If an arc points to a block being explored, a cycle has been found.
Let E be the number of arcs. Every time a cycle is found, at least one arc is saturated (`edgeCount` reduced to 0), so there are at most E cycles. Finding one cycle takes O(E) time, so the overall time complexity is O(E^2). Note that we always augment through a back edge and never need to augment its reverse edge so reverse edges in traditional flow networks are not needed.
Reviewed By: xinhaoyuan
Differential Revision: https://reviews.llvm.org/D93073
show more ...
|
| #
97260ab4 |
| 10-Dec-2020 |
Xinhao Yuan <[email protected]> |
[llvm-cov][gcov] Optimize the cycle counting algorithm by skipping zero count cycles
This change is similar to http://gcc.gnu.org/PR90380
This reduces the complexity from exponential to polynomial
[llvm-cov][gcov] Optimize the cycle counting algorithm by skipping zero count cycles
This change is similar to http://gcc.gnu.org/PR90380
This reduces the complexity from exponential to polynomial of the arcs.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D93036
show more ...
|
|
Revision tags: llvmorg-11.0.1-rc1 |
|
| #
2980ce98 |
| 18-Oct-2020 |
Hubert Tong <[email protected]> |
Fix various format specifier mismatches
Format specifiers of incorrect length are replaced with format specifier macros from `<cinttypes>` matching the typedefs used to declare the type of the value
Fix various format specifier mismatches
Format specifiers of incorrect length are replaced with format specifier macros from `<cinttypes>` matching the typedefs used to declare the type of the value being printed.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D89637
show more ...
|
|
Revision tags: llvmorg-11.0.0, llvmorg-11.0.0-rc6, llvmorg-11.0.0-rc5, llvmorg-11.0.0-rc4, llvmorg-11.0.0-rc3 |
|
| #
c16417f6 |
| 17-Sep-2020 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Add --demangled-names (-m)
gcov 4.9 introduced the option.
|
| #
4d7b1945 |
| 14-Sep-2020 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Refactor counting and reporting
The current organization of FileInfo and its referenced utility functions of (GCOVFile, GCOVFunction, GCOVBlock) is messy. Some members of FileInfo ar
[llvm-cov gcov] Refactor counting and reporting
The current organization of FileInfo and its referenced utility functions of (GCOVFile, GCOVFunction, GCOVBlock) is messy. Some members of FileInfo are just copied from GCOVFile. FileInfo::print (.gcov output and --intermediate output) is interleaved with branch statistics and computation of line execution counts. --intermediate has to do redundant .gcov output to gather branch statistics.
This patch deletes lots of code and introduces a clearer work flow:
``` fn collectFunction for each block b for each line lineNum let line be LineInfo of the file on lineNum line.exists = 1 increment function's lines & linesExec if necessary increment line.count line.blocks.push_back(&b)
fn collectSourceLine compute cycle counts count = incoming_counts + cycle_counts if line.exists ++summary->lines if line.count ++summary->linesExec
fn collectSource for each line call collectSourceLine
fn main for each function call collectFunction print function summary for each source file call collectSource print file summary annotate the source file with line execution counts if -i print intermediate file ```
The output order of functions and files now follows the original order in .gcno files.
show more ...
|
| #
b2c32c90 |
| 13-Sep-2020 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Add -r (--relative-only) && -s (--source-prefix)
gcov 4.7 introduced the two options. https://sourceware.org/pipermail/gcc-patches/2011-November/328782.html
-r only dumps files with
[llvm-cov gcov] Add -r (--relative-only) && -s (--source-prefix)
gcov 4.7 introduced the two options. https://sourceware.org/pipermail/gcc-patches/2011-November/328782.html
-r only dumps files with relative paths or absolute paths with the prefix specified by -s. The two options are useful filtering out system header files.
show more ...
|
| #
8cf1ac97 |
| 13-Sep-2020 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Improve accuracy when some edges are not measured
Also guard against infinite recursion if GCOV_ARC_ON_TREE edges contain a cycle.
|
| #
6a9a0bfc |
| 09-Sep-2020 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Simply computation of line counts and exit block counter
|
| #
b9d08669 |
| 09-Sep-2020 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Compute unmeasured arc counts by Kirchhoff's circuit law
For a CFG G=(V,E), Knuth describes that by Kirchoff's circuit law, the minimum number of counters necessary is |E|-(|V|-1). T
[llvm-cov gcov] Compute unmeasured arc counts by Kirchhoff's circuit law
For a CFG G=(V,E), Knuth describes that by Kirchoff's circuit law, the minimum number of counters necessary is |E|-(|V|-1). The emitted edges form a spanning tree. libgcov emitted .gcda files leverages this optimization while clang --coverage's doesn't.
Propagate counts by Kirchhoff's circuit law so that llvm-cov gcov can correctly print line counts of gcc --coverage emitted files and enable the future improvement of clang --coverage.
show more ...
|
|
Revision tags: llvmorg-11.0.0-rc2, llvmorg-11.0.0-rc1 |
|
| #
2e74b6d8 |
| 19-Jul-2020 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Don't require NUL terminator when reading files
.gcno, .gcda and source files can be modified while we are reading them. If the concurrent modification of a file being read nullifies
[llvm-cov gcov] Don't require NUL terminator when reading files
.gcno, .gcda and source files can be modified while we are reading them. If the concurrent modification of a file being read nullifies the NUL terminator assumption, llvm-cov can trip over an assertion failure in MemoryBuffer::init. This is not so rare - the source files can be in an editor and .gcda can be written by an running process (if the process forks, when .gcda gets written is probably more unpredictable).
There is no accompanying test because an assertion failure requires data races with some involved setting.
show more ...
|
|
Revision tags: llvmorg-12-init, llvmorg-10.0.1, llvmorg-10.0.1-rc4, llvmorg-10.0.1-rc3, llvmorg-10.0.1-rc2 |
|
| #
c8b082a3 |
| 17-Jun-2020 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Support clang<11 fake 4.2 format
Test cases are restored from a3bed4bd3743b5fee1e66116a63089df742bcae1
|
| #
7f7cb79b |
| 16-Jun-2020 |
Fangrui Song <[email protected]> |
[llvm-cov gcov] Don't suppress .gcov output if .gcda is corrupted
If .gcda is corrupted, gcov continues to produce a .gcov and just assumes execution counts are zeros. This is reasonable, because th
[llvm-cov gcov] Don't suppress .gcov output if .gcda is corrupted
If .gcda is corrupted, gcov continues to produce a .gcov and just assumes execution counts are zeros. This is reasonable, because the program can corrupt its .gcda output. The code path should be similar to the code path without .gcda.
show more ...
|
| #
def21563 |
| 16-Jun-2020 |
Fangrui Song <[email protected]> |
[gcov] Add -i --intermediate-format
Between gcov 4.9~8, `gcov -i $file` prints coverage information to $file.gcov in an intermediate text format (single file, instead of $source.gcov for each source
[gcov] Add -i --intermediate-format
Between gcov 4.9~8, `gcov -i $file` prints coverage information to $file.gcov in an intermediate text format (single file, instead of $source.gcov for each source file).
lcov newer than 2019-05-24 detects -i support and uses it to increase processing speed. gcov 9 (GCC r265587) removed --intermediate-format and -i was changed to mean --json-format. However, we consider this format still useful and support it. geninfo (part of lcov) supports this format even if we announce that we are compatible with gcov 9.0.0
show more ...
|
| #
4cd7ba7e |
| 16-Jun-2020 |
Fangrui Song <[email protected]> |
[gcov] Refactor llvm-cov gcov and add SourceInfo
|
| #
e664d054 |
| 07-Jun-2020 |
Fangrui Song <[email protected]> |
[gcov] Improve tests and lower the minimum supported version to gcov 3.4
global-ctor.ll no longer checks what it intended to check (@_GLOBAL__sub_I_global-ctor.ll needs a !dbg to work). Rewrite it.
[gcov] Improve tests and lower the minimum supported version to gcov 3.4
global-ctor.ll no longer checks what it intended to check (@_GLOBAL__sub_I_global-ctor.ll needs a !dbg to work). Rewrite it.
gcov 3.4 and gcov 4.2 use the same format, thus we can lower the version requirement to 3.4
show more ...
|
| #
1a2d4bf3 |
| 04-Jun-2020 |
Fangrui Song <[email protected]> |
[gcov] Don't error 'unexpected end of memory buffe'
|
| #
904b971a |
| 04-Jun-2020 |
Fangrui Song <[email protected]> |
[gcov] Make `Creating 'filename'` compatible with gcov
And clean up llvm-cov.test a bit
|