Skip to content

Commit e7b55a1

Browse files
committed
[Coverage] Parse SIL coverage maps for top-level code decls
This adds SIL printer/parser support for SILCoverageMaps representing top-level code decls.
1 parent e6f3e7d commit e7b55a1

File tree

7 files changed

+21
-26
lines changed

7 files changed

+21
-26
lines changed

lib/ParseSIL/ParseSIL.cpp

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6212,11 +6212,12 @@ bool SILParserTUState::parseSILCoverageMap(Parser &P) {
62126212
return true;
62136213

62146214
// Parse the covered name.
6215-
Identifier FuncName;
6216-
SourceLoc FuncLoc;
6217-
if (State.parseSILIdentifier(FuncName, FuncLoc,
6218-
diag::expected_sil_value_name))
6215+
if (!P.Tok.is(tok::string_literal)) {
6216+
P.diagnose(P.Tok, diag::sil_coverage_expected_quote);
62196217
return true;
6218+
}
6219+
StringRef FuncName = P.Tok.getText().drop_front().drop_back();
6220+
P.consumeToken();
62206221

62216222
// Parse the PGO func name.
62226223
if (!P.Tok.is(tok::string_literal)) {
@@ -6226,12 +6227,6 @@ bool SILParserTUState::parseSILCoverageMap(Parser &P) {
62266227
StringRef PGOFuncName = P.Tok.getText().drop_front().drop_back();
62276228
P.consumeToken();
62286229

6229-
SILFunction *Func = M.lookUpFunction(FuncName.str());
6230-
if (!Func) {
6231-
P.diagnose(FuncLoc, diag::sil_coverage_func_not_found, FuncName);
6232-
return true;
6233-
}
6234-
62356230
uint64_t Hash;
62366231
if (State.parseInteger(Hash, diag::sil_coverage_invalid_hash))
62376232
return true;

lib/SIL/SILPrinter.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2950,9 +2950,9 @@ void SILDefaultWitnessTable::dump() const {
29502950

29512951
void SILCoverageMap::print(SILPrintContext &PrintCtx) const {
29522952
llvm::raw_ostream &OS = PrintCtx.OS();
2953-
OS << "sil_coverage_map " << QuotedString(getFile()) << " " << getName()
2954-
<< " " << QuotedString(getPGOFuncName()) << " " << getHash() << " {\t// "
2955-
<< demangleSymbol(getName()) << "\n";
2953+
OS << "sil_coverage_map " << QuotedString(getFile()) << " "
2954+
<< QuotedString(getName()) << " " << QuotedString(getPGOFuncName()) << " "
2955+
<< getHash() << " {\t// " << demangleSymbol(getName()) << "\n";
29562956
if (PrintCtx.sortSIL())
29572957
std::sort(MappedRegions.begin(), MappedRegions.end(),
29582958
[](const MappedRegion &LHS, const MappedRegion &RHS) {

test/Profiler/coverage_deinit.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ public class Derived: NSString {
1111
}
1212
}
1313

14-
// CHECK-LABEL: sil_coverage_map "{{.*}}coverage_deinit.swift" $S15coverage_deinit7DerivedCfD
14+
// CHECK-LABEL: sil_coverage_map "{{.*}}coverage_deinit.swift" "$S15coverage_deinit7DerivedCfD"
1515
// CHECK-NEXT: [[@LINE-5]]:10 -> [[@LINE-4]]:4 : 0

test/Profiler/coverage_force_emission.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
// RUN: %target-swift-frontend -Xllvm -sil-full-demangle -profile-generate -profile-coverage-mapping -emit-sorted-sil -emit-sil -module-name coverage_force_emission %s | %FileCheck %s -check-prefix=COVERAGE
2-
// RUN: %target-swift-frontend -Xllvm -sil-full-demangle -profile-generate -emit-sorted-sil -emit-sil -module-name coverage_force_emission %s | %FileCheck %s -check-prefix=PGO
1+
// RUN: %target-swift-frontend -Xllvm -sil-full-demangle -profile-generate -profile-coverage-mapping -emit-sil -module-name coverage_force_emission %s | %FileCheck %s -check-prefix=COVERAGE
2+
// RUN: %target-swift-frontend -Xllvm -sil-full-demangle -profile-generate -emit-sil -module-name coverage_force_emission %s | %FileCheck %s -check-prefix=PGO
33

44
final class VarInit {
5-
// COVERAGE: sil_coverage_map {{.*}} $S23coverage_force_emission7VarInitC04lazydE033_7D375D72BA8B0C53C9AD7E4DBC7FF493LLSSvg
5+
// COVERAGE: sil_coverage_map {{.*}} "$S23coverage_force_emission7VarInitC04lazydE033_7D375D72BA8B0C53C9AD7E4DBC7FF493LLSSvgSSyXEfU_"
66
// PGO-LABEL: coverage_force_emission.VarInit.(lazyVarInit in _7D375D72BA8B0C53C9AD7E4DBC7FF493).getter : Swift.String
77
// PGO: int_instrprof_increment
88
private lazy var lazyVarInit: String = {
99
return "Hello"
1010
}()
1111

12-
// CHECK: sil_coverage_map {{.*}} $S23coverage_force_emission7VarInitC05basicdE033_7D375D72BA8B0C53C9AD7E4DBC7FF493LLSSvpfiSSyXEfU_
12+
// CHECK: sil_coverage_map {{.*}} "$S23coverage_force_emission7VarInitC05basicdE033_7D375D72BA8B0C53C9AD7E4DBC7FF493LLSSvpfiSSyXEfU_"
1313
// PGO-LABEL: closure #1 () -> Swift.String in variable initialization expression of coverage_force_emission.VarInit.(basicVarInit in _7D375D72BA8B0C53C9AD7E4DBC7FF493) : Swift.String
1414
// PGO: int_instrprof_increment
1515
private var basicVarInit: String = {
1616
return "Hello"
1717
}()
1818

19-
// CHECK: sil_coverage_map {{.*}} $S23coverage_force_emission7VarInitC06simpleD033_7D375D72BA8B0C53C9AD7E4DBC7FF493LLSSvg
19+
// CHECK: sil_coverage_map {{.*}} "$S23coverage_force_emission7VarInitC06simpleD033_7D375D72BA8B0C53C9AD7E4DBC7FF493LLSSvg"
2020
// PGO-LABEL: coverage_force_emission.VarInit.(simpleVar in _7D375D72BA8B0C53C9AD7E4DBC7FF493).getter : Swift.String
2121
// PGO: int_instrprof_increment
2222
private var simpleVar: String {

test/Profiler/coverage_member_closure.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
class C {
44
// Closures in members receive their own coverage mapping.
5-
// CHECK: sil_coverage_map {{.*}} $S23coverage_member_closure1CC17completionHandleryySS_SaySSGtcvpfiySS_AEtcfU_
5+
// CHECK: sil_coverage_map {{.*}} "$S23coverage_member_closure1CC17completionHandleryySS_SaySSGtcvpfiySS_AEtcfU_"
66
// CHECK: [[@LINE+1]]:55 -> [[@LINE+1]]:79 : 0
77
var completionHandler: (String, [String]) -> Void = { (foo, bar) in return }
88
}

test/Profiler/coverage_var_init.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
// RUN: %target-swift-frontend -Xllvm -sil-full-demangle -profile-generate -profile-coverage-mapping -emit-sorted-sil -emit-sil -module-name coverage_var_init %s | %FileCheck %s
22

33
final class VarInit {
4-
// CHECK: sil_coverage_map {{.*}} $S17coverage_var_init7VarInitC04lazydE033_49373CB2DFB47C8DC62FA963604688DFLLSSvgSSyXEfU_
4+
// CHECK: sil_coverage_map {{.*}} "$S17coverage_var_init7VarInitC04lazydE033_49373CB2DFB47C8DC62FA963604688DFLLSSvgSSyXEfU_"
55
// CHECK-NEXT: [[@LINE+1]]:42 -> [[@LINE+3]]:4 : 0
66
private lazy var lazyVarInit: String = {
77
return "lazyVarInit"
88
}()
99

10-
// CHECK: sil_coverage_map {{.*}} $S17coverage_var_init7VarInitC05basicdE033_49373CB2DFB47C8DC62FA963604688DFLLSSvpfiSSyXEfU_
10+
// CHECK: sil_coverage_map {{.*}} "$S17coverage_var_init7VarInitC05basicdE033_49373CB2DFB47C8DC62FA963604688DFLLSSvpfiSSyXEfU_"
1111
// CHECK-NEXT: [[@LINE+1]]:38 -> [[@LINE+3]]:4 : 0
1212
private var basicVarInit: String = {
1313
return "Hello"
1414
}()
1515

16-
// CHECK: sil_coverage_map {{.*}} $S17coverage_var_init7VarInitC06simpleD033_49373CB2DFB47C8DC62FA963604688DFLLSSvg
16+
// CHECK: sil_coverage_map {{.*}} "$S17coverage_var_init7VarInitC06simpleD033_49373CB2DFB47C8DC62FA963604688DFLLSSvg"
1717
// CHECK-NEXT: [[@LINE+1]]:33 -> [[@LINE+3]]:4 : 0
1818
private var simpleVar: String {
1919
return "Hello"

test/SIL/Parser/coverage_maps.sil

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ bb0:
66
return %0 : $()
77
}
88

9-
// CHECK-LABEL: sil_coverage_map "coverage_maps.sil" someFunction "coverage_maps.sil:someFunction" 0 {
9+
// CHECK-LABEL: sil_coverage_map "coverage_maps.sil" "someFunction" "coverage_maps.sil:someFunction" 0 {
1010
// CHECK: }
11-
sil_coverage_map "coverage_maps.sil" someFunction "coverage_maps.sil:someFunction" 0 {
11+
sil_coverage_map "coverage_maps.sil" "someFunction" "coverage_maps.sil:someFunction" 0 {
1212
}
1313

14-
// CHECK-LABEL: sil_coverage_map "/some/other/file.sil" someFunction "/some/other/file.sil:someFunction" 0 {
14+
// CHECK-LABEL: sil_coverage_map "/some/other/file.sil" "someFunction" "/some/other/file.sil:someFunction" 0 {
1515
// CHECK: 4:19 -> 31:1 : 0
1616
// CHECK: 7:9 -> 7:16 : (0 + 1)
1717
// CHECK: 7:18 -> 9:3 : zero

0 commit comments

Comments
 (0)