[llvm] r280895 - [llvm-cov] Drop the longest common filename prefix from summaries

Vedant Kumar via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 7 17:56:44 PDT 2016


Author: vedantk
Date: Wed Sep  7 19:56:43 2016
New Revision: 280895

URL: http://llvm.org/viewvc/llvm-project?rev=280895&view=rev
Log:
[llvm-cov] Drop the longest common filename prefix from summaries

Remove the longest common prefix from filenames when printing coverage
summaries. This makes them easier to compare.

Added:
    llvm/trunk/test/tools/llvm-cov/Inputs/multiple-files.covmapping
    llvm/trunk/test/tools/llvm-cov/Inputs/multiple-files.proftext
    llvm/trunk/test/tools/llvm-cov/multiple-files.test
Modified:
    llvm/trunk/tools/llvm-cov/CoverageReport.cpp

Added: llvm/trunk/test/tools/llvm-cov/Inputs/multiple-files.covmapping
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/multiple-files.covmapping?rev=280895&view=auto
==============================================================================
Binary files llvm/trunk/test/tools/llvm-cov/Inputs/multiple-files.covmapping (added) and llvm/trunk/test/tools/llvm-cov/Inputs/multiple-files.covmapping Wed Sep  7 19:56:43 2016 differ

Added: llvm/trunk/test/tools/llvm-cov/Inputs/multiple-files.proftext
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/Inputs/multiple-files.proftext?rev=280895&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-cov/Inputs/multiple-files.proftext (added)
+++ llvm/trunk/test/tools/llvm-cov/Inputs/multiple-files.proftext Wed Sep  7 19:56:43 2016
@@ -0,0 +1,19 @@
+f1
+0x0
+1
+1
+
+f2
+0x0
+1
+1
+
+f3
+0x0
+1
+1
+
+f4
+0x0
+1
+1

Added: llvm/trunk/test/tools/llvm-cov/multiple-files.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-cov/multiple-files.test?rev=280895&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-cov/multiple-files.test (added)
+++ llvm/trunk/test/tools/llvm-cov/multiple-files.test Wed Sep  7 19:56:43 2016
@@ -0,0 +1,9 @@
+// RUN: llvm-profdata merge %S/Inputs/multiple-files.proftext -o %t.profdata
+// RUN: llvm-cov report %S/Inputs/multiple-files.covmapping -instr-profile %t.profdata | FileCheck %s
+
+// CHECK: Filename
+// CHECK-NEXT: ---
+// CHECK-NEXT: {{^}}a{{[/\\]}}f2.c
+// CHECK-NEXT: {{^}}b{{[/\\]}}c{{[/\\]}}f4.c
+// CHECK-NEXT: {{^}}b{{[/\\]}}f3.c
+// CHECK-NEXT: {{^}}f1.c

Modified: llvm/trunk/tools/llvm-cov/CoverageReport.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cov/CoverageReport.cpp?rev=280895&r1=280894&r2=280895&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cov/CoverageReport.cpp (original)
+++ llvm/trunk/tools/llvm-cov/CoverageReport.cpp Wed Sep  7 19:56:43 2016
@@ -116,6 +116,19 @@ raw_ostream::Colors determineCoveragePer
                                           : raw_ostream::RED;
 }
 
+/// \brief Determine the length of the longest common prefix of the strings in
+/// \p Strings.
+unsigned getLongestCommonPrefixLen(ArrayRef<StringRef> Strings) {
+  unsigned LCP = Strings[0].size();
+  for (unsigned I = 1, E = Strings.size(); LCP > 0 && I < E; ++I) {
+    auto Mismatch =
+        std::mismatch(Strings[0].begin(), Strings[0].end(), Strings[I].begin())
+            .first;
+    LCP = std::min(LCP, (unsigned)std::distance(Strings[0].begin(), Mismatch));
+  }
+  return LCP;
+}
+
 } // end anonymous namespace
 
 namespace llvm {
@@ -236,9 +249,14 @@ void CoverageReport::renderFileReports(r
   renderDivider(FileReportColumns, OS);
   OS << "\n";
 
+  std::vector<StringRef> UniqueSourceFiles = Coverage.getUniqueSourceFiles();
+  unsigned LCP = 0;
+  if (UniqueSourceFiles.size() > 1)
+    LCP = getLongestCommonPrefixLen(UniqueSourceFiles);
+
   FileCoverageSummary Totals("TOTAL");
-  for (StringRef Filename : Coverage.getUniqueSourceFiles()) {
-    FileCoverageSummary Summary(Filename);
+  for (StringRef Filename : UniqueSourceFiles) {
+    FileCoverageSummary Summary(Filename.drop_front(LCP));
     for (const auto &F : Coverage.getCoveredFunctions(Filename)) {
       FunctionCoverageSummary Function = FunctionCoverageSummary::get(F);
       Summary.addFunction(Function);




More information about the llvm-commits mailing list