Skip to content

Commit 7f26ec4

Browse files
author
git apple-llvm automerger
committed
Merge commit '3f9d8d892e2d' from llvm.org/main into next
2 parents 788bd86 + 3f9d8d8 commit 7f26ec4

File tree

3 files changed

+33
-42
lines changed

3 files changed

+33
-42
lines changed

llvm/lib/ProfileData/Coverage/CoverageMapping.cpp

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -253,9 +253,6 @@ class MCDCRecordProcessor {
253253
/// Mapping of calculated MC/DC Independence Pairs for each condition.
254254
MCDCRecord::TVPairMap IndependencePairs;
255255

256-
/// Total number of possible Test Vectors for the boolean expression.
257-
MCDCRecord::TestVectors TestVectors;
258-
259256
/// Actual executed Test Vectors for the boolean expression, based on
260257
/// ExecutedTestVectorBitmap.
261258
MCDCRecord::TestVectors ExecVectors;
@@ -267,18 +264,20 @@ class MCDCRecordProcessor {
267264
: Bitmap(Bitmap), Region(Region), Branches(Branches),
268265
NumConditions(Region.MCDCParams.NumConditions),
269266
BitmapIdx(Region.MCDCParams.BitmapIdx * CHAR_BIT),
270-
Folded(NumConditions, false), IndependencePairs(NumConditions),
271-
TestVectors((size_t)1 << NumConditions) {}
267+
Folded(NumConditions, false), IndependencePairs(NumConditions) {}
272268

273269
private:
274270
void recordTestVector(MCDCRecord::TestVector &TV, unsigned Index,
275271
MCDCRecord::CondState Result) {
272+
if (!Bitmap[BitmapIdx + Index])
273+
return;
274+
276275
// Copy the completed test vector to the vector of testvectors.
277-
TestVectors[Index] = TV;
276+
ExecVectors.push_back(TV);
278277

279278
// The final value (T,F) is equal to the last non-dontcare state on the
280279
// path (in a short-circuiting system).
281-
TestVectors[Index].push_back(Result);
280+
ExecVectors.back().push_back(Result);
282281
}
283282

284283
// Walk the binary decision diagram and try assigning both false and true to
@@ -308,13 +307,11 @@ class MCDCRecordProcessor {
308307
/// Walk the bits in the bitmap. A bit set to '1' indicates that the test
309308
/// vector at the corresponding index was executed during a test run.
310309
void findExecutedTestVectors() {
311-
for (unsigned Idx = 0; Idx < (1u << NumConditions); ++Idx) {
312-
assert(BitmapIdx + Idx < Bitmap.size() && "Bitmap overrun");
313-
if (Bitmap[BitmapIdx + Idx] == 0)
314-
continue;
315-
assert(!TestVectors[Idx].empty() && "Test Vector doesn't exist.");
316-
ExecVectors.push_back(TestVectors[Idx]);
317-
}
310+
// Walk the binary decision diagram to enumerate all possible test vectors.
311+
// We start at the root node (ID == 1) with all values being DontCare.
312+
// `Index` encodes the bitmask of true values and is initially 0.
313+
MCDCRecord::TestVector TV(NumConditions, MCDCRecord::MCDC_DontCare);
314+
buildTestVector(TV, 1, 0);
318315
}
319316

320317
// Find an independence pair for each condition:
@@ -380,12 +377,6 @@ class MCDCRecordProcessor {
380377
Folded[I++] = (B->Count.isZero() && B->FalseCount.isZero());
381378
}
382379

383-
// Walk the binary decision diagram to enumerate all possible test vectors.
384-
// We start at the root node (ID == 1) with all values being DontCare.
385-
// `Index` encodes the bitmask of true values and is initially 0.
386-
MCDCRecord::TestVector TV(NumConditions, MCDCRecord::MCDC_DontCare);
387-
buildTestVector(TV, 1, 0);
388-
389380
// Using Profile Bitmap from runtime, mark the executed test vectors.
390381
findExecutedTestVectors();
391382

llvm/test/tools/llvm-cov/mcdc-const.test

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@
6161
// CHECKFULLCASE: | C1-Pair: constant folded
6262
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
6363
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
64-
// CHECKFULLCASE: | 1 { T, C = T }
65-
// CHECKFULLCASE-NEXT: | 2 { F, C = T }
64+
// CHECKFULLCASE: | 1 { F, C = T }
65+
// CHECKFULLCASE-NEXT: | 2 { T, C = T }
6666
// CHECKFULLCASE: | C1-Pair: not covered
6767
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
6868
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
@@ -106,8 +106,8 @@
106106
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
107107
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
108108
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
109-
// CHECKFULLCASE: | 1 { T, C, - = T }
110-
// CHECKFULLCASE-NEXT: | 2 { F, C, - = T }
109+
// CHECKFULLCASE: | 1 { F, C, - = T }
110+
// CHECKFULLCASE-NEXT: | 2 { T, C, - = T }
111111
// CHECKFULLCASE: | C1-Pair: not covered
112112
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
113113
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
@@ -118,8 +118,8 @@
118118
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
119119
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
120120
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
121-
// CHECKFULLCASE: | 1 { T, C, - = T }
122-
// CHECKFULLCASE-NEXT: | 2 { F, C, T = T }
121+
// CHECKFULLCASE: | 1 { F, C, T = T }
122+
// CHECKFULLCASE-NEXT: | 2 { T, C, - = T }
123123
// CHECKFULLCASE: | C1-Pair: not covered
124124
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
125125
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
@@ -151,26 +151,26 @@
151151
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
152152
// CHECKFULLCASE-NEXT: | C3-Pair: covered: (2,3)
153153
// CHECKFULLCASE: | MC/DC Coverage for Decision: 100.00%
154-
// CHECKFULLCASE: | 1 { T, -, C = T }
155-
// CHECKFULLCASE-NEXT: | 2 { F, T, C = T }
154+
// CHECKFULLCASE: | 1 { F, T, C = T }
155+
// CHECKFULLCASE-NEXT: | 2 { T, -, C = T }
156156
// CHECKFULLCASE: | C1-Pair: not covered
157157
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
158158
// CHECKFULLCASE-NEXT: | C3-Pair: constant folded
159159
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
160-
// CHECKFULLCASE: | 1 { T, C, - = T }
161-
// CHECKFULLCASE-NEXT: | 2 { F, C, - = T }
160+
// CHECKFULLCASE: | 1 { F, C, - = T }
161+
// CHECKFULLCASE-NEXT: | 2 { T, C, - = T }
162162
// CHECKFULLCASE: | C1-Pair: not covered
163163
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
164164
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
165165
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
166-
// CHECKFULLCASE: | 1 { T, -, C = T }
167-
// CHECKFULLCASE-NEXT: | 2 { F, T, C = T }
166+
// CHECKFULLCASE: | 1 { F, T, C = T }
167+
// CHECKFULLCASE-NEXT: | 2 { T, -, C = T }
168168
// CHECKFULLCASE: | C1-Pair: not covered
169169
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
170170
// CHECKFULLCASE-NEXT: | C3-Pair: constant folded
171171
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
172-
// CHECKFULLCASE: | 1 { T, C, - = T }
173-
// CHECKFULLCASE-NEXT: | 2 { F, C, T = T }
172+
// CHECKFULLCASE: | 1 { F, C, T = T }
173+
// CHECKFULLCASE-NEXT: | 2 { T, C, - = T }
174174
// CHECKFULLCASE: | C1-Pair: not covered
175175
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
176176
// CHECKFULLCASE-NEXT: | C3-Pair: not covered

llvm/test/tools/llvm-cov/mcdc-general.test

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@
1919
// CHECK-NEXT: |
2020
// CHECK-NEXT: | C1, C2, C3, C4 Result
2121
// CHECK-NEXT: | 1 { F, -, F, - = F }
22-
// CHECK-NEXT: | 2 { T, F, F, - = F }
23-
// CHECK-NEXT: | 3 { F, -, T, F = F }
22+
// CHECK-NEXT: | 2 { F, -, T, F = F }
23+
// CHECK-NEXT: | 3 { T, F, F, - = F }
2424
// CHECK-NEXT: | 4 { T, F, T, F = F }
25-
// CHECK-NEXT: | 5 { T, T, -, - = T }
26-
// CHECK-NEXT: | 6 { T, F, T, T = T }
25+
// CHECK-NEXT: | 5 { T, F, T, T = T }
26+
// CHECK-NEXT: | 6 { T, T, -, - = T }
2727
// CHECK-NEXT: |
28-
// CHECK-NEXT: | C1-Pair: covered: (1,5)
29-
// CHECK-NEXT: | C2-Pair: covered: (2,5)
30-
// CHECK-NEXT: | C3-Pair: covered: (2,6)
31-
// CHECK-NEXT: | C4-Pair: covered: (4,6)
28+
// CHECK-NEXT: | C1-Pair: covered: (1,6)
29+
// CHECK-NEXT: | C2-Pair: covered: (3,6)
30+
// CHECK-NEXT: | C3-Pair: covered: (3,5)
31+
// CHECK-NEXT: | C4-Pair: covered: (4,5)
3232
// CHECK-NEXT: | MC/DC Coverage for Decision: 100.00%
3333
// CHECK-NEXT: |
3434
// CHECK-NEXT: ------------------

0 commit comments

Comments
 (0)