Skip to content

Commit da31b68

Browse files
authored
[Coverage] Suppress covmap and profdata for system headers. (#97952)
With `system-headers-coverage=false`, functions defined in system headers were not instrumented but corresponding covmaps were emitted. It caused wasting covmap and profraw. This change improves: - Reduce object size (due to reduced covmap) - Reduce size of profraw (uninstrumented system headers occupied counters) - Smarter view of coverage report. Stubs of uninstrumented system headers will be no longer seen.
1 parent c188cb7 commit da31b68

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7165,6 +7165,9 @@ void CodeGenModule::AddDeferredUnusedCoverageMapping(Decl *D) {
71657165
SourceManager &SM = getContext().getSourceManager();
71667166
if (LimitedCoverage && SM.getMainFileID() != SM.getFileID(D->getBeginLoc()))
71677167
break;
7168+
if (!llvm::coverage::SystemHeadersCoverage &&
7169+
SM.isInSystemHeader(D->getBeginLoc()))
7170+
break;
71687171
DeferredEmptyCoverageMappingDecls.try_emplace(D, true);
71697172
break;
71707173
}

clang/lib/CodeGen/CodeGenPGO.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1044,13 +1044,17 @@ void CodeGenPGO::assignRegionCounters(GlobalDecl GD, llvm::Function *Fn) {
10441044
if (Fn->hasFnAttribute(llvm::Attribute::SkipProfile))
10451045
return;
10461046

1047+
SourceManager &SM = CGM.getContext().getSourceManager();
1048+
if (!llvm::coverage::SystemHeadersCoverage &&
1049+
SM.isInSystemHeader(D->getLocation()))
1050+
return;
1051+
10471052
setFuncName(Fn);
10481053

10491054
mapRegionCounters(D);
10501055
if (CGM.getCodeGenOpts().CoverageMapping)
10511056
emitCounterRegionMapping(D);
10521057
if (PGOReader) {
1053-
SourceManager &SM = CGM.getContext().getSourceManager();
10541058
loadRegionCounts(PGOReader, SM.isInMainFile(D->getLocation()));
10551059
computeRegionCounts(D);
10561060
applyFunctionAttributes(PGOReader, Fn);

clang/test/CoverageMapping/system_macro.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55

66
// LL_CHECK: @__covrec_
77
// LL_W_SYS: [[PROFC:@.*__profc_.*SysTmpl.*]] =
8-
// LL_WOSYS: [[PROFC:@.*__profc_.*SysTmpl.*]] =
98
// LL_W_SYS: @{{.*}}__profd_{{.*}}SysTmpl{{.*}} =
10-
// LL_WOSYS: @{{.*}}__profd_{{.*}}SysTmpl{{.*}} =
9+
// LL_WOSYS-NOT: SysTmpl
1110

1211
// LL_CHECK: @llvm.used =
1312

@@ -21,7 +20,7 @@
2120
template <bool f> bool SysTmpl() { return f; }
2221
// Check SysTmpl() is instrumented or not.
2322
// LL_W_SYS: load i64, ptr [[PROFC]],
24-
// LL_WOSYS: load i64, ptr [[PROFC]],
23+
// LL_WOSYS-NOT: load i64, ptr @__profc_
2524

2625
#else
2726

0 commit comments

Comments
 (0)