[llvm-branch-commits] [BOLT] Use aggregated FuncBranchData in writeBATYAML (PR #91289)
Amir Ayupov via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon May 13 12:46:22 PDT 2024
================
@@ -2386,25 +2362,26 @@ std::error_code DataAggregator::writeBATYAML(BinaryContext &BC,
return std::pair(BlockIt->first, BlockIt->second.getBBIndex());
};
- for (const auto &[FromOffset, SuccKV] : Branches.IntraIndex) {
- const auto &[_, Index] = getBlock(FromOffset);
- yaml::bolt::BinaryBasicBlockProfile &YamlBB = YamlBF.Blocks[Index];
- for (const auto &[SuccOffset, SuccDataIdx] : SuccKV)
- if (BlockMap.isInputBlock(SuccOffset))
- YamlBB.Successors.emplace_back(
- getSuccessorInfo(SuccOffset, SuccDataIdx));
- }
- for (const auto &[FromOffset, CallTo] : Branches.InterIndex) {
- const auto &[BlockOffset, BlockIndex] = getBlock(FromOffset);
- yaml::bolt::BinaryBasicBlockProfile &YamlBB = YamlBF.Blocks[BlockIndex];
- const uint32_t Offset = FromOffset - BlockOffset;
- for (const auto &[CallToLoc, CallToIdx] : CallTo)
- YamlBB.CallSites.emplace_back(
- getCallSiteInfo(CallToLoc, CallToIdx, Offset));
- llvm::sort(YamlBB.CallSites, [](yaml::bolt::CallSiteInfo &A,
- yaml::bolt::CallSiteInfo &B) {
- return A.Offset < B.Offset;
- });
+ for (const llvm::bolt::BranchInfo &BI : Branches.Data) {
+ using namespace yaml::bolt;
+ const auto &[BlockOffset, BlockIndex] = getBlock(BI.From.Offset);
+ BinaryBasicBlockProfile &YamlBB = YamlBF.Blocks[BlockIndex];
+ if (BI.To.IsSymbol && BI.To.Name == BI.From.Name && BI.To.Offset != 0) {
+ // Internal branch
+ const unsigned SuccIndex = getBlock(BI.To.Offset).second;
+ auto &SI = YamlBB.Successors.emplace_back(SuccessorInfo{SuccIndex});
+ SI.Count = BI.Branches;
----------------
aaupov wrote:
For example, an explicit cast in the constructor due to type impedance: https://github.com/llvm/llvm-project/blob/31a203fa8af47a8b2e8e357857b114cf90638b2e/bolt/lib/Profile/DataAggregator.cpp#L1296-L1298
https://github.com/llvm/llvm-project/pull/91289
More information about the llvm-branch-commits
mailing list