From 7df63b7d5464ce18b814e2b6e313675a5e7daba1 Mon Sep 17 00:00:00 2001 From: Justin Bogner Date: Sat, 20 Sep 2014 17:19:52 +0000 Subject: [PATCH] llvm-cov: Allow creating CoverageMappings from filenames git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218185 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ProfileData/CoverageMapping.h | 6 +++++- lib/ProfileData/CoverageMapping.cpp | 14 ++++++++++++++ tools/llvm-cov/CodeCoverage.cpp | 19 +------------------ 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/include/llvm/ProfileData/CoverageMapping.h b/include/llvm/ProfileData/CoverageMapping.h index 2dba5f4abd5..a7c124adf33 100644 --- a/include/llvm/ProfileData/CoverageMapping.h +++ b/include/llvm/ProfileData/CoverageMapping.h @@ -318,11 +318,15 @@ class CoverageMapping { CoverageMapping() : MismatchedFunctionCount(0) {} public: - /// Load the coverage mapping using the given readers. + /// \brief Load the coverage mapping using the given readers. static ErrorOr> load(ObjectFileCoverageMappingReader &CoverageReader, IndexedInstrProfReader &ProfileReader); + /// \brief Load the coverage mapping from the given files. + static ErrorOr> + load(StringRef ObjectFilename, StringRef ProfileFilename); + /// \brief The number of functions that couldn't have their profiles mapped. /// /// This is a count of functions whose profile is out of date or otherwise diff --git a/lib/ProfileData/CoverageMapping.cpp b/lib/ProfileData/CoverageMapping.cpp index 2e205f3fba5..540e6433322 100644 --- a/lib/ProfileData/CoverageMapping.cpp +++ b/lib/ProfileData/CoverageMapping.cpp @@ -183,6 +183,20 @@ CoverageMapping::load(ObjectFileCoverageMappingReader &CoverageReader, return std::move(Coverage); } +ErrorOr> +CoverageMapping::load(StringRef ObjectFilename, StringRef ProfileFilename) { + auto CounterMappingBuff = MemoryBuffer::getFileOrSTDIN(ObjectFilename); + if (auto EC = CounterMappingBuff.getError()) + return EC; + ObjectFileCoverageMappingReader CoverageReader(CounterMappingBuff.get()); + if (auto EC = CoverageReader.readHeader()) + return EC; + std::unique_ptr ProfileReader; + if (auto EC = IndexedInstrProfReader::create(ProfileFilename, ProfileReader)) + return EC; + return load(CoverageReader, *ProfileReader); +} + namespace { /// \brief Distributes functions into instantiation sets. /// diff --git a/tools/llvm-cov/CodeCoverage.cpp b/tools/llvm-cov/CodeCoverage.cpp index 5fc5a849cec..9e2f154c233 100644 --- a/tools/llvm-cov/CodeCoverage.cpp +++ b/tools/llvm-cov/CodeCoverage.cpp @@ -196,24 +196,7 @@ CodeCoverageTool::createSourceFileView(StringRef SourceFile, } std::unique_ptr CodeCoverageTool::load() { - auto CounterMappingBuff = MemoryBuffer::getFileOrSTDIN(ObjectFilename); - if (auto EC = CounterMappingBuff.getError()) { - error(EC.message(), ObjectFilename); - return nullptr; - } - ObjectFileCoverageMappingReader MappingReader(CounterMappingBuff.get()); - if (auto EC = MappingReader.readHeader()) { - error(EC.message(), ObjectFilename); - return nullptr; - } - - std::unique_ptr PGOReader; - if (auto EC = IndexedInstrProfReader::create(PGOFilename, PGOReader)) { - error(EC.message(), PGOFilename); - return nullptr; - } - - auto CoverageOrErr = CoverageMapping::load(MappingReader, *PGOReader); + auto CoverageOrErr = CoverageMapping::load(ObjectFilename, PGOFilename); if (std::error_code EC = CoverageOrErr.getError()) { colored_ostream(errs(), raw_ostream::RED) << "error: Failed to load coverage: " << EC.message();