Skip to content

Commit 805e9a9

Browse files
committed
llvm-cov: Introduce --binary-counters
1 parent 4e3c0bb commit 805e9a9

11 files changed

+167
-143
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
2+
3+
4+
5+
#define COND1 (a == b)
6+
#define COND2 (a != b)
7+
#define COND3 (COND1 && COND2)
8+
#define COND4 (COND3 ? COND2 : COND1) // BRCOV: | Branch ([[@LINE]]:15): [True: 1, False: [[#min(C,2)]]]
9+
#define MACRO1 COND3
10+
#define MACRO2 MACRO1
11+
#define MACRO3 MACRO2
12+
13+
#include <stdlib.h>
14+
15+
// CHECK: |{{ +}}[[#min(C,3)]]|bool func(
16+
bool func(int a, int b) {
17+
bool c = COND1 && COND2; // BRCOV: | | | Branch ([[@LINE-12]]:15): [True: 1, False: [[#min(C,2)]]]
18+
// BRCOV: | | | Branch ([[@LINE-12]]:15): [True: 0, False: 1]
19+
bool d = COND3; // BRCOV: | | | | | Branch ([[@LINE-14]]:15): [True: 1, False: [[#min(C,2)]]]
20+
// BRCOV: | | | | | Branch ([[@LINE-14]]:15): [True: 0, False: 1]
21+
bool e = MACRO1; // BRCOV: | | | | | | | Branch ([[@LINE-16]]:15): [True: 1, False: [[#min(C,2)]]]
22+
// BRCOV: | | | | | | | Branch ([[@LINE-16]]:15): [True: 0, False: 1]
23+
bool f = MACRO2; // BRCOV: | | | | | | | | | Branch ([[@LINE-18]]:15): [True: 1, False: [[#min(C,2)]]]
24+
// BRCOV: | | | | | | | | | Branch ([[@LINE-18]]:15): [True: 0, False: 1]
25+
bool g = MACRO3; // BRCOV: | | | | | | | | | | | Branch ([[@LINE-20]]:15): [True: 1, False: [[#min(C,2)]]]
26+
// BRCOV: | | | | | | | | | | | Branch ([[@LINE-20]]:15): [True: 0, False: 1]
27+
return c && d && e && f && g;
28+
// BRCOV: | Branch ([[@LINE-1]]:10): [True: 0, False: [[#min(C,3)]]]
29+
// BRCOV: | Branch ([[@LINE-2]]:15): [True: 0, False: 0]
30+
// BRCOV: | Branch ([[@LINE-3]]:20): [True: 0, False: 0]
31+
// BRCOV: | Branch ([[@LINE-4]]:25): [True: 0, False: 0]
32+
// BRCOV: | Branch ([[@LINE-5]]:30): [True: 0, False: 0]
33+
}
34+
35+
36+
bool func2(int a, int b) {
37+
bool h = MACRO3 || COND4; // BRCOV: | | | | | | | | | | | Branch ([[@LINE-32]]:15): [True: 1, False: [[#min(C,2)]]]
38+
// BRCOV: | | | | | | | | | | | Branch ([[@LINE-32]]:15): [True: 0, False: 1]
39+
// BRCOV: | | | | | | | Branch ([[@LINE-34]]:15): [True: 1, False: [[#min(C,2)]]]
40+
// BRCOV: | | | | | | | Branch ([[@LINE-34]]:15): [True: 0, False: 1]
41+
// BRCOV: | | | Branch ([[@LINE-33]]:15): [True: 1, False: [[#min(C,2)]]]
42+
return h;
43+
}
44+
45+
46+
int main(int argc, char *argv[])
47+
{
48+
func(atoi(argv[1]), atoi(argv[2]));
49+
func2(atoi(argv[1]), atoi(argv[2]));
50+
(void)0;
51+
return 0;
52+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// HTML-WHOLE-FILE: <td class='line-number'><a name='L[[@LINE+2]]' href='#L[[@LINE+2]]'><pre>[[@LINE+2]]</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// before
2+
// HTML-FILTER-NOT: <td class='line-number'><a name='L[[@LINE+1]]' href='#L[[@LINE+1]]'><pre>[[@LINE+1]]</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// before
3+
// before any coverage // WHOLE-FILE: [[@LINE]]| |// before
4+
// FILTER-NOT: [[@LINE-1]]| |// before
5+
// HTML: <td class='line-number'><a name='L[[@LINE+1]]' href='#L[[@LINE+1]]'><pre>[[@LINE+1]]</pre></a></td><td class='covered-line'><pre>161</pre></td><td class='code'><pre>int main() {
6+
int main() { // TEXT: [[@LINE]]| [[#C161:min(C,161)]]|int main(
7+
int x = 0; // TEXT: [[@LINE]]| [[#C161]]| int x
8+
9+
if (x) { // TEXT: [[@LINE]]| [[#C161]]| if (x)
10+
x = 0; // TEXT: [[@LINE]]| 0| x = 0
11+
} else { // TEXT: [[@LINE]]| [[#C161]]| } else
12+
x = 1; // TEXT: [[@LINE]]| [[#C161]]| x = 1
13+
} // TEXT: [[@LINE]]| [[#C161]]| }
14+
15+
for (int i = 0; i < 100; ++i) { // TEXT: [[@LINE]]| [[C16K2]]| for (
16+
x = 1; // TEXT: [[@LINE]]| [[C16K1]]| x = 1
17+
} // TEXT: [[@LINE]]| [[C16K1]]| }
18+
19+
x = x < 10 ? x + 1 : x - 1; // TEXT: [[@LINE]]| [[#C161]]| x =
20+
x = x > 10 ? // TEXT: [[@LINE]]| [[#C161]]| x =
21+
x - 1: // TEXT: [[@LINE]]| 0| x
22+
x + 1; // TEXT: [[@LINE]]| [[#C161]]| x
23+
24+
return 0; // TEXT: [[@LINE]]| [[#C161]]| return
25+
} // TEXT: [[@LINE]]| [[#C161]]|}
26+
// after coverage // WHOLE-FILE: [[@LINE]]| |// after
27+
// FILTER-NOT: [[@LINE-1]]| |// after
28+
// HTML-BINARY-NOT: <td class='covered-line'><pre>16
29+
// HTML-WHOLE-FILE: <td class='line-number'><a name='L[[@LINE-3]]' href='#L[[@LINE-3]]'><pre>[[@LINE-3]]</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// after
30+
// HTML-FILTER-NOT: <td class='line-number'><a name='L[[@LINE-4]]' href='#L[[@LINE-4]]'><pre>[[@LINE-4]]</pre></a></td><td class='skipped-line'></td><td class='code'><pre>// after

llvm/test/tools/llvm-cov/branch-macros.cpp

Lines changed: 0 additions & 60 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// RUN: llvm-profdata merge %S/Inputs/branch-macros.proftext -o %t.profdata
2+
// RUN: llvm-cov show --show-expansions --show-branches=count %S/Inputs/branch-macros.o32l -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs | FileCheck %S/Inputs/branch-macros.cpp -check-prefixes=CHECK,BRCOV -D#C=999
3+
// RUN: llvm-cov show --binary-counters=true --show-expansions --show-branches=count %S/Inputs/branch-macros.o32l -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs | FileCheck %S/Inputs/branch-macros.cpp -check-prefixes=CHECK,BRCOV -D#C=1
4+
// RUN: llvm-cov report --show-branch-summary %S/Inputs/branch-macros.o32l -instr-profile %t.profdata -show-functions -path-equivalence=/tmp,%S/Inputs %S/Inputs/branch-macros.cpp | FileCheck %s -check-prefix=REPORT
5+
6+
// REPORT: Name Regions Miss Cover Lines Miss Cover Branches Miss Cover
7+
// REPORT-NEXT: ---
8+
// REPORT-NEXT: _Z4funcii 28 4 85.71% 18 0 100.00% 30 14 53.33%
9+
// REPORT-NEXT: _Z5func2ii 13 1 92.31% 8 0 100.00% 10 2 80.00%
10+
// REPORT-NEXT: main 1 0 100.00% 6 0 100.00% 0 0 0.00%
11+
// REPORT-NEXT: ---
12+
// REPORT-NEXT: TOTAL 42 5 88.10% 32 0 100.00% 40 16 60.00%

llvm/test/tools/llvm-cov/showLineExecutionCounts.cpp

Lines changed: 0 additions & 73 deletions
This file was deleted.
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// Basic handling of line counts.
2+
// RUN: rm -rf %t.dir
3+
// RUN: llvm-profdata merge %S/Inputs/lineExecutionCounts.proftext -o %t.profdata
4+
5+
// RUN: llvm-cov show %S/Inputs/lineExecutionCounts.covmapping -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs | FileCheck -check-prefixes=TEXT,WHOLE-FILE -D#C=999 -DC16K2=16.2k -DC16K1=16.1k %S/Inputs/showLineExecutionCounts.cpp
6+
// RUN: llvm-cov show %S/Inputs/lineExecutionCounts.covmapping -binary-counters=true -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs | FileCheck -check-prefixes=TEXT,WHOLE-FILE -D#C=1 -DC16K2=1 -DC16K1=1 %S/Inputs/showLineExecutionCounts.cpp
7+
// RUN: llvm-cov show %S/Inputs/lineExecutionCounts.covmapping -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs -name=main | FileCheck -check-prefixes=TEXT,FILTER -D#C=999 -DC16K2=16.2k -DC16K1=16.1k %S/Inputs/showLineExecutionCounts.cpp
8+
9+
// Test -output-dir.
10+
// RUN: llvm-cov show %S/Inputs/lineExecutionCounts.covmapping -o %t.dir/show -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs
11+
// RUN: llvm-cov show %S/Inputs/lineExecutionCounts.covmapping -output-dir %t.dir/show.filtered -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs -name=main
12+
// RUN: FileCheck -check-prefixes=TEXT,WHOLE-FILE -D#C=999 -DC16K2=16.2k -DC16K1=16.1k -input-file %t.dir/show/coverage/tmp/showLineExecutionCounts.cpp.txt %S/Inputs/showLineExecutionCounts.cpp
13+
// RUN: FileCheck -check-prefixes=TEXT,FILTER -D#C=999 -DC16K2=16.2k -DC16K1=16.1k -input-file %t.dir/show.filtered/coverage/tmp/showLineExecutionCounts.cpp.txt %S/Inputs/showLineExecutionCounts.cpp
14+
//
15+
// RUN: llvm-cov export %S/Inputs/lineExecutionCounts.covmapping -instr-profile %t.profdata 2>/dev/null -summary-only > %t.export-summary.json
16+
// RUN: not grep '"name":"main"' %t.export-summary.json
17+
//
18+
// Test html output.
19+
// RUN: llvm-cov show %S/Inputs/lineExecutionCounts.covmapping -format html -o %t.dir/html -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs
20+
// RUN: llvm-cov show %S/Inputs/lineExecutionCounts.covmapping -format html -o %t.dir/html.binary -binary-counters=true -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs
21+
// RUN: llvm-cov show %S/Inputs/lineExecutionCounts.covmapping -format html -o %t.dir/html.filtered -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs -name=main
22+
// RUN: FileCheck -check-prefixes=HTML,HTML-WHOLE-FILE -input-file %t.dir/html/coverage/tmp/showLineExecutionCounts.cpp.html %S/Inputs/showLineExecutionCounts.cpp
23+
// RUN: FileCheck -check-prefixes=HTML-BINARY,HTML-WHOLE-FILE -input-file %t.dir/html.binary/coverage/tmp/showLineExecutionCounts.cpp.html %S/Inputs/showLineExecutionCounts.cpp
24+
// RUN: FileCheck -check-prefixes=HTML,HTML-FILTER -input-file %t.dir/html.filtered/coverage/tmp/showLineExecutionCounts.cpp.html %S/Inputs/showLineExecutionCounts.cpp
25+
//
26+
// Test index creation.
27+
// RUN: FileCheck -check-prefix=TEXT-INDEX -input-file %t.dir/show/index.txt %s
28+
// TEXT-INDEX: Filename
29+
// TEXT-INDEX-NEXT: ---
30+
// TEXT-INDEX-NEXT: {{.*}}showLineExecutionCounts.cpp
31+
//
32+
// RUN: FileCheck -check-prefix HTML-INDEX -input-file %t.dir/html/index.html %s
33+
// HTML-INDEX-LABEL: <table>
34+
// HTML-INDEX: <td class='column-entry-bold'>Filename</td>
35+
// HTML-INDEX: <td class='column-entry-bold'>Function Coverage</td>
36+
// HTML-INDEX: <td class='column-entry-bold'>Line Coverage</td>
37+
// HTML-INDEX: <td class='column-entry-bold'>Region Coverage</td>
38+
// HTML-INDEX: <a href='coverage{{.*}}showLineExecutionCounts.cpp.html'{{.*}}showLineExecutionCounts.cpp</a>
39+
// HTML-INDEX: <td class='column-entry-green'>
40+
// HTML-INDEX: 100.00% (1/1)
41+
// HTML-INDEX: <td class='column-entry-yellow'>
42+
// HTML-INDEX: 90.00% (18/20)
43+
// HTML-INDEX: <td class='column-entry-red'>
44+
// HTML-INDEX: 72.73% (8/11)
45+
// HTML-INDEX: <tr class='light-row-bold'>
46+
// HTML-INDEX: Totals

0 commit comments

Comments
 (0)