diff --git a/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.h b/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.h --- a/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.h +++ b/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.h @@ -26,9 +26,12 @@ class PseudoProbeHandler : public AsmPrinterHandler { // Target of pseudo probe emission. AsmPrinter *Asm; + // Name to GUID map + DenseMap NameGuidMap; public: PseudoProbeHandler(AsmPrinter *A) : Asm(A){}; + ~PseudoProbeHandler() override; void emitPseudoProbe(uint64_t Guid, uint64_t Index, uint64_t Type, uint64_t Attr, const DILocation *DebugLoc); diff --git a/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp --- a/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/PseudoProbePrinter.cpp @@ -20,6 +20,8 @@ using namespace llvm; +PseudoProbeHandler::~PseudoProbeHandler() = default; + void PseudoProbeHandler::emitPseudoProbe(uint64_t Guid, uint64_t Index, uint64_t Type, uint64_t Attr, const DILocation *DebugLoc) { @@ -33,9 +35,9 @@ const DISubprogram *SP = InlinedAt->getScope()->getSubprogram(); // Use linkage name for C++ if possible. auto Name = SP->getLinkageName(); - if (Name.empty()) - Name = SP->getName(); - uint64_t CallerGuid = Function::getGUID(Name); + uint64_t &CallerGuid = NameGuidMap[Name]; + if (!CallerGuid) + CallerGuid = Function::getGUID(Name); uint64_t CallerProbeId = PseudoProbeDwarfDiscriminator::extractProbeIndex( InlinedAt->getDiscriminator()); ReversedInlineStack.emplace_back(CallerGuid, CallerProbeId);