Skip to content

Commit

Permalink
InstrProf: Strip filename prefixes from the names we display for cove…
Browse files Browse the repository at this point in the history
…rage

For consumers of coverage data, any filename prefixes we store in the
profile data are just noise. Strip this prefix if it exists.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236558 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
bogner committed May 5, 2015
1 parent 9fb6967 commit 730ddb6
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
16 changes: 15 additions & 1 deletion lib/ProfileData/CoverageMapping.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "llvm/ProfileData/InstrProfReader.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"

using namespace llvm;
Expand Down Expand Up @@ -178,6 +179,18 @@ void FunctionRecordIterator::skipOtherFiles() {
*this = FunctionRecordIterator();
}

/// Get the function name from the record, removing the filename prefix if
/// necessary.
static StringRef getFuncNameWithoutPrefix(const CoverageMappingRecord &Record) {
StringRef FunctionName = Record.FunctionName;
if (Record.Filenames.empty())
return FunctionName;
StringRef Filename = sys::path::filename(Record.Filenames[0]);
if (FunctionName.startswith(Filename))
FunctionName = FunctionName.drop_front(Filename.size() + 1);
return FunctionName;
}

ErrorOr<std::unique_ptr<CoverageMapping>>
CoverageMapping::load(CoverageMappingReader &CoverageReader,
IndexedInstrProfReader &ProfileReader) {
Expand All @@ -199,7 +212,8 @@ CoverageMapping::load(CoverageMappingReader &CoverageReader,
Ctx.setCounts(Counts);

assert(!Record.MappingRegions.empty() && "Function has no regions");
FunctionRecord Function(Record.FunctionName, Record.Filenames);

FunctionRecord Function(getFuncNameWithoutPrefix(Record), Record.Filenames);
for (const auto &Region : Record.MappingRegions) {
ErrorOr<int64_t> ExecutionCount = Ctx.evaluate(Region.Count);
if (!ExecutionCount)
Expand Down
14 changes: 14 additions & 0 deletions unittests/ProfileData/CoverageMappingTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -259,4 +259,18 @@ TEST_F(CoverageMappingTest, dont_combine_expansions) {
ASSERT_EQ(CoverageSegment(9, 9, false), Segments[3]);
}

TEST_F(CoverageMappingTest, strip_filename_prefix) {
ProfileWriter.addFunctionCounts("file1:func", 0x1234, {10});
readProfCounts();

addCMR(Counter::getCounter(0), "file1", 1, 1, 9, 9);
loadCoverageMapping("file1:func", 0x1234);

std::vector<std::string> Names;
for (const auto &Func : LoadedCoverage->getCoveredFunctions())
Names.push_back(Func.Name);
ASSERT_EQ(1U, Names.size());
ASSERT_EQ("func", Names[0]);
}

} // end anonymous namespace

0 comments on commit 730ddb6

Please sign in to comment.