[llvm] [llvm-profgen] Loading binary functions from .symtab when DWARF info is incomplete (PR #163654)
Lei Wang via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 21 15:24:09 PST 2025
================
@@ -1034,6 +1140,48 @@ void ProfiledBinary::computeInlinedContextSizeForFunc(
}
}
+void ProfiledBinary::loadSymbolsFromPseudoProbe() {
+ if (!UsePseudoProbes)
+ return;
+
+ const AddressProbesMap &Address2ProbesMap = getAddress2ProbesMap();
+ for (auto &[Addr, Range] : StartAddrToFuncRangeMap) {
+ auto Func = Range.Func;
+ if (!Range.IsFuncEntry || Func->NameStatus != DwarfNameStatus::Mismatch)
+ continue;
+#ifndef NDEBUG
+ if (PseudoProbeNames.count(Func))
+ continue;
+#endif
+ const auto &Probe = Address2ProbesMap.find(Addr).begin();
+ if (Probe != Address2ProbesMap.end()) {
+ const MCDecodedPseudoProbeInlineTree *InlineTreeNode =
+ Probe->get().getInlineTreeNode();
+ while (!InlineTreeNode->isTopLevelFunc())
+ InlineTreeNode = static_cast<MCDecodedPseudoProbeInlineTree *>(
+ InlineTreeNode->Parent);
+
+ auto TopLevelProbes = InlineTreeNode->getProbes();
+ auto TopProbe = TopLevelProbes.begin();
+ assert(TopProbe != TopLevelProbes.end() &&
+ TopProbe->getAddress() >= Addr &&
+ "Top level pseudo probe does not match function range");
+
+ const auto *ProbeDesc = getFuncDescForGUID(InlineTreeNode->Guid);
+ auto Ret = PseudoProbeNames.emplace(Func, ProbeDesc->FuncName);
+ assert((Ret.second || Ret.first->second == ProbeDesc->FuncName) &&
+ "Mismatched pseudo probe names");
+ }
+ }
+}
+
+StringRef ProfiledBinary::findPseudoProbeName(const BinaryFunction *Func) {
+ auto ProbeName = PseudoProbeNames.find(Func);
+ if (ProbeName == PseudoProbeNames.end())
+ return StringRef();
+ return ProbeName->second;
+}
----------------
wlei-llvm wrote:
I'm wondering if we really need an extra map. The symbol from pseudo probe should be the ground truth(otherwise it's not loaded by compiler), how about we just overwriting the function name field in `BinaryFunction` (or is it because the BinaryFunction is immutable in profile generator?)
https://github.com/llvm/llvm-project/pull/163654
More information about the llvm-commits
mailing list