llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-bolt Author: shaw young (shawbyoung) <details> <summary>Changes</summary> Matching functions based on edit distance. Test Plan: tbd --- Full diff: https://github.com/llvm/llvm-project/pull/95884.diff 1 Files Affected: - (modified) bolt/lib/Profile/YAMLProfileReader.cpp (+29) ``````````diff diff --git a/bolt/lib/Profile/YAMLProfileReader.cpp b/bolt/lib/Profile/YAMLProfileReader.cpp index f25f59201f1cd..a4f8ba9a440b6 100644 --- a/bolt/lib/Profile/YAMLProfileReader.cpp +++ b/bolt/lib/Profile/YAMLProfileReader.cpp @@ -13,6 +13,7 @@ #include "bolt/Profile/ProfileYAMLMapping.h" #include "bolt/Utils/Utils.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/edit_distance.h" #include "llvm/Support/CommandLine.h" using namespace llvm; @@ -23,6 +24,10 @@ extern cl::opt<unsigned> Verbosity; extern cl::OptionCategory BoltOptCategory; extern cl::opt<bool> InferStaleProfile; +cl::opt<unsigned> NameSimilarityFunctionMatchingThreshold( + "name-similarity-function-matching-threshold", cl::desc("edit distance."), + cl::init(0), cl::Hidden, cl::cat(BoltOptCategory)); + static llvm::cl::opt<bool> IgnoreHash("profile-ignore-hash", cl::desc("ignore hash while reading function profile"), @@ -415,6 +420,30 @@ Error YAMLProfileReader::readProfile(BinaryContext &BC) { if (!YamlBF.Used && BF && !ProfiledFunctions.count(BF)) matchProfileToFunction(YamlBF, *BF); + // Uses name similarity to match functions that were not matched by name. + for (auto YamlBF : YamlBP.Functions) { + if (YamlBF.Used) + continue; + + unsigned MinEditDistance = UINT_MAX; + BinaryFunction *ClosestNameBF = nullptr; + + for (auto &[_, BF] : BC.getBinaryFunctions()) { + if (ProfiledFunctions.count(&BF)) + continue; + + unsigned BFEditDistance = BF.getOneName().edit_distance(YamlBF.Name); + if (BFEditDistance < MinEditDistance) { + MinEditDistance = BFEditDistance; + ClosestNameBF = &BF; + } + } + + if (ClosestNameBF && + MinEditDistance < opts::NameSimilarityFunctionMatchingThreshold) + matchProfileToFunction(YamlBF, *ClosestNameBF); + } + for (yaml::bolt::BinaryFunctionProfile &YamlBF : YamlBP.Functions) if (!YamlBF.Used && opts::Verbosity >= 1) errs() << "BOLT-WARNING: profile ignored for function " << YamlBF.Name `````````` </details> https://github.com/llvm/llvm-project/pull/95884 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits