[llvm] [BOLT][NFC] Avoid computing BF hash twice in YAML reader (PR #75096)
Amir Ayupov via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 27 12:59:36 PDT 2024
https://github.com/aaupov updated https://github.com/llvm/llvm-project/pull/75096
>From 884368288c411fb2369f95ed37dc76cc6697aa58 Mon Sep 17 00:00:00 2001
From: Amir Ayupov <aaupov at fb.com>
Date: Thu, 7 Dec 2023 11:27:34 -0800
Subject: [PATCH] [BOLT][NFC] Avoid computing BF hash twice in YAML reader
We compute BF hashes in `YAMLProfileReader::readProfile` when first
matching profile functions with binary functions, and second time in
`YAMLProfileReader::parseFunctionProfile` during the profile assignment
(we need to do that to account for LTO private functions with
mismatching suffix).
Avoid recomputing the hash if it's been set.
---
bolt/lib/Core/BinaryFunction.cpp | 7 +++++++
bolt/lib/Profile/YAMLProfileReader.cpp | 13 ++++++++-----
2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/bolt/lib/Core/BinaryFunction.cpp b/bolt/lib/Core/BinaryFunction.cpp
index 0ac47a53a44677..172acfeedf1211 100644
--- a/bolt/lib/Core/BinaryFunction.cpp
+++ b/bolt/lib/Core/BinaryFunction.cpp
@@ -3635,6 +3635,13 @@ BinaryFunction::BasicBlockListType BinaryFunction::dfs() const {
size_t BinaryFunction::computeHash(bool UseDFS, HashFunction HashFunction,
OperandHashFuncTy OperandHashFunc) const {
+ LLVM_DEBUG({
+ dbgs() << "BOLT-DEBUG: computeHash " << getPrintName() << ' '
+ << (UseDFS ? "dfs" : "bin") << " order "
+ << (HashFunction == HashFunction::StdHash ? "std::hash" : "xxh3")
+ << '\n';
+ });
+
if (size() == 0)
return 0;
diff --git a/bolt/lib/Profile/YAMLProfileReader.cpp b/bolt/lib/Profile/YAMLProfileReader.cpp
index ade562ef6fb111..9d551d5c05b028 100644
--- a/bolt/lib/Profile/YAMLProfileReader.cpp
+++ b/bolt/lib/Profile/YAMLProfileReader.cpp
@@ -99,11 +99,14 @@ bool YAMLProfileReader::parseFunctionProfile(
FuncRawBranchCount += YamlSI.Count;
BF.setRawBranchCount(FuncRawBranchCount);
- if (!opts::IgnoreHash &&
- YamlBF.Hash != BF.computeHash(IsDFSOrder, HashFunction)) {
- if (opts::Verbosity >= 1)
- errs() << "BOLT-WARNING: function hash mismatch\n";
- ProfileMatched = false;
+ if (!opts::IgnoreHash) {
+ if (!BF.getHash())
+ BF.computeHash(IsDFSOrder, HashFunction);
+ if (YamlBF.Hash != BF.getHash()) {
+ if (opts::Verbosity >= 1)
+ errs() << "BOLT-WARNING: function hash mismatch\n";
+ ProfileMatched = false;
+ }
}
if (YamlBF.NumBasicBlocks != BF.size()) {
More information about the llvm-commits
mailing list