diff options
author | Philip Reames <preames@rivosinc.com> | 2025-06-08 17:40:57 -0700 |
---|---|---|
committer | Amir Ayupov <aaupov@fb.com> | 2025-06-08 17:40:57 -0700 |
commit | 625898dc2c8f61222bc69871f2f7a7c8416ce5ad (patch) | |
tree | cc51ae02965e34136c993b03a3090a7c53c701a6 | |
parent | 30bd6fe5e5bd0176886a7323f1ba21016ea54a88 (diff) | |
download | llvm-users/aaupov/spr/main.boltnfc-move-lbrentry-from-datareader-to-dataaggregator.zip llvm-users/aaupov/spr/main.boltnfc-move-lbrentry-from-datareader-to-dataaggregator.tar.gz llvm-users/aaupov/spr/main.boltnfc-move-lbrentry-from-datareader-to-dataaggregator.tar.bz2 |
[𝘀𝗽𝗿] changes introduced through rebaseusers/aaupov/spr/main.boltnfc-move-lbrentry-from-datareader-to-dataaggregator
Created using spr 1.3.4
[skip ci]
-rw-r--r-- | bolt/include/bolt/Core/BinaryFunction.h | 12 | ||||
-rw-r--r-- | bolt/include/bolt/Profile/DataReader.h | 3 | ||||
-rw-r--r-- | bolt/include/bolt/Profile/ProfileYAMLMapping.h | 2 | ||||
-rw-r--r-- | bolt/lib/Core/BinaryFunction.cpp | 2 | ||||
-rw-r--r-- | bolt/lib/Passes/ProfileQualityStats.cpp | 3 | ||||
-rw-r--r-- | bolt/lib/Profile/BoltAddressTranslation.cpp | 4 | ||||
-rw-r--r-- | bolt/lib/Profile/DataAggregator.cpp | 8 | ||||
-rw-r--r-- | bolt/lib/Profile/DataReader.cpp | 6 | ||||
-rw-r--r-- | bolt/lib/Profile/YAMLProfileReader.cpp | 1 | ||||
-rw-r--r-- | bolt/lib/Profile/YAMLProfileWriter.cpp | 1 | ||||
-rw-r--r-- | bolt/test/X86/shrinkwrapping.test | 2 |
11 files changed, 8 insertions, 36 deletions
diff --git a/bolt/include/bolt/Core/BinaryFunction.h b/bolt/include/bolt/Core/BinaryFunction.h index ca8b786..14957cb 100644 --- a/bolt/include/bolt/Core/BinaryFunction.h +++ b/bolt/include/bolt/Core/BinaryFunction.h @@ -388,10 +388,6 @@ private: /// The profile data for the number of times the function was executed. uint64_t ExecutionCount{COUNT_NO_PROFILE}; - /// Profile data for the number of times this function was entered from - /// external code (DSO, JIT, etc). - uint64_t ExternEntryCount{0}; - /// Profile match ratio. float ProfileMatchRatio{0.0f}; @@ -1881,10 +1877,6 @@ public: return *this; } - /// Set the profile data for the number of times the function was entered from - /// external code (DSO/JIT). - void setExternEntryCount(uint64_t Count) { ExternEntryCount = Count; } - /// Adjust execution count for the function by a given \p Count. The value /// \p Count will be subtracted from the current function count. /// @@ -1912,10 +1904,6 @@ public: /// Return COUNT_NO_PROFILE if there's no profile info. uint64_t getExecutionCount() const { return ExecutionCount; } - /// Return the profile information about the number of times the function was - /// entered from external code (DSO/JIT). - uint64_t getExternEntryCount() const { return ExternEntryCount; } - /// Return the raw profile information about the number of branch /// executions corresponding to this function. uint64_t getRawSampleCount() const { return RawSampleCount; } diff --git a/bolt/include/bolt/Profile/DataReader.h b/bolt/include/bolt/Profile/DataReader.h index 60316ff..5df1b5a8 100644 --- a/bolt/include/bolt/Profile/DataReader.h +++ b/bolt/include/bolt/Profile/DataReader.h @@ -109,9 +109,6 @@ struct FuncBranchData { /// Total execution count for the function. int64_t ExecutionCount{0}; - /// Total entry count from external code for the function. - uint64_t ExternEntryCount{0}; - /// Indicate if the data was used. bool Used{false}; diff --git a/bolt/include/bolt/Profile/ProfileYAMLMapping.h b/bolt/include/bolt/Profile/ProfileYAMLMapping.h index 41e2bd1..a8d9a15 100644 --- a/bolt/include/bolt/Profile/ProfileYAMLMapping.h +++ b/bolt/include/bolt/Profile/ProfileYAMLMapping.h @@ -206,7 +206,6 @@ struct BinaryFunctionProfile { uint32_t Id{0}; llvm::yaml::Hex64 Hash{0}; uint64_t ExecCount{0}; - uint64_t ExternEntryCount{0}; std::vector<BinaryBasicBlockProfile> Blocks; std::vector<InlineTreeNode> InlineTree; bool Used{false}; @@ -219,7 +218,6 @@ template <> struct MappingTraits<bolt::BinaryFunctionProfile> { YamlIO.mapRequired("fid", BFP.Id); YamlIO.mapRequired("hash", BFP.Hash); YamlIO.mapRequired("exec", BFP.ExecCount); - YamlIO.mapOptional("extern", BFP.ExternEntryCount, 0); YamlIO.mapRequired("nblocks", BFP.NumBasicBlocks); YamlIO.mapOptional("blocks", BFP.Blocks, std::vector<bolt::BinaryBasicBlockProfile>()); diff --git a/bolt/lib/Core/BinaryFunction.cpp b/bolt/lib/Core/BinaryFunction.cpp index b998d71..6d1969f 100644 --- a/bolt/lib/Core/BinaryFunction.cpp +++ b/bolt/lib/Core/BinaryFunction.cpp @@ -471,8 +471,6 @@ void BinaryFunction::print(raw_ostream &OS, std::string Annotation) { OS << "\n Sample Count: " << RawSampleCount; OS << "\n Profile Acc : " << format("%.1f%%", ProfileMatchRatio * 100.0f); } - if (ExternEntryCount) - OS << "\n Extern Entry Count: " << ExternEntryCount; if (opts::PrintDynoStats && !getLayout().block_empty()) { OS << '\n'; diff --git a/bolt/lib/Passes/ProfileQualityStats.cpp b/bolt/lib/Passes/ProfileQualityStats.cpp index 64cc662..dfd74d3 100644 --- a/bolt/lib/Passes/ProfileQualityStats.cpp +++ b/bolt/lib/Passes/ProfileQualityStats.cpp @@ -532,9 +532,6 @@ void computeFlowMappings(const BinaryContext &BC, FlowInfo &TotalFlowMap) { std::vector<uint64_t> &MaxCountMap = TotalMaxCountMaps[FunctionNum]; std::vector<uint64_t> &MinCountMap = TotalMinCountMaps[FunctionNum]; - // Record external entry count into CallGraphIncomingFlows - CallGraphIncomingFlows[FunctionNum] += Function->getExternEntryCount(); - // Update MaxCountMap, MinCountMap, and CallGraphIncomingFlows auto recordCall = [&](const BinaryBasicBlock *SourceBB, const MCSymbol *DestSymbol, uint64_t Count, diff --git a/bolt/lib/Profile/BoltAddressTranslation.cpp b/bolt/lib/Profile/BoltAddressTranslation.cpp index 7ad4e6a..a253522 100644 --- a/bolt/lib/Profile/BoltAddressTranslation.cpp +++ b/bolt/lib/Profile/BoltAddressTranslation.cpp @@ -546,7 +546,7 @@ BoltAddressTranslation::getFallthroughsInTrace(uint64_t FuncAddress, return Res; for (auto Iter = FromIter; Iter != ToIter;) { - const uint32_t Src = Iter->second >> 1; + const uint32_t Src = Iter->first; if (Iter->second & BRANCHENTRY) { ++Iter; continue; @@ -557,7 +557,7 @@ BoltAddressTranslation::getFallthroughsInTrace(uint64_t FuncAddress, ++Iter; if (Iter->second & BRANCHENTRY) break; - Res.emplace_back(Src, Iter->second >> 1); + Res.emplace_back(Src, Iter->first); } return Res; diff --git a/bolt/lib/Profile/DataAggregator.cpp b/bolt/lib/Profile/DataAggregator.cpp index 52452a3..2527b5b 100644 --- a/bolt/lib/Profile/DataAggregator.cpp +++ b/bolt/lib/Profile/DataAggregator.cpp @@ -827,8 +827,13 @@ bool DataAggregator::doTrace(const LBREntry &First, const LBREntry &Second, << FromFunc->getPrintName() << ":" << Twine::utohexstr(First.To) << " to " << Twine::utohexstr(Second.From) << ".\n"); - for (auto [From, To] : *FTs) + for (auto [From, To] : *FTs) { + if (BAT) { + From = BAT->translate(FromFunc->getAddress(), From, /*IsBranchSrc=*/true); + To = BAT->translate(FromFunc->getAddress(), To, /*IsBranchSrc=*/false); + } doIntraBranch(*ParentFunc, From, To, Count, false); + } return true; } @@ -2284,7 +2289,6 @@ std::error_code DataAggregator::writeBATYAML(BinaryContext &BC, YamlBF.Id = BF->getFunctionNumber(); YamlBF.Hash = BAT->getBFHash(FuncAddress); YamlBF.ExecCount = BF->getKnownExecutionCount(); - YamlBF.ExternEntryCount = BF->getExternEntryCount(); YamlBF.NumBasicBlocks = BAT->getNumBasicBlocks(FuncAddress); const BoltAddressTranslation::BBHashMapTy &BlockMap = BAT->getBBHashMap(FuncAddress); diff --git a/bolt/lib/Profile/DataReader.cpp b/bolt/lib/Profile/DataReader.cpp index afe2421..c512394 100644 --- a/bolt/lib/Profile/DataReader.cpp +++ b/bolt/lib/Profile/DataReader.cpp @@ -85,7 +85,6 @@ void FuncBranchData::appendFrom(const FuncBranchData &FBD, uint64_t Offset) { } llvm::stable_sort(Data); ExecutionCount += FBD.ExecutionCount; - ExternEntryCount += FBD.ExternEntryCount; for (auto I = FBD.EntryData.begin(), E = FBD.EntryData.end(); I != E; ++I) { assert(I->To.Name == FBD.Name); auto NewElmt = EntryData.insert(EntryData.end(), *I); @@ -270,7 +269,6 @@ Error DataReader::preprocessProfile(BinaryContext &BC) { if (FuncBranchData *FuncData = getBranchDataForNames(Function.getNames())) { setBranchData(Function, FuncData); Function.ExecutionCount = FuncData->ExecutionCount; - Function.ExternEntryCount = FuncData->ExternEntryCount; FuncData->Used = true; } } @@ -421,7 +419,6 @@ void DataReader::matchProfileData(BinaryFunction &BF) { if (fetchProfileForOtherEntryPoints(BF)) { BF.ProfileMatchRatio = evaluateProfileData(BF, *FBD); BF.ExecutionCount = FBD->ExecutionCount; - BF.ExternEntryCount = FBD->ExternEntryCount; BF.RawSampleCount = FBD->getNumExecutedBranches(); } return; @@ -452,7 +449,6 @@ void DataReader::matchProfileData(BinaryFunction &BF) { setBranchData(BF, NewBranchData); NewBranchData->Used = true; BF.ExecutionCount = NewBranchData->ExecutionCount; - BF.ExternEntryCount = NewBranchData->ExternEntryCount; BF.ProfileMatchRatio = 1.0f; break; } @@ -1194,8 +1190,6 @@ std::error_code DataReader::parse() { if (BI.To.IsSymbol && BI.To.Offset == 0) { I = GetOrCreateFuncEntry(BI.To.Name); I->second.ExecutionCount += BI.Branches; - if (!BI.From.IsSymbol) - I->second.ExternEntryCount += BI.Branches; } } diff --git a/bolt/lib/Profile/YAMLProfileReader.cpp b/bolt/lib/Profile/YAMLProfileReader.cpp index 086e47b..33ce40a 100644 --- a/bolt/lib/Profile/YAMLProfileReader.cpp +++ b/bolt/lib/Profile/YAMLProfileReader.cpp @@ -176,7 +176,6 @@ bool YAMLProfileReader::parseFunctionProfile( uint64_t FunctionExecutionCount = 0; BF.setExecutionCount(YamlBF.ExecCount); - BF.setExternEntryCount(YamlBF.ExternEntryCount); uint64_t FuncRawBranchCount = 0; for (const yaml::bolt::BinaryBasicBlockProfile &YamlBB : YamlBF.Blocks) diff --git a/bolt/lib/Profile/YAMLProfileWriter.cpp b/bolt/lib/Profile/YAMLProfileWriter.cpp index f4308d6..f1fe45f 100644 --- a/bolt/lib/Profile/YAMLProfileWriter.cpp +++ b/bolt/lib/Profile/YAMLProfileWriter.cpp @@ -226,7 +226,6 @@ YAMLProfileWriter::convert(const BinaryFunction &BF, bool UseDFS, YamlBF.Hash = BF.getHash(); YamlBF.NumBasicBlocks = BF.size(); YamlBF.ExecCount = BF.getKnownExecutionCount(); - YamlBF.ExternEntryCount = BF.getExternEntryCount(); DenseMap<const MCDecodedPseudoProbeInlineTree *, uint32_t> InlineTreeNodeId; if (PseudoProbeDecoder && BF.getGUID()) { std::tie(YamlBF.InlineTree, InlineTreeNodeId) = diff --git a/bolt/test/X86/shrinkwrapping.test b/bolt/test/X86/shrinkwrapping.test index 521b456..8581d7e 100644 --- a/bolt/test/X86/shrinkwrapping.test +++ b/bolt/test/X86/shrinkwrapping.test @@ -8,7 +8,6 @@ REQUIRES: shell RUN: %clangxx %cxxflags -no-pie %S/Inputs/exc4sw.S -o %t.exe -Wl,-q RUN: llvm-bolt %t.exe -o %t --relocs --frame-opt=all \ -RUN: --print-only=main --print-cfg \ RUN: --data=%p/Inputs/exc4sw.fdata --reorder-blocks=cache 2>&1 | \ RUN: FileCheck %s --check-prefix=CHECK-BOLT @@ -20,7 +19,6 @@ RUN: llvm-objdump --dwarf=frames %t | grep -A20 -e \ RUN: `llvm-nm --numeric-sort %t | grep main | tail -n 1 | cut -f1 -d' ' | \ RUN: tail -c9` 2>&1 | FileCheck %s --check-prefix=CHECK-OUTPUT -CHECK-BOLT: Extern Entry Count: 100 CHECK-BOLT: Shrink wrapping moved 2 spills inserting load/stores and 0 spills inserting push/pops CHECK-INPUT: DW_CFA_advance_loc: 2 |