diff options
-rw-r--r-- | bolt/include/bolt/Core/BinaryFunction.h | 10 | ||||
-rw-r--r-- | bolt/include/bolt/Profile/DataAggregator.h | 3 | ||||
-rw-r--r-- | bolt/include/bolt/Profile/DataReader.h | 28 | ||||
-rw-r--r-- | bolt/include/bolt/Profile/ProfileYAMLMapping.h | 4 | ||||
-rw-r--r-- | bolt/lib/Core/BinaryFunction.cpp | 2 | ||||
-rw-r--r-- | bolt/lib/Core/BinaryFunctionProfile.cpp | 2 | ||||
-rw-r--r-- | bolt/lib/Passes/BinaryPasses.cpp | 2 | ||||
-rw-r--r-- | bolt/lib/Passes/MCF.cpp | 4 | ||||
-rw-r--r-- | bolt/lib/Profile/DataAggregator.cpp | 37 | ||||
-rw-r--r-- | bolt/lib/Profile/DataReader.cpp | 67 | ||||
-rw-r--r-- | bolt/lib/Profile/YAMLProfileReader.cpp | 6 | ||||
-rw-r--r-- | bolt/lib/Profile/YAMLProfileWriter.cpp | 2 | ||||
-rw-r--r-- | bolt/test/X86/branch-data.test | 2 | ||||
-rw-r--r-- | bolt/test/X86/reader-stale-yaml-std.test | 4 | ||||
-rw-r--r-- | bolt/test/X86/reader-stale-yaml.test | 4 | ||||
-rw-r--r-- | bolt/tools/merge-fdata/merge-fdata.cpp | 4 |
16 files changed, 93 insertions, 88 deletions
diff --git a/bolt/include/bolt/Core/BinaryFunction.h b/bolt/include/bolt/Core/BinaryFunction.h index c237f4a..6f3b592 100644 --- a/bolt/include/bolt/Core/BinaryFunction.h +++ b/bolt/include/bolt/Core/BinaryFunction.h @@ -142,8 +142,8 @@ public: /// Types of profile the function can use. Could be a combination. enum { PF_NONE = 0, /// No profile. - PF_LBR = 1, /// Profile is based on last branch records. - PF_SAMPLE = 2, /// Non-LBR sample-based profile. + PF_BRANCH = 1, /// Profile is based on branches or branch stacks. + PF_BASIC = 2, /// Non-branch IP sample-based profile. PF_MEMEVENT = 4, /// Profile has mem events. }; @@ -392,7 +392,7 @@ private: float ProfileMatchRatio{0.0f}; /// Raw branch count for this function in the profile. - uint64_t RawBranchCount{0}; + uint64_t RawSampleCount{0}; /// Dynamically executed function bytes, used for density computation. uint64_t SampleCountInBytes{0}; @@ -1893,11 +1893,11 @@ public: /// Return the raw profile information about the number of branch /// executions corresponding to this function. - uint64_t getRawBranchCount() const { return RawBranchCount; } + uint64_t getRawSampleCount() const { return RawSampleCount; } /// Set the profile data about the number of branch executions corresponding /// to this function. - void setRawBranchCount(uint64_t Count) { RawBranchCount = Count; } + void setRawSampleCount(uint64_t Count) { RawSampleCount = Count; } /// Return the number of dynamically executed bytes, from raw perf data. uint64_t getSampleCountInBytes() const { return SampleCountInBytes; } diff --git a/bolt/include/bolt/Profile/DataAggregator.h b/bolt/include/bolt/Profile/DataAggregator.h index c4ee75e..5eddd85 100644 --- a/bolt/include/bolt/Profile/DataAggregator.h +++ b/bolt/include/bolt/Profile/DataAggregator.h @@ -257,7 +257,8 @@ private: /// Semantic actions - parser hooks to interpret parsed perf samples /// Register a sample (non-LBR mode), i.e. a new hit at \p Address - bool doSample(BinaryFunction &Func, const uint64_t Address, uint64_t Count); + bool doBasicSample(BinaryFunction &Func, const uint64_t Address, + uint64_t Count); /// Register an intraprocedural branch \p Branch. bool doIntraBranch(BinaryFunction &Func, uint64_t From, uint64_t To, diff --git a/bolt/include/bolt/Profile/DataReader.h b/bolt/include/bolt/Profile/DataReader.h index 1b61173..80031f8 100644 --- a/bolt/include/bolt/Profile/DataReader.h +++ b/bolt/include/bolt/Profile/DataReader.h @@ -212,15 +212,16 @@ struct FuncMemData { /// Similar to BranchInfo, but instead of recording from-to address (an edge), /// it records the address of a perf event and the number of times samples hit /// this address. -struct SampleInfo { +struct BasicSampleInfo { Location Loc; int64_t Hits; - SampleInfo(Location Loc, int64_t Hits) : Loc(std::move(Loc)), Hits(Hits) {} + BasicSampleInfo(Location Loc, int64_t Hits) + : Loc(std::move(Loc)), Hits(Hits) {} - bool operator==(const SampleInfo &RHS) const { return Loc == RHS.Loc; } + bool operator==(const BasicSampleInfo &RHS) const { return Loc == RHS.Loc; } - bool operator<(const SampleInfo &RHS) const { + bool operator<(const BasicSampleInfo &RHS) const { if (Loc < RHS.Loc) return true; @@ -229,18 +230,18 @@ struct SampleInfo { void print(raw_ostream &OS) const; - void mergeWith(const SampleInfo &SI); + void mergeWith(const BasicSampleInfo &SI); }; /// Helper class to store samples recorded in the address space of a given /// function, analogous to FuncBranchData but for samples instead of branches. -struct FuncSampleData { - typedef std::vector<SampleInfo> ContainerTy; +struct FuncBasicSampleData { + typedef std::vector<BasicSampleInfo> ContainerTy; StringRef Name; ContainerTy Data; - FuncSampleData(StringRef Name, ContainerTy Data) + FuncBasicSampleData(StringRef Name, ContainerTy Data) : Name(Name), Data(std::move(Data)) {} /// Get the number of samples recorded in [Start, End) @@ -308,7 +309,7 @@ protected: /// The last step is to infer edge counts based on BB execution count. Note /// this is the opposite of the LBR way, where we infer BB execution count /// based on edge counts. - void readSampleData(BinaryFunction &BF); + void readBasicSampleData(BinaryFunction &BF); /// Convert function-level branch data into instruction annotations. void convertBranchData(BinaryFunction &BF) const; @@ -382,7 +383,8 @@ protected: /// Return mem data matching one of the names in \p FuncNames. FuncMemData *getMemDataForNames(const std::vector<StringRef> &FuncNames); - FuncSampleData *getFuncSampleData(const std::vector<StringRef> &FuncNames); + FuncBasicSampleData * + getFuncBasicSampleData(const std::vector<StringRef> &FuncNames); /// Return a vector of all FuncBranchData matching the list of names. /// Internally use fuzzy matching to match special names like LTO-generated @@ -425,7 +427,7 @@ protected: } using NamesToBranchesMapTy = std::map<StringRef, FuncBranchData>; - using NamesToSamplesMapTy = std::map<StringRef, FuncSampleData>; + using NamesToBasicSamplesMapTy = std::map<StringRef, FuncBasicSampleData>; using NamesToMemEventsMapTy = std::map<StringRef, FuncMemData>; using FuncsToBranchesMapTy = std::unordered_map<const BinaryFunction *, FuncBranchData *>; @@ -474,7 +476,7 @@ protected: return parseLocation(EndChar, EndNl, true); } ErrorOr<BranchInfo> parseBranchInfo(); - ErrorOr<SampleInfo> parseSampleInfo(); + ErrorOr<BasicSampleInfo> parseSampleInfo(); ErrorOr<MemInfo> parseMemInfo(); ErrorOr<bool> maybeParseNoLBRFlag(); ErrorOr<bool> maybeParseBATFlag(); @@ -488,7 +490,7 @@ protected: unsigned Line{0}; unsigned Col{0}; NamesToBranchesMapTy NamesToBranches; - NamesToSamplesMapTy NamesToSamples; + NamesToBasicSamplesMapTy NamesToBasicSamples; NamesToMemEventsMapTy NamesToMemEvents; FuncsToBranchesMapTy FuncsToBranches; FuncsToMemDataMapTy FuncsToMemData; diff --git a/bolt/include/bolt/Profile/ProfileYAMLMapping.h b/bolt/include/bolt/Profile/ProfileYAMLMapping.h index a8c9f7a1..a8d9a15 100644 --- a/bolt/include/bolt/Profile/ProfileYAMLMapping.h +++ b/bolt/include/bolt/Profile/ProfileYAMLMapping.h @@ -230,8 +230,8 @@ LLVM_YAML_STRONG_TYPEDEF(uint16_t, PROFILE_PF) template <> struct ScalarBitSetTraits<PROFILE_PF> { static void bitset(IO &io, PROFILE_PF &value) { - io.bitSetCase(value, "lbr", BinaryFunction::PF_LBR); - io.bitSetCase(value, "sample", BinaryFunction::PF_SAMPLE); + io.bitSetCase(value, "lbr", BinaryFunction::PF_BRANCH); + io.bitSetCase(value, "sample", BinaryFunction::PF_BASIC); io.bitSetCase(value, "memevent", BinaryFunction::PF_MEMEVENT); } }; diff --git a/bolt/lib/Core/BinaryFunction.cpp b/bolt/lib/Core/BinaryFunction.cpp index a7fecd0..6d9fb9d 100644 --- a/bolt/lib/Core/BinaryFunction.cpp +++ b/bolt/lib/Core/BinaryFunction.cpp @@ -473,7 +473,7 @@ void BinaryFunction::print(raw_ostream &OS, std::string Annotation) { OS << "\n Image : 0x" << Twine::utohexstr(getImageAddress()); if (ExecutionCount != COUNT_NO_PROFILE) { OS << "\n Exec Count : " << ExecutionCount; - OS << "\n Branch Count: " << RawBranchCount; + OS << "\n Sample Count: " << RawSampleCount; OS << "\n Profile Acc : " << format("%.1f%%", ProfileMatchRatio * 100.0f); } diff --git a/bolt/lib/Core/BinaryFunctionProfile.cpp b/bolt/lib/Core/BinaryFunctionProfile.cpp index 726da6a..9409106 100644 --- a/bolt/lib/Core/BinaryFunctionProfile.cpp +++ b/bolt/lib/Core/BinaryFunctionProfile.cpp @@ -70,7 +70,7 @@ void BinaryFunction::postProcessProfile() { return; } - if (!(getProfileFlags() & PF_LBR)) + if (!(getProfileFlags() & PF_BRANCH)) return; // If we have at least some branch data for the function indicate that it diff --git a/bolt/lib/Passes/BinaryPasses.cpp b/bolt/lib/Passes/BinaryPasses.cpp index d8628c6..420ffc8 100644 --- a/bolt/lib/Passes/BinaryPasses.cpp +++ b/bolt/lib/Passes/BinaryPasses.cpp @@ -1445,7 +1445,7 @@ Error PrintProgramStats::runOnFunctions(BinaryContext &BC) { if (!Function.hasProfile()) continue; - uint64_t SampleCount = Function.getRawBranchCount(); + uint64_t SampleCount = Function.getRawSampleCount(); TotalSampleCount += SampleCount; if (Function.hasValidProfile()) { diff --git a/bolt/lib/Passes/MCF.cpp b/bolt/lib/Passes/MCF.cpp index 77dea73..4f3a964 100644 --- a/bolt/lib/Passes/MCF.cpp +++ b/bolt/lib/Passes/MCF.cpp @@ -458,7 +458,7 @@ void EstimateEdgeCounts::runOnFunction(BinaryFunction &BF) { Error EstimateEdgeCounts::runOnFunctions(BinaryContext &BC) { if (llvm::none_of(llvm::make_second_range(BC.getBinaryFunctions()), [](const BinaryFunction &BF) { - return BF.getProfileFlags() == BinaryFunction::PF_SAMPLE; + return BF.getProfileFlags() == BinaryFunction::PF_BASIC; })) return Error::success(); @@ -466,7 +466,7 @@ Error EstimateEdgeCounts::runOnFunctions(BinaryContext &BC) { runOnFunction(BF); }; ParallelUtilities::PredicateTy SkipFunc = [&](const BinaryFunction &BF) { - return BF.getProfileFlags() != BinaryFunction::PF_SAMPLE; + return BF.getProfileFlags() != BinaryFunction::PF_BASIC; }; ParallelUtilities::runOnEachFunction( diff --git a/bolt/lib/Profile/DataAggregator.cpp b/bolt/lib/Profile/DataAggregator.cpp index 420e8c4..9453784 100644 --- a/bolt/lib/Profile/DataAggregator.cpp +++ b/bolt/lib/Profile/DataAggregator.cpp @@ -568,11 +568,12 @@ void DataAggregator::processProfile(BinaryContext &BC) { for (auto &BFI : BC.getBinaryFunctions()) { BinaryFunction &BF = BFI.second; if (FuncBranchData *FBD = getBranchData(BF)) { - BF.markProfiled(BinaryFunction::PF_LBR); - BF.RawBranchCount = FBD->getNumExecutedBranches(); - } else if (FuncSampleData *FSD = getFuncSampleData(BF.getNames())) { - BF.markProfiled(BinaryFunction::PF_SAMPLE); - BF.RawBranchCount = FSD->getSamples(); + BF.markProfiled(BinaryFunction::PF_BRANCH); + BF.RawSampleCount = FBD->getNumExecutedBranches(); + } else if (FuncBasicSampleData *FSD = + getFuncBasicSampleData(BF.getNames())) { + BF.markProfiled(BinaryFunction::PF_BASIC); + BF.RawSampleCount = FSD->getSamples(); } } @@ -627,8 +628,8 @@ StringRef DataAggregator::getLocationName(const BinaryFunction &Func, return OrigFunc->getOneName(); } -bool DataAggregator::doSample(BinaryFunction &OrigFunc, uint64_t Address, - uint64_t Count) { +bool DataAggregator::doBasicSample(BinaryFunction &OrigFunc, uint64_t Address, + uint64_t Count) { // To record executed bytes, use basic block size as is regardless of BAT. uint64_t BlockSize = 0; if (BinaryBasicBlock *BB = OrigFunc.getBasicBlockContainingOffset( @@ -642,13 +643,13 @@ bool DataAggregator::doSample(BinaryFunction &OrigFunc, uint64_t Address, // Attach executed bytes to parent function in case of cold fragment. Func.SampleCountInBytes += Count * BlockSize; - auto I = NamesToSamples.find(Func.getOneName()); - if (I == NamesToSamples.end()) { + auto I = NamesToBasicSamples.find(Func.getOneName()); + if (I == NamesToBasicSamples.end()) { bool Success; StringRef LocName = getLocationName(Func, BAT); - std::tie(I, Success) = NamesToSamples.insert( - std::make_pair(Func.getOneName(), - FuncSampleData(LocName, FuncSampleData::ContainerTy()))); + std::tie(I, Success) = NamesToBasicSamples.insert(std::make_pair( + Func.getOneName(), + FuncBasicSampleData(LocName, FuncBasicSampleData::ContainerTy()))); } Address -= Func.getAddress(); @@ -1661,7 +1662,7 @@ void DataAggregator::processBasicEvents() { continue; } - doSample(*Func, PC, HitCount); + doBasicSample(*Func, PC, HitCount); } outs() << "PERF2BOLT: read " << NumTotalSamples << " samples\n"; @@ -2192,9 +2193,9 @@ DataAggregator::writeAggregatedFile(StringRef OutputFilename) const { OutFile << " " << Entry.getKey(); OutFile << "\n"; - for (const auto &KV : NamesToSamples) { - const FuncSampleData &FSD = KV.second; - for (const SampleInfo &SI : FSD.Data) { + for (const auto &KV : NamesToBasicSamples) { + const FuncBasicSampleData &FSD = KV.second; + for (const BasicSampleInfo &SI : FSD.Data) { writeLocation(SI.Loc); OutFile << SI.Hits << "\n"; ++BranchValues; @@ -2267,8 +2268,8 @@ std::error_code DataAggregator::writeBATYAML(BinaryContext &BC, for (const StringMapEntry<std::nullopt_t> &EventEntry : EventNames) EventNamesOS << LS << EventEntry.first().str(); - BP.Header.Flags = opts::BasicAggregation ? BinaryFunction::PF_SAMPLE - : BinaryFunction::PF_LBR; + BP.Header.Flags = opts::BasicAggregation ? BinaryFunction::PF_BASIC + : BinaryFunction::PF_BRANCH; // Add probe inline tree nodes. YAMLProfileWriter::InlineTreeDesc InlineTree; diff --git a/bolt/lib/Profile/DataReader.cpp b/bolt/lib/Profile/DataReader.cpp index 9cc6eeb..198f7d8 100644 --- a/bolt/lib/Profile/DataReader.cpp +++ b/bolt/lib/Profile/DataReader.cpp @@ -103,20 +103,20 @@ uint64_t FuncBranchData::getNumExecutedBranches() const { return ExecutedBranches; } -void SampleInfo::mergeWith(const SampleInfo &SI) { Hits += SI.Hits; } +void BasicSampleInfo::mergeWith(const BasicSampleInfo &SI) { Hits += SI.Hits; } -void SampleInfo::print(raw_ostream &OS) const { +void BasicSampleInfo::print(raw_ostream &OS) const { OS << Loc.IsSymbol << " " << Loc.Name << " " << Twine::utohexstr(Loc.Offset) << " " << Hits << "\n"; } -uint64_t FuncSampleData::getSamples(uint64_t Start, uint64_t End) const { +uint64_t FuncBasicSampleData::getSamples(uint64_t Start, uint64_t End) const { assert(llvm::is_sorted(Data)); struct Compare { - bool operator()(const SampleInfo &SI, const uint64_t Val) const { + bool operator()(const BasicSampleInfo &SI, const uint64_t Val) const { return SI.Loc.Offset < Val; } - bool operator()(const uint64_t Val, const SampleInfo &SI) const { + bool operator()(const uint64_t Val, const BasicSampleInfo &SI) const { return Val < SI.Loc.Offset; } }; @@ -128,21 +128,21 @@ uint64_t FuncSampleData::getSamples(uint64_t Start, uint64_t End) const { return Result; } -uint64_t FuncSampleData::getSamples() const { +uint64_t FuncBasicSampleData::getSamples() const { uint64_t Result = 0; - for (const SampleInfo &I : Data) + for (const BasicSampleInfo &I : Data) Result += I.Hits; return Result; } -void FuncSampleData::bumpCount(uint64_t Offset, uint64_t Count) { +void FuncBasicSampleData::bumpCount(uint64_t Offset, uint64_t Count) { auto Iter = Index.find(Offset); if (Iter == Index.end()) { Data.emplace_back(Location(true, Name, Offset), Count); Index[Offset] = Data.size() - 1; return; } - SampleInfo &SI = Data[Iter->second]; + BasicSampleInfo &SI = Data[Iter->second]; SI.Hits += Count; } @@ -358,12 +358,12 @@ void DataReader::readProfile(BinaryFunction &BF) { return; if (!hasLBR()) { - BF.ProfileFlags = BinaryFunction::PF_SAMPLE; - readSampleData(BF); + BF.ProfileFlags = BinaryFunction::PF_BASIC; + readBasicSampleData(BF); return; } - BF.ProfileFlags = BinaryFunction::PF_LBR; + BF.ProfileFlags = BinaryFunction::PF_BRANCH; // Possibly assign/re-assign branch profile data. matchProfileData(BF); @@ -414,12 +414,12 @@ void DataReader::matchProfileData(BinaryFunction &BF) { FuncBranchData *FBD = getBranchData(BF); if (FBD) { BF.ProfileMatchRatio = evaluateProfileData(BF, *FBD); - BF.RawBranchCount = FBD->getNumExecutedBranches(); + BF.RawSampleCount = FBD->getNumExecutedBranches(); if (BF.ProfileMatchRatio == 1.0f) { if (fetchProfileForOtherEntryPoints(BF)) { BF.ProfileMatchRatio = evaluateProfileData(BF, *FBD); BF.ExecutionCount = FBD->ExecutionCount; - BF.RawBranchCount = FBD->getNumExecutedBranches(); + BF.RawSampleCount = FBD->getNumExecutedBranches(); } return; } @@ -561,8 +561,8 @@ float DataReader::evaluateProfileData(BinaryFunction &BF, return MatchRatio; } -void DataReader::readSampleData(BinaryFunction &BF) { - FuncSampleData *SampleDataOrErr = getFuncSampleData(BF.getNames()); +void DataReader::readBasicSampleData(BinaryFunction &BF) { + FuncBasicSampleData *SampleDataOrErr = getFuncBasicSampleData(BF.getNames()); if (!SampleDataOrErr) return; @@ -1013,7 +1013,7 @@ ErrorOr<MemInfo> DataReader::parseMemInfo() { return MemInfo(Offset, Addr, CountRes.get()); } -ErrorOr<SampleInfo> DataReader::parseSampleInfo() { +ErrorOr<BasicSampleInfo> DataReader::parseSampleInfo() { ErrorOr<Location> Res = parseLocation(FieldSeparator); if (std::error_code EC = Res.getError()) return EC; @@ -1031,7 +1031,7 @@ ErrorOr<SampleInfo> DataReader::parseSampleInfo() { return make_error_code(llvm::errc::io_error); } - return SampleInfo(std::move(Address), Occurrences); + return BasicSampleInfo(std::move(Address), Occurrences); } ErrorOr<bool> DataReader::maybeParseNoLBRFlag() { @@ -1088,11 +1088,11 @@ bool DataReader::hasMemData() { std::error_code DataReader::parseInNoLBRMode() { auto GetOrCreateFuncEntry = [&](StringRef Name) { - auto I = NamesToSamples.find(Name); - if (I == NamesToSamples.end()) { + auto I = NamesToBasicSamples.find(Name); + if (I == NamesToBasicSamples.end()) { bool Success; - std::tie(I, Success) = NamesToSamples.insert(std::make_pair( - Name, FuncSampleData(Name, FuncSampleData::ContainerTy()))); + std::tie(I, Success) = NamesToBasicSamples.insert(std::make_pair( + Name, FuncBasicSampleData(Name, FuncBasicSampleData::ContainerTy()))); assert(Success && "unexpected result of insert"); } @@ -1111,11 +1111,11 @@ std::error_code DataReader::parseInNoLBRMode() { }; while (hasBranchData()) { - ErrorOr<SampleInfo> Res = parseSampleInfo(); + ErrorOr<BasicSampleInfo> Res = parseSampleInfo(); if (std::error_code EC = Res.getError()) return EC; - SampleInfo SI = Res.get(); + BasicSampleInfo SI = Res.get(); // Ignore samples not involving known locations if (!SI.Loc.IsSymbol) @@ -1140,8 +1140,8 @@ std::error_code DataReader::parseInNoLBRMode() { I->second.Data.emplace_back(std::move(MI)); } - for (auto &FuncSamples : NamesToSamples) - llvm::stable_sort(FuncSamples.second.Data); + for (auto &FuncBasicSamples : NamesToBasicSamples) + llvm::stable_sort(FuncBasicSamples.second.Data); for (auto &MemEvents : NamesToMemEvents) llvm::stable_sort(MemEvents.second.Data); @@ -1321,7 +1321,7 @@ bool DataReader::mayHaveProfileData(const BinaryFunction &Function) { if (getBranchData(Function) || getMemData(Function)) return true; - if (getFuncSampleData(Function.getNames()) || + if (getFuncBasicSampleData(Function.getNames()) || getBranchDataForNames(Function.getNames()) || getMemDataForNames(Function.getNames())) return true; @@ -1357,9 +1357,10 @@ DataReader::getMemDataForNames(const std::vector<StringRef> &FuncNames) { return fetchMapEntry<NamesToMemEventsMapTy>(NamesToMemEvents, FuncNames); } -FuncSampleData * -DataReader::getFuncSampleData(const std::vector<StringRef> &FuncNames) { - return fetchMapEntry<NamesToSamplesMapTy>(NamesToSamples, FuncNames); +FuncBasicSampleData * +DataReader::getFuncBasicSampleData(const std::vector<StringRef> &FuncNames) { + return fetchMapEntry<NamesToBasicSamplesMapTy>(NamesToBasicSamples, + FuncNames); } std::vector<FuncBranchData *> DataReader::getBranchDataForNamesRegex( @@ -1399,11 +1400,11 @@ void DataReader::dump() const { StringRef Event = I->getKey(); Diag << "Data was collected with event: " << Event << "\n"; } - for (const auto &KV : NamesToSamples) { + for (const auto &KV : NamesToBasicSamples) { const StringRef Name = KV.first; - const FuncSampleData &FSD = KV.second; + const FuncBasicSampleData &FSD = KV.second; Diag << Name << " samples:\n"; - for (const SampleInfo &SI : FSD.Data) + for (const BasicSampleInfo &SI : FSD.Data) Diag << SI.Loc.Name << " " << SI.Loc.Offset << " " << SI.Hits << "\n"; } diff --git a/bolt/lib/Profile/YAMLProfileReader.cpp b/bolt/lib/Profile/YAMLProfileReader.cpp index f5636bf..821f8c3 100644 --- a/bolt/lib/Profile/YAMLProfileReader.cpp +++ b/bolt/lib/Profile/YAMLProfileReader.cpp @@ -181,7 +181,7 @@ bool YAMLProfileReader::parseFunctionProfile( for (const yaml::bolt::BinaryBasicBlockProfile &YamlBB : YamlBF.Blocks) for (const yaml::bolt::SuccessorInfo &YamlSI : YamlBB.Successors) FuncRawBranchCount += YamlSI.Count; - BF.setRawBranchCount(FuncRawBranchCount); + BF.setRawSampleCount(FuncRawBranchCount); if (BF.empty()) return true; @@ -221,7 +221,7 @@ bool YAMLProfileReader::parseFunctionProfile( // Basic samples profile (without LBR) does not have branches information // and needs a special processing. - if (YamlBP.Header.Flags & BinaryFunction::PF_SAMPLE) { + if (YamlBP.Header.Flags & BinaryFunction::PF_BASIC) { if (!YamlBB.EventCount) { BB.setExecutionCount(0); continue; @@ -338,7 +338,7 @@ bool YAMLProfileReader::parseFunctionProfile( if (BB.getExecutionCount() == BinaryBasicBlock::COUNT_NO_PROFILE) BB.setExecutionCount(0); - if (YamlBP.Header.Flags & BinaryFunction::PF_SAMPLE) + if (YamlBP.Header.Flags & BinaryFunction::PF_BASIC) BF.setExecutionCount(FunctionExecutionCount); ProfileMatched &= !MismatchedBlocks && !MismatchedCalls && !MismatchedEdges; diff --git a/bolt/lib/Profile/YAMLProfileWriter.cpp b/bolt/lib/Profile/YAMLProfileWriter.cpp index 2bdc7b6..f1fe45f 100644 --- a/bolt/lib/Profile/YAMLProfileWriter.cpp +++ b/bolt/lib/Profile/YAMLProfileWriter.cpp @@ -215,7 +215,7 @@ YAMLProfileWriter::convert(const BinaryFunction &BF, bool UseDFS, const MCPseudoProbeDecoder *PseudoProbeDecoder = opts::ProfileWritePseudoProbes ? BC.getPseudoProbeDecoder() : nullptr; - const uint16_t LBRProfile = BF.getProfileFlags() & BinaryFunction::PF_LBR; + const uint16_t LBRProfile = BF.getProfileFlags() & BinaryFunction::PF_BRANCH; // Prepare function and block hashes BF.computeHash(UseDFS); diff --git a/bolt/test/X86/branch-data.test b/bolt/test/X86/branch-data.test index 231a773..8ff2120 100644 --- a/bolt/test/X86/branch-data.test +++ b/bolt/test/X86/branch-data.test @@ -15,7 +15,7 @@ CHECK: Section : .text CHECK: IsSimple : 1 CHECK: BB Count : 5 CHECK: Exec Count : 199 -CHECK: Branch Count: 7689 +CHECK: Sample Count: 7689 CHECK: } CHECK: .LBB{{.*}} CHECK: Exec Count : 199 diff --git a/bolt/test/X86/reader-stale-yaml-std.test b/bolt/test/X86/reader-stale-yaml-std.test index 9abe042..a02928a 100644 --- a/bolt/test/X86/reader-stale-yaml-std.test +++ b/bolt/test/X86/reader-stale-yaml-std.test @@ -24,7 +24,7 @@ CHECK: Section : .text CHECK: IsSimple : 1 CHECK: BB Count : 18 CHECK: Exec Count : 151 -CHECK: Branch Count: 552 +CHECK: Sample Count: 552 CHECK: } ## Verify block counts. CHECK: .LBB00 (43 instructions, align : 1) @@ -51,7 +51,7 @@ CHECK: Section : .text CHECK: IsSimple : 1 CHECK: BB Count : 5 CHECK: Exec Count : 20 -CHECK: Branch Count: 640 +CHECK: Sample Count: 640 CHECK: } ## Verify block counts. CHECK: .LBB01 (4 instructions, align : 1) diff --git a/bolt/test/X86/reader-stale-yaml.test b/bolt/test/X86/reader-stale-yaml.test index 7a9540c..4c6e9c2 100644 --- a/bolt/test/X86/reader-stale-yaml.test +++ b/bolt/test/X86/reader-stale-yaml.test @@ -47,7 +47,7 @@ CHECK1: Section : .text CHECK1: IsSimple : 1 CHECK1: BB Count : 5 CHECK1: Exec Count : 20 -CHECK1: Branch Count: 640 +CHECK1: Sample Count: 640 CHECK1: } ## Verify block counts. @@ -95,7 +95,7 @@ CHECK2: Section : .text CHECK2: IsSimple : 1 CHECK2: BB Count : 18 CHECK2: Exec Count : 151 -CHECK2: Branch Count: 552 +CHECK2: Sample Count: 552 ## Verify block counts. CHECK2: .LBB00 (43 instructions, align : 1) diff --git a/bolt/tools/merge-fdata/merge-fdata.cpp b/bolt/tools/merge-fdata/merge-fdata.cpp index 864aa67..cfcb937 100644 --- a/bolt/tools/merge-fdata/merge-fdata.cpp +++ b/bolt/tools/merge-fdata/merge-fdata.cpp @@ -124,8 +124,8 @@ void mergeProfileHeaders(BinaryProfileHeader &MergedHeader, if (!MergedHeader.Flags) MergedHeader.Flags = Header.Flags; - constexpr auto Mask = llvm::bolt::BinaryFunction::PF_LBR | - llvm::bolt::BinaryFunction::PF_SAMPLE; + constexpr auto Mask = llvm::bolt::BinaryFunction::PF_BRANCH | + llvm::bolt::BinaryFunction::PF_BASIC; if ((MergedHeader.Flags & Mask) != (Header.Flags & Mask)) { errs() << "ERROR: cannot merge LBR profile with non-LBR profile\n"; exit(1); |