From: Vedant Kumar Date: Thu, 15 Sep 2016 06:44:51 +0000 (+0000) Subject: [llvm-cov] Hide instantiation views for unexecuted functions X-Git-Tag: llvmorg-4.0.0-rc1~9701 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a8c396d99f972877831e74c869eeada081bd8bdc;p=platform%2Fupstream%2Fllvm.git [llvm-cov] Hide instantiation views for unexecuted functions Copying in the full text of the function doesn't help at all when we already know that it's never executed. Just say that it's unexecuted -- the relevant source text has already been printed. llvm-svn: 281589 --- diff --git a/llvm/test/tools/llvm-cov/Inputs/hideUnexecutedSubviews.proftext b/llvm/test/tools/llvm-cov/Inputs/hideUnexecutedSubviews.proftext new file mode 100644 index 0000000..e31d562 --- /dev/null +++ b/llvm/test/tools/llvm-cov/Inputs/hideUnexecutedSubviews.proftext @@ -0,0 +1,16 @@ +_Z4funcIbEiT_ +10 +2 +0 +0 + +_Z4funcIiEiT_ +10 +2 +0 +0 + +main +0 +1 +0 diff --git a/llvm/test/tools/llvm-cov/hideUnexecutedSubviews.test b/llvm/test/tools/llvm-cov/hideUnexecutedSubviews.test new file mode 100644 index 0000000..44a7884 --- /dev/null +++ b/llvm/test/tools/llvm-cov/hideUnexecutedSubviews.test @@ -0,0 +1,10 @@ +RUN: llvm-profdata merge %S/Inputs/hideUnexecutedSubviews.proftext -o %t.profdata + +RUN: llvm-cov show %S/Inputs/templateInstantiations.covmapping -instr-profile %t.profdata -filename-equivalence %S/showTemplateInstantiations.cpp | FileCheck %s + +RUN: llvm-cov show %S/Inputs/templateInstantiations.covmapping -instr-profile %t.profdata -format html -o %t.html.dir -filename-equivalence %S/showTemplateInstantiations.cpp +RUN: FileCheck %s -input-file %t.html.dir/coverage/tmp/showTemplateInstantiations.cpp.html + +CHECK: Unexecuted instantiation: _Z4funcIbEiT_ +CHECK: Unexecuted instantiation: _Z4funcIiEiT_ +CHECK-NOT: Unexecuted instantiation diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp index 6edca9f..9eacbca 100644 --- a/llvm/tools/llvm-cov/CodeCoverage.cpp +++ b/llvm/tools/llvm-cov/CodeCoverage.cpp @@ -234,21 +234,23 @@ CodeCoverageTool::createSourceFileView(StringRef SourceFile, attachExpansionSubViews(*View, Expansions, Coverage); for (const auto *Function : Coverage.getInstantiations(SourceFile)) { - auto SubViewCoverage = Coverage.getCoverageForFunction(*Function); - auto SubViewExpansions = SubViewCoverage.getExpansions(); - auto SubView = SourceCoverageView::create( - getSymbolForHumans(Function->Name), SourceBuffer.get(), ViewOpts, - std::move(SubViewCoverage)); - attachExpansionSubViews(*SubView, SubViewExpansions, Coverage); - - if (SubView) { - unsigned FileID = Function->CountedRegions.front().FileID; - unsigned Line = 0; - for (const auto &CR : Function->CountedRegions) - if (CR.FileID == FileID) - Line = std::max(CR.LineEnd, Line); - View->addInstantiation(Function->Name, Line, std::move(SubView)); + std::unique_ptr SubView{nullptr}; + + if (Function->ExecutionCount > 0) { + auto SubViewCoverage = Coverage.getCoverageForFunction(*Function); + auto SubViewExpansions = SubViewCoverage.getExpansions(); + SubView = SourceCoverageView::create( + getSymbolForHumans(Function->Name), SourceBuffer.get(), ViewOpts, + std::move(SubViewCoverage)); + attachExpansionSubViews(*SubView, SubViewExpansions, Coverage); } + + unsigned FileID = Function->CountedRegions.front().FileID; + unsigned Line = 0; + for (const auto &CR : Function->CountedRegions) + if (CR.FileID == FileID) + Line = std::max(CR.LineEnd, Line); + View->addInstantiation(Function->Name, Line, std::move(SubView)); } return View; } diff --git a/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp b/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp index 0f17655..31d6fd3 100644 --- a/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp +++ b/llvm/tools/llvm-cov/SourceCoverageViewHTML.cpp @@ -584,7 +584,15 @@ void SourceCoverageViewHTML::renderInstantiationView(raw_ostream &OS, InstantiationView &ISV, unsigned ViewDepth) { OS << BeginExpansionDiv; - ISV.View->print(OS, /*WholeFile=*/false, /*ShowSourceName=*/true, ViewDepth); + if (!ISV.View) + OS << BeginSourceNameDiv + << tag("pre", + escape("Unexecuted instantiation: " + ISV.FunctionName.str(), + getOptions())) + << EndSourceNameDiv; + else + ISV.View->print(OS, /*WholeFile=*/false, /*ShowSourceName=*/true, + ViewDepth); OS << EndExpansionDiv; } diff --git a/llvm/tools/llvm-cov/SourceCoverageViewText.cpp b/llvm/tools/llvm-cov/SourceCoverageViewText.cpp index 51c6463..f5201d9 100644 --- a/llvm/tools/llvm-cov/SourceCoverageViewText.cpp +++ b/llvm/tools/llvm-cov/SourceCoverageViewText.cpp @@ -215,7 +215,12 @@ void SourceCoverageViewText::renderInstantiationView(raw_ostream &OS, unsigned ViewDepth) { renderLinePrefix(OS, ViewDepth); OS << ' '; - ISV.View->print(OS, /*WholeFile=*/false, /*ShowSourceName=*/true, ViewDepth); + if (!ISV.View) + getOptions().colored_ostream(OS, raw_ostream::RED) + << "Unexecuted instantiation: " << ISV.FunctionName << "\n"; + else + ISV.View->print(OS, /*WholeFile=*/false, /*ShowSourceName=*/true, + ViewDepth); } void SourceCoverageViewText::renderTitle(raw_ostream &OS, StringRef Title) {