llvm-cov: Allow creating CoverageMappings from filenames
authorJustin Bogner <mail@justinbogner.com>
Sat, 20 Sep 2014 17:19:52 +0000 (17:19 +0000)
committerJustin Bogner <mail@justinbogner.com>
Sat, 20 Sep 2014 17:19:52 +0000 (17:19 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218185 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ProfileData/CoverageMapping.h
lib/ProfileData/CoverageMapping.cpp
tools/llvm-cov/CodeCoverage.cpp

index 2dba5f4abd5bbf3f672d02430cea9714fdfdf861..a7c124adf337b20021bdcbd1a01dfd117503e2de 100644 (file)
@@ -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
index 2e205f3fba5607e51f28afb4ae5048c6411320ba..540e6433322b0a7e4b1fd7bfa0065121f1f36094 100644 (file)
@@ -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.
 ///
index 5fc5a849cec8c9952e2f8fd2d83ea9e9700da362..9e2f154c233f63b564acc291b42062194d2c37c1 100644 (file)
@@ -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();