From: Vedant Kumar Date: Mon, 28 Mar 2016 15:49:08 +0000 (+0000) Subject: [Coverage] Strip from PGO names if no filenames are available X-Git-Tag: llvmorg-3.9.0-rc1~10753 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=43a8565be61a9e24997a6e9e971df47bbffbe6fd;p=platform%2Fupstream%2Fllvm.git [Coverage] Strip from PGO names if no filenames are available Patch suggested by David Li! llvm-svn: 264586 --- diff --git a/llvm/include/llvm/ProfileData/InstrProf.h b/llvm/include/llvm/ProfileData/InstrProf.h index 4e4d1cb..3bf0aa3 100644 --- a/llvm/include/llvm/ProfileData/InstrProf.h +++ b/llvm/include/llvm/ProfileData/InstrProf.h @@ -188,7 +188,8 @@ StringRef getPGOFuncNameVarInitializer(GlobalVariable *NameVar); /// Given a PGO function name, remove the filename prefix and return /// the original (static) function name. -StringRef getFuncNameWithoutPrefix(StringRef PGOFuncName, StringRef FileName); +StringRef getFuncNameWithoutPrefix(StringRef PGOFuncName, + StringRef FileName = ""); /// Given a vector of strings (function PGO names) \c NameStrs, the /// method generates a combined string \c Result thatis ready to be diff --git a/llvm/lib/ProfileData/CoverageMapping.cpp b/llvm/lib/ProfileData/CoverageMapping.cpp index f5d477b..aa43019 100644 --- a/llvm/lib/ProfileData/CoverageMapping.cpp +++ b/llvm/lib/ProfileData/CoverageMapping.cpp @@ -205,7 +205,9 @@ CoverageMapping::load(CoverageMappingReader &CoverageReader, assert(!Record.MappingRegions.empty() && "Function has no regions"); StringRef OrigFuncName = Record.FunctionName; - if (!Record.Filenames.empty()) + if (Record.Filenames.empty()) + OrigFuncName = getFuncNameWithoutPrefix(OrigFuncName); + else OrigFuncName = getFuncNameWithoutPrefix(OrigFuncName, Record.Filenames[0]); FunctionRecord Function(OrigFuncName, Record.Filenames); diff --git a/llvm/lib/ProfileData/InstrProf.cpp b/llvm/lib/ProfileData/InstrProf.cpp index 045ba1a..2446521 100644 --- a/llvm/lib/ProfileData/InstrProf.cpp +++ b/llvm/lib/ProfileData/InstrProf.cpp @@ -90,7 +90,7 @@ std::string getPGOFuncName(const Function &F, uint64_t Version) { StringRef getFuncNameWithoutPrefix(StringRef PGOFuncName, StringRef FileName) { if (FileName.empty()) - FileName = ""; + return PGOFuncName; // Drop the file name including ':'. See also getPGOFuncName. if (PGOFuncName.startswith(FileName)) PGOFuncName = PGOFuncName.drop_front(FileName.size() + 1); diff --git a/llvm/unittests/ProfileData/CoverageMappingTest.cpp b/llvm/unittests/ProfileData/CoverageMappingTest.cpp index 7f80384..e1f0647 100644 --- a/llvm/unittests/ProfileData/CoverageMappingTest.cpp +++ b/llvm/unittests/ProfileData/CoverageMappingTest.cpp @@ -141,13 +141,15 @@ struct CoverageMappingTest : ::testing::Test { ProfileReader = std::move(ReaderOrErr.get()); } - void loadCoverageMapping(StringRef FuncName, uint64_t Hash) { + void loadCoverageMapping(StringRef FuncName, uint64_t Hash, + bool EmitFilenames = true) { std::string Regions = writeCoverageRegions(); readCoverageRegions(Regions); SmallVector Filenames; - for (const auto &E : Files) - Filenames.push_back(E.getKey()); + if (EmitFilenames) + for (const auto &E : Files) + Filenames.push_back(E.getKey()); OneFunctionCoverageReader CovReader(FuncName, Hash, Filenames, OutputCMRs); auto CoverageOrErr = CoverageMapping::load(CovReader, *ProfileReader); ASSERT_TRUE(NoError(CoverageOrErr.getError())); @@ -310,7 +312,7 @@ TEST_P(MaybeSparseCoverageMappingTest, strip_unknown_filename_prefix) { readProfCounts(); addCMR(Counter::getCounter(0), "", 1, 1, 9, 9); - loadCoverageMapping(":func", 0x1234); + loadCoverageMapping(":func", 0x1234, /*EmitFilenames=*/false); std::vector Names; for (const auto &Func : LoadedCoverage->getCoveredFunctions())