summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Bogner <mail@justinbogner.com>2014-09-20 17:19:52 +0000
committerJustin Bogner <mail@justinbogner.com>2014-09-20 17:19:52 +0000
commit19a93ba81457afc4cd0e095b79d913e66c47cab9 (patch)
treee60a99257d9a3dbfe0229d5fe89dda935ff75ee5
parent953e2407edb956eb846a79fc0dce08d032ea0d66 (diff)
downloadbcm5719-llvm-19a93ba81457afc4cd0e095b79d913e66c47cab9.tar.gz
bcm5719-llvm-19a93ba81457afc4cd0e095b79d913e66c47cab9.zip
llvm-cov: Allow creating CoverageMappings from filenames
llvm-svn: 218185
-rw-r--r--llvm/include/llvm/ProfileData/CoverageMapping.h6
-rw-r--r--llvm/lib/ProfileData/CoverageMapping.cpp14
-rw-r--r--llvm/tools/llvm-cov/CodeCoverage.cpp19
3 files changed, 20 insertions, 19 deletions
diff --git a/llvm/include/llvm/ProfileData/CoverageMapping.h b/llvm/include/llvm/ProfileData/CoverageMapping.h
index 2dba5f4abd5..a7c124adf33 100644
--- a/llvm/include/llvm/ProfileData/CoverageMapping.h
+++ b/llvm/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<std::unique_ptr<CoverageMapping>>
load(ObjectFileCoverageMappingReader &CoverageReader,
IndexedInstrProfReader &ProfileReader);
+ /// \brief Load the coverage mapping from the given files.
+ static ErrorOr<std::unique_ptr<CoverageMapping>>
+ 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/llvm/lib/ProfileData/CoverageMapping.cpp b/llvm/lib/ProfileData/CoverageMapping.cpp
index 2e205f3fba5..540e6433322 100644
--- a/llvm/lib/ProfileData/CoverageMapping.cpp
+++ b/llvm/lib/ProfileData/CoverageMapping.cpp
@@ -183,6 +183,20 @@ CoverageMapping::load(ObjectFileCoverageMappingReader &CoverageReader,
return std::move(Coverage);
}
+ErrorOr<std::unique_ptr<CoverageMapping>>
+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<IndexedInstrProfReader> ProfileReader;
+ if (auto EC = IndexedInstrProfReader::create(ProfileFilename, ProfileReader))
+ return EC;
+ return load(CoverageReader, *ProfileReader);
+}
+
namespace {
/// \brief Distributes functions into instantiation sets.
///
diff --git a/llvm/tools/llvm-cov/CodeCoverage.cpp b/llvm/tools/llvm-cov/CodeCoverage.cpp
index 5fc5a849cec..9e2f154c233 100644
--- a/llvm/tools/llvm-cov/CodeCoverage.cpp
+++ b/llvm/tools/llvm-cov/CodeCoverage.cpp
@@ -196,24 +196,7 @@ CodeCoverageTool::createSourceFileView(StringRef SourceFile,
}
std::unique_ptr<CoverageMapping> 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<IndexedInstrProfReader> 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();
OpenPOWER on IntegriCloud