[llvm-branch-commits] [llvm] [BOLT] Match functions with name similarity (PR #95884)

Amir Ayupov via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Jul 2 18:55:01 PDT 2024


================
@@ -342,6 +350,107 @@ bool YAMLProfileReader::mayHaveProfileData(const BinaryFunction &BF) {
   return false;
 }
 
+uint64_t YAMLProfileReader::matchWithNameSimilarity(BinaryContext &BC) {
+  uint64_t MatchedWithNameSimilarity = 0;
+  ItaniumPartialDemangler ItaniumPartialDemangler;
+
+  // Demangle and derive namespace from function name.
+  auto DemangleName = [&](std::string &FunctionName) {
+    StringRef RestoredName = NameResolver::restore(FunctionName);
+    return demangle(RestoredName);
+  };
+  auto DeriveNameSpace = [&](std::string &DemangledName) {
+    if (ItaniumPartialDemangler.partialDemangle(DemangledName.c_str()))
+      return std::string("");
+    std::vector<char> Buffer(DemangledName.begin(), DemangledName.end());
+    size_t BufferSize = Buffer.size();
+    char *NameSpace = ItaniumPartialDemangler.getFunctionDeclContextName(
+        &Buffer[0], &BufferSize);
+    return NameSpace ? std::string(NameSpace) : std::string("");
+  };
+
+  // Maps namespaces to associated function block counts and gets profile
+  // function names and namespaces to minimize the number of BFs to process and
+  // avoid repeated name demangling/namespace derivision.
----------------
aaupov wrote:

```suggestion
  // avoid repeated name demangling/namespace derivation.
```

https://github.com/llvm/llvm-project/pull/95884


More information about the llvm-branch-commits mailing list