[llvm] [BOLT][NFC] Simplify YAMLProfileWriter::convert (PR #82129)
Amir Ayupov via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 20 14:38:49 PDT 2024
https://github.com/aaupov updated https://github.com/llvm/llvm-project/pull/82129
>From e1e30df37e8d21447e46290f394fe2caf22656f1 Mon Sep 17 00:00:00 2001
From: Amir Ayupov <aaupov at meta.com>
Date: Sat, 17 Feb 2024 12:47:55 -0800
Subject: [PATCH] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20change?=
=?UTF-8?q?s=20to=20main=20this=20commit=20is=20based=20on?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Created using spr 1.3.4
[skip ci]
---
bolt/include/bolt/Profile/YAMLProfileWriter.h | 4 ++
bolt/lib/Profile/YAMLProfileWriter.cpp | 65 +++++++++----------
2 files changed, 36 insertions(+), 33 deletions(-)
diff --git a/bolt/include/bolt/Profile/YAMLProfileWriter.h b/bolt/include/bolt/Profile/YAMLProfileWriter.h
index 2d3009ca91759b..882748627e7f54 100644
--- a/bolt/include/bolt/Profile/YAMLProfileWriter.h
+++ b/bolt/include/bolt/Profile/YAMLProfileWriter.h
@@ -9,6 +9,7 @@
#ifndef BOLT_PROFILE_YAML_PROFILE_WRITER_H
#define BOLT_PROFILE_YAML_PROFILE_WRITER_H
+#include "bolt/Profile/ProfileYAMLMapping.h"
#include "llvm/Support/raw_ostream.h"
#include <system_error>
@@ -29,6 +30,9 @@ class YAMLProfileWriter {
/// Save execution profile for that instance.
std::error_code writeProfile(const RewriteInstance &RI);
+
+ static yaml::bolt::BinaryFunctionProfile convert(const BinaryFunction &BF,
+ bool UseDFS);
};
} // namespace bolt
diff --git a/bolt/lib/Profile/YAMLProfileWriter.cpp b/bolt/lib/Profile/YAMLProfileWriter.cpp
index dffd851a1d6f77..86a049ee5e0f13 100644
--- a/bolt/lib/Profile/YAMLProfileWriter.cpp
+++ b/bolt/lib/Profile/YAMLProfileWriter.cpp
@@ -10,7 +10,6 @@
#include "bolt/Core/BinaryBasicBlock.h"
#include "bolt/Core/BinaryFunction.h"
#include "bolt/Profile/ProfileReaderBase.h"
-#include "bolt/Profile/ProfileYAMLMapping.h"
#include "bolt/Rewrite/RewriteInstance.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/FileSystem.h"
@@ -26,15 +25,34 @@ extern llvm::cl::opt<bool> ProfileUseDFS;
namespace llvm {
namespace bolt {
-namespace {
-void convert(const BinaryFunction &BF,
- yaml::bolt::BinaryFunctionProfile &YamlBF) {
+/// Set CallSiteInfo destination fields from \p Symbol and return a target
+/// BinaryFunction for that symbol.
+static const BinaryFunction *setCSIDestination(const BinaryContext &BC,
+ yaml::bolt::CallSiteInfo &CSI,
+ const MCSymbol *Symbol) {
+ CSI.DestId = 0; // designated for unknown functions
+ CSI.EntryDiscriminator = 0;
+ if (Symbol) {
+ uint64_t EntryID = 0;
+ if (const BinaryFunction *const Callee =
+ BC.getFunctionForSymbol(Symbol, &EntryID)) {
+ CSI.DestId = Callee->getFunctionNumber();
+ CSI.EntryDiscriminator = EntryID;
+ return Callee;
+ }
+ }
+ return nullptr;
+}
+
+yaml::bolt::BinaryFunctionProfile
+YAMLProfileWriter::convert(const BinaryFunction &BF, bool UseDFS) {
+ yaml::bolt::BinaryFunctionProfile YamlBF;
const BinaryContext &BC = BF.getBinaryContext();
const uint16_t LBRProfile = BF.getProfileFlags() & BinaryFunction::PF_LBR;
// Prepare function and block hashes
- BF.computeHash(opts::ProfileUseDFS);
+ BF.computeHash(UseDFS);
BF.computeBlockHashes();
YamlBF.Name = BF.getPrintName();
@@ -44,7 +62,7 @@ void convert(const BinaryFunction &BF,
YamlBF.ExecCount = BF.getKnownExecutionCount();
BinaryFunction::BasicBlockOrderType Order;
- llvm::copy(opts::ProfileUseDFS ? BF.dfs() : BF.getLayout().blocks(),
+ llvm::copy(UseDFS ? BF.dfs() : BF.getLayout().blocks(),
std::back_inserter(Order));
for (const BinaryBasicBlock *BB : Order) {
@@ -79,32 +97,15 @@ void convert(const BinaryFunction &BF,
if (!ICSP)
continue;
for (const IndirectCallProfile &CSP : ICSP.get()) {
- StringRef TargetName = "";
- CSI.DestId = 0; // designated for unknown functions
- CSI.EntryDiscriminator = 0;
- if (CSP.Symbol) {
- const BinaryFunction *Callee = BC.getFunctionForSymbol(CSP.Symbol);
- if (Callee) {
- CSI.DestId = Callee->getFunctionNumber();
- TargetName = Callee->getOneName();
- }
- }
+ const BinaryFunction *Callee = setCSIDestination(BC, CSI, CSP.Symbol);
CSI.Count = CSP.Count;
CSI.Mispreds = CSP.Mispreds;
- CSTargets.emplace_back(TargetName, CSI);
+ if (CSI.Count && Callee)
+ CSTargets.emplace_back(Callee->getOneName(), CSI);
}
} else { // direct call or a tail call
- uint64_t EntryID = 0;
- CSI.DestId = 0;
- StringRef TargetName = "";
const MCSymbol *CalleeSymbol = BC.MIB->getTargetSymbol(Instr);
- const BinaryFunction *const Callee =
- BC.getFunctionForSymbol(CalleeSymbol, &EntryID);
- if (Callee) {
- CSI.DestId = Callee->getFunctionNumber();
- CSI.EntryDiscriminator = EntryID;
- TargetName = Callee->getOneName();
- }
+ const BinaryFunction *Callee = setCSIDestination(BC, CSI, CalleeSymbol);
if (BC.MIB->getConditionalTailCall(Instr)) {
auto CTCCount =
@@ -122,8 +123,8 @@ void convert(const BinaryFunction &BF,
CSI.Count = *Count;
}
- if (CSI.Count)
- CSTargets.emplace_back(TargetName, CSI);
+ if (CSI.Count && Callee)
+ CSTargets.emplace_back(Callee->getOneName(), CSI);
}
// Sort targets in a similar way to getBranchData, see Location::operator<
llvm::sort(CSTargets, [](const auto &RHS, const auto &LHS) {
@@ -165,8 +166,8 @@ void convert(const BinaryFunction &BF,
YamlBF.Blocks.emplace_back(YamlBB);
}
+ return YamlBF;
}
-} // end anonymous namespace
std::error_code YAMLProfileWriter::writeProfile(const RewriteInstance &RI) {
const BinaryContext &BC = RI.getBinaryContext();
@@ -222,9 +223,7 @@ std::error_code YAMLProfileWriter::writeProfile(const RewriteInstance &RI) {
if (!BF.hasValidProfile() && !RI.getProfileReader()->isTrustedSource())
continue;
- yaml::bolt::BinaryFunctionProfile YamlBF;
- convert(BF, YamlBF);
- BP.Functions.emplace_back(YamlBF);
+ BP.Functions.emplace_back(convert(BF, opts::ProfileUseDFS));
}
}
More information about the llvm-commits
mailing list