[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