[llvm] [llvm-cov] Add show-function-summary option in coverage report (PR #172980)
Dean Frampton via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 12 01:39:40 PST 2026
https://github.com/ThrownToys updated https://github.com/llvm/llvm-project/pull/172980
>From 0e28b02f740a1e52640c3270fb4c6648077fc551 Mon Sep 17 00:00:00 2001
From: Dean Frampton <dean at deanframpton.co.nz>
Date: Fri, 19 Dec 2025 00:22:21 +1300
Subject: [PATCH 1/2] [llvm-cov] Add show-function-summary option in coverage
report
---
llvm/tools/llvm-cov/CodeCoverage.cpp | 5 ++++
llvm/tools/llvm-cov/CoverageReport.cpp | 34 +++++++++++++----------
llvm/tools/llvm-cov/CoverageViewOptions.h | 1 +
3 files changed, 25 insertions(+), 15 deletions(-)
diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp
index 6c66858c4de8c..a112dc8bced40 100644
--- a/llvm/tools/llvm-cov/CodeCoverage.cpp
+++ b/llvm/tools/llvm-cov/CodeCoverage.cpp
@@ -770,6 +770,10 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
cl::desc("Show region statistics in summary table"),
cl::init(true));
+ cl::opt<bool> FunctionSummary(
+ "show-function-summary", cl::Optional,
+ cl::desc("Show function statistics in summary table"), cl::init(true));
+
cl::opt<bool> BranchSummary(
"show-branch-summary", cl::Optional,
cl::desc("Show branch condition statistics in summary table"),
@@ -962,6 +966,7 @@ int CodeCoverageTool::run(Command Cmd, int argc, const char **argv) {
ViewOpts.ShowMCDCSummary = MCDCSummary;
ViewOpts.ShowBranchSummary = BranchSummary;
ViewOpts.ShowRegionSummary = RegionSummary;
+ ViewOpts.ShowFunctionSummary = FunctionSummary;
ViewOpts.ShowInstantiationSummary = InstantiationSummary;
ViewOpts.ExportSummaryOnly = SummaryOnly;
ViewOpts.NumThreads = NumThreads;
diff --git a/llvm/tools/llvm-cov/CoverageReport.cpp b/llvm/tools/llvm-cov/CoverageReport.cpp
index 00aea4039bfde..9b754d613370c 100644
--- a/llvm/tools/llvm-cov/CoverageReport.cpp
+++ b/llvm/tools/llvm-cov/CoverageReport.cpp
@@ -251,18 +251,20 @@ void CoverageReport::render(const FileCoverageSummary &File,
OS << column("-", FileReportColumns[3], Column::RightAlignment);
}
- OS << format("%*u", FileReportColumns[4],
- (unsigned)File.FunctionCoverage.getNumFunctions());
- OS << format("%*u", FileReportColumns[5],
- (unsigned)(File.FunctionCoverage.getNumFunctions() -
- File.FunctionCoverage.getExecuted()));
- if (File.FunctionCoverage.getNumFunctions())
- Options.colored_ostream(OS, FuncCoverageColor)
- << format("%*.2f", FileReportColumns[6] - 1,
- File.FunctionCoverage.getPercentCovered())
- << '%';
- else
- OS << column("-", FileReportColumns[6], Column::RightAlignment);
+ if (Options.ShowFunctionSummary) {
+ OS << format("%*u", FileReportColumns[4],
+ (unsigned)File.FunctionCoverage.getNumFunctions());
+ OS << format("%*u", FileReportColumns[5],
+ (unsigned)(File.FunctionCoverage.getNumFunctions() -
+ File.FunctionCoverage.getExecuted()));
+ if (File.FunctionCoverage.getNumFunctions())
+ Options.colored_ostream(OS, FuncCoverageColor)
+ << format("%*.2f", FileReportColumns[6] - 1,
+ File.FunctionCoverage.getPercentCovered())
+ << '%';
+ else
+ OS << column("-", FileReportColumns[6], Column::RightAlignment);
+ }
if (Options.ShowInstantiationSummary) {
OS << format("%*u", FileReportColumns[7],
@@ -539,9 +541,11 @@ void CoverageReport::renderFileReports(
OS << column("Regions", FileReportColumns[1], Column::RightAlignment)
<< column("Missed Regions", FileReportColumns[2], Column::RightAlignment)
<< column("Cover", FileReportColumns[3], Column::RightAlignment);
- OS << column("Functions", FileReportColumns[4], Column::RightAlignment)
- << column("Missed Functions", FileReportColumns[5], Column::RightAlignment)
- << column("Executed", FileReportColumns[6], Column::RightAlignment);
+ if (Options.ShowFunctionSummary)
+ OS << column("Functions", FileReportColumns[4], Column::RightAlignment)
+ << column("Missed Functions", FileReportColumns[5],
+ Column::RightAlignment)
+ << column("Executed", FileReportColumns[6], Column::RightAlignment);
if (Options.ShowInstantiationSummary)
OS << column("Instantiations", FileReportColumns[7], Column::RightAlignment)
<< column("Missed Insts.", FileReportColumns[8], Column::RightAlignment)
diff --git a/llvm/tools/llvm-cov/CoverageViewOptions.h b/llvm/tools/llvm-cov/CoverageViewOptions.h
index 1f6ad570f86f2..7ac38d76a7e41 100644
--- a/llvm/tools/llvm-cov/CoverageViewOptions.h
+++ b/llvm/tools/llvm-cov/CoverageViewOptions.h
@@ -40,6 +40,7 @@ struct CoverageViewOptions {
bool ShowBranchSummary;
bool ShowMCDCSummary;
bool ShowRegionSummary;
+ bool ShowFunctionSummary;
bool ShowInstantiationSummary;
bool ShowDirectoryCoverage;
bool ExportSummaryOnly;
>From 4e49f9f02fb7a6636562f054ae6038e5f2b648e3 Mon Sep 17 00:00:00 2001
From: Dean Frampton <dean at deanframpton.co.nz>
Date: Mon, 12 Jan 2026 22:39:16 +1300
Subject: [PATCH 2/2] [llvm-cov] Add show-function-summary report option unit
test
---
llvm/test/tools/llvm-cov/branch-templates.test | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/llvm/test/tools/llvm-cov/branch-templates.test b/llvm/test/tools/llvm-cov/branch-templates.test
index d5535022239f5..a5a47a8c07092 100644
--- a/llvm/test/tools/llvm-cov/branch-templates.test
+++ b/llvm/test/tools/llvm-cov/branch-templates.test
@@ -1,7 +1,7 @@
// RUN: llvm-profdata merge %S/Inputs/branch-templates.proftext -o %t.profdata
// RUN: llvm-cov show --show-expansions --show-branches=count %S/Inputs/branch-templates.o32l -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs | FileCheck %S/Inputs/branch-templates.cpp
// RUN: llvm-cov report --show-branch-summary %S/Inputs/branch-templates.o32l -instr-profile %t.profdata -show-functions -path-equivalence=/tmp,%S/Inputs %S/Inputs/branch-templates.cpp | FileCheck %s -check-prefix=REPORT
-// RUN: llvm-cov report --show-branch-summary %S/Inputs/branch-templates.o32l -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs | FileCheck %s -check-prefix=REPORTFILE
+// RUN: llvm-cov report --show-branch-summary --show-function-summary=false %S/Inputs/branch-templates.o32l -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs | FileCheck %s -check-prefix=REPORT_NO_FUNCTION_SUMMARY
// RUN: yaml2obj %S/Inputs/branch-templates-single.yaml -o %t.o
// RUN: llvm-profdata merge %S/Inputs/branch-templates-single.proftext -o %t.profdata
@@ -29,3 +29,9 @@
// REPORTFILE-NEXT: branch-templates.cpp 12 3 75.00% 2 0 100.00% 17 4 76.47% 8 4 50.00%
// REPORTFILE-NEXT: ---
// REPORTFILE-NEXT: TOTAL 12 3 75.00% 2 0 100.00% 17 4 76.47% 8 4 50.00%
+
+// REPORT_NO_FUNCTION_SUMMARY: Filename Regions Missed Regions Cover Lines Missed Lines Cover Branches Missed Branches Cover
+// REPORT_NO_FUNCTION_SUMMARY-NEXT: ---
+// REPORT_NO_FUNCTION_SUMMARY-NEXT: branch-templates.cpp 12 3 75.00% 17 4 76.47% 8 4 50.00%
+// REPORT_NO_FUNCTION_SUMMARY-NEXT: ---
+// REPORT_NO_FUNCTION_SUMMARY-NEXT: TOTAL 12 3 75.00% 17 4 76.47% 8 4 50.00%
More information about the llvm-commits
mailing list