https://github.com/orodley created https://github.com/llvm/llvm-project/pull/133682
This takes the existing AssignGUID pass from CtxProfAnalysis, and runs it by default, at the appropriate stages of the LTO pipeline. It also changes GlobalValue::getGUID() to retrieve the GUID from the metadata instead of computing it. We don't yet have the supporting downstream changes to make a dedicated GUID table in bitcode, nor do we use the metadata as part of ThinLTO -- it retains its existing mechanisms of recomputing GUIDs from separately saved data. That will be changed later. >From 1379952ca664e04c4aa6806a724bcda1b0fc1a48 Mon Sep 17 00:00:00 2001 From: Owen Rodley <orod...@google.com> Date: Mon, 31 Mar 2025 16:16:35 +1100 Subject: [PATCH] Store GUIDs in metadata This takes the existing AssignGUID pass from CtxProfAnalysis, and runs it by default, at the appropriate stages of the LTO pipeline. It also changes GlobalValue::getGUID() to retrieve the GUID from the metadata instead of computing it. We don't yet have the supporting downstream changes to make a dedicated GUID table in bitcode, nor do we use the metadata as part of ThinLTO -- it retains its existing mechanisms of recomputing GUIDs from separately saved data. That will be changed later. --- llvm/include/llvm/Analysis/CtxProfAnalysis.h | 34 +++----------- llvm/include/llvm/IR/FixedMetadataKinds.def | 1 + llvm/include/llvm/IR/GlobalValue.h | 4 +- .../llvm/Transforms/Utils/AssignGUID.h | 34 ++++++++++++++ llvm/lib/Analysis/CtxProfAnalysis.cpp | 44 ++----------------- llvm/lib/IR/Globals.cpp | 33 ++++++++++++++ llvm/lib/Passes/PassBuilder.cpp | 1 + llvm/lib/Passes/PassBuilderPipelines.cpp | 9 +++- .../Instrumentation/PGOCtxProfFlattening.cpp | 2 +- .../Instrumentation/PGOCtxProfLowering.cpp | 3 +- llvm/lib/Transforms/Utils/AssignGUID.cpp | 34 ++++++++++++++ llvm/lib/Transforms/Utils/CMakeLists.txt | 1 + .../Transforms/Utils/CallPromotionUtils.cpp | 4 +- llvm/lib/Transforms/Utils/InlineFunction.cpp | 4 +- 14 files changed, 129 insertions(+), 79 deletions(-) create mode 100644 llvm/include/llvm/Transforms/Utils/AssignGUID.h create mode 100644 llvm/lib/Transforms/Utils/AssignGUID.cpp diff --git a/llvm/include/llvm/Analysis/CtxProfAnalysis.h b/llvm/include/llvm/Analysis/CtxProfAnalysis.h index ede8bd2fe5001..484cc638a2d53 100644 --- a/llvm/include/llvm/Analysis/CtxProfAnalysis.h +++ b/llvm/include/llvm/Analysis/CtxProfAnalysis.h @@ -37,9 +37,6 @@ class PGOContextualProfile { // we'll need when we maintain the profiles during IPO transformations. std::map<GlobalValue::GUID, FunctionInfo> FuncInfo; - /// Get the GUID of this Function if it's defined in this module. - GlobalValue::GUID getDefinedFunctionGUID(const Function &F) const; - // This is meant to be constructed from CtxProfAnalysis, which will also set // its state piecemeal. PGOContextualProfile() = default; @@ -57,7 +54,7 @@ class PGOContextualProfile { const PGOCtxProfile &profiles() const { return Profiles; } bool isFunctionKnown(const Function &F) const { - return getDefinedFunctionGUID(F) != 0; + return F.getGUID() != 0; } StringRef getFunctionName(GlobalValue::GUID GUID) const { @@ -69,22 +66,22 @@ class PGOContextualProfile { uint32_t getNumCounters(const Function &F) const { assert(isFunctionKnown(F)); - return FuncInfo.find(getDefinedFunctionGUID(F))->second.NextCounterIndex; + return FuncInfo.find(F.getGUID())->second.NextCounterIndex; } uint32_t getNumCallsites(const Function &F) const { assert(isFunctionKnown(F)); - return FuncInfo.find(getDefinedFunctionGUID(F))->second.NextCallsiteIndex; + return FuncInfo.find(F.getGUID())->second.NextCallsiteIndex; } uint32_t allocateNextCounterIndex(const Function &F) { assert(isFunctionKnown(F)); - return FuncInfo.find(getDefinedFunctionGUID(F))->second.NextCounterIndex++; + return FuncInfo.find(F.getGUID())->second.NextCounterIndex++; } uint32_t allocateNextCallsiteIndex(const Function &F) { assert(isFunctionKnown(F)); - return FuncInfo.find(getDefinedFunctionGUID(F))->second.NextCallsiteIndex++; + return FuncInfo.find(F.getGUID())->second.NextCallsiteIndex++; } using ConstVisitor = function_ref<void(const PGOCtxProfContext &)>; @@ -145,26 +142,5 @@ class CtxProfAnalysisPrinterPass const PrintMode Mode; }; -/// Assign a GUID to functions as metadata. GUID calculation takes linkage into -/// account, which may change especially through and after thinlto. By -/// pre-computing and assigning as metadata, this mechanism is resilient to such -/// changes (as well as name changes e.g. suffix ".llvm." additions). - -// FIXME(mtrofin): we can generalize this mechanism to calculate a GUID early in -// the pass pipeline, associate it with any Global Value, and then use it for -// PGO and ThinLTO. -// At that point, this should be moved elsewhere. -class AssignGUIDPass : public PassInfoMixin<AssignGUIDPass> { -public: - explicit AssignGUIDPass() = default; - - /// Assign a GUID *if* one is not already assign, as a function metadata named - /// `GUIDMetadataName`. - PreservedAnalyses run(Module &M, ModuleAnalysisManager &MAM); - static const char *GUIDMetadataName; - // This should become GlobalValue::getGUID - static uint64_t getGUID(const Function &F); -}; - } // namespace llvm #endif // LLVM_ANALYSIS_CTXPROFANALYSIS_H diff --git a/llvm/include/llvm/IR/FixedMetadataKinds.def b/llvm/include/llvm/IR/FixedMetadataKinds.def index df572e8791e13..e7e3081271093 100644 --- a/llvm/include/llvm/IR/FixedMetadataKinds.def +++ b/llvm/include/llvm/IR/FixedMetadataKinds.def @@ -53,3 +53,4 @@ LLVM_FIXED_MD_KIND(MD_DIAssignID, "DIAssignID", 38) LLVM_FIXED_MD_KIND(MD_coro_outside_frame, "coro.outside.frame", 39) LLVM_FIXED_MD_KIND(MD_mmra, "mmra", 40) LLVM_FIXED_MD_KIND(MD_noalias_addrspace, "noalias.addrspace", 41) +LLVM_FIXED_MD_KIND(MD_unique_id, "unique_id", 42) diff --git a/llvm/include/llvm/IR/GlobalValue.h b/llvm/include/llvm/IR/GlobalValue.h index 04907b3d17eb0..05bec2e5b8bfa 100644 --- a/llvm/include/llvm/IR/GlobalValue.h +++ b/llvm/include/llvm/IR/GlobalValue.h @@ -601,9 +601,11 @@ class GlobalValue : public Constant { getGlobalIdentifier(GlobalName, GlobalValue::ExternalLinkage, "")); } + bool assignGUID(); + /// Return a 64-bit global unique ID constructed from global value name /// (i.e. returned by getGlobalIdentifier()). - GUID getGUID() const { return getGUID(getGlobalIdentifier()); } + GUID getGUID() const; /// @name Materialization /// Materialization is used to construct functions only as they're needed. diff --git a/llvm/include/llvm/Transforms/Utils/AssignGUID.h b/llvm/include/llvm/Transforms/Utils/AssignGUID.h new file mode 100644 index 0000000000000..923a1f92cbb7c --- /dev/null +++ b/llvm/include/llvm/Transforms/Utils/AssignGUID.h @@ -0,0 +1,34 @@ +//===-- AssignGUID.h - Unique identifier assignment pass --------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file provides a pass which assigns a a GUID (globally unique identifier) +// to every GlobalValue in the module, according to its current name, linkage, +// and originating file. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TRANSFORMS_UTILS_ASSIGNGUID_H +#define LLVM_TRANSFORMS_UTILS_ASSIGNGUID_H + +#include "llvm/IR/Module.h" +#include "llvm/IR/PassManager.h" + +namespace llvm { + +class AssignGUIDPass : public PassInfoMixin<AssignGUIDPass> { +public: + AssignGUIDPass() = default; + + PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); + + static bool isRequired() { return true; } +}; + +} // end namespace llvm + +#endif // LLVM_TRANSFORMS_UTILS_ASSIGNGUID_H \ No newline at end of file diff --git a/llvm/lib/Analysis/CtxProfAnalysis.cpp b/llvm/lib/Analysis/CtxProfAnalysis.cpp index f980ca7a94b40..3d33ac1d6b599 100644 --- a/llvm/lib/Analysis/CtxProfAnalysis.cpp +++ b/llvm/lib/Analysis/CtxProfAnalysis.cpp @@ -37,35 +37,6 @@ static cl::opt<CtxProfAnalysisPrinterPass::PrintMode> PrintLevel( "just the yaml representation of the profile")), cl::desc("Verbosity level of the contextual profile printer pass.")); -const char *AssignGUIDPass::GUIDMetadataName = "guid"; - -PreservedAnalyses AssignGUIDPass::run(Module &M, ModuleAnalysisManager &MAM) { - for (auto &F : M.functions()) { - if (F.isDeclaration()) - continue; - if (F.getMetadata(GUIDMetadataName)) - continue; - const GlobalValue::GUID GUID = F.getGUID(); - F.setMetadata(GUIDMetadataName, - MDNode::get(M.getContext(), - {ConstantAsMetadata::get(ConstantInt::get( - Type::getInt64Ty(M.getContext()), GUID))})); - } - return PreservedAnalyses::none(); -} - -GlobalValue::GUID AssignGUIDPass::getGUID(const Function &F) { - if (F.isDeclaration()) { - assert(GlobalValue::isExternalLinkage(F.getLinkage())); - return F.getGUID(); - } - auto *MD = F.getMetadata(GUIDMetadataName); - assert(MD && "guid not found for defined function"); - return cast<ConstantInt>(cast<ConstantAsMetadata>(MD->getOperand(0)) - ->getValue() - ->stripPointerCasts()) - ->getZExtValue(); -} AnalysisKey CtxProfAnalysis::Key; CtxProfAnalysis::CtxProfAnalysis(std::optional<StringRef> Profile) @@ -98,7 +69,7 @@ PGOContextualProfile CtxProfAnalysis::run(Module &M, DenseSet<GlobalValue::GUID> ProfileRootsInModule; for (const auto &F : M) if (!F.isDeclaration()) - if (auto GUID = AssignGUIDPass::getGUID(F); + if (auto GUID = F.getGUID(); MaybeProfiles->Contexts.find(GUID) != MaybeProfiles->Contexts.end()) ProfileRootsInModule.insert(GUID); @@ -118,7 +89,7 @@ PGOContextualProfile CtxProfAnalysis::run(Module &M, for (const auto &F : M) { if (F.isDeclaration()) continue; - auto GUID = AssignGUIDPass::getGUID(F); + auto GUID = F.getGUID(); assert(GUID && "guid not found for defined function"); const auto &Entry = F.begin(); uint32_t MaxCounters = 0; // we expect at least a counter. @@ -152,13 +123,6 @@ PGOContextualProfile CtxProfAnalysis::run(Module &M, return Result; } -GlobalValue::GUID -PGOContextualProfile::getDefinedFunctionGUID(const Function &F) const { - if (auto It = FuncInfo.find(AssignGUIDPass::getGUID(F)); It != FuncInfo.end()) - return It->first; - return 0; -} - CtxProfAnalysisPrinterPass::CtxProfAnalysisPrinterPass(raw_ostream &OS) : OS(OS), Mode(PrintLevel) {} @@ -262,7 +226,7 @@ void PGOContextualProfile::initIndex() { void PGOContextualProfile::update(Visitor V, const Function &F) { assert(isFunctionKnown(F)); - GlobalValue::GUID G = getDefinedFunctionGUID(F); + GlobalValue::GUID G = F.getGUID(); for (auto *Node = FuncInfo.find(G)->second.Index.Next; Node; Node = Node->Next) V(*reinterpret_cast<PGOCtxProfContext *>(Node)); @@ -273,7 +237,7 @@ void PGOContextualProfile::visit(ConstVisitor V, const Function *F) const { return preorderVisit<const PGOCtxProfContext::CallTargetMapTy, const PGOCtxProfContext>(Profiles.Contexts, V); assert(isFunctionKnown(*F)); - GlobalValue::GUID G = getDefinedFunctionGUID(*F); + GlobalValue::GUID G = F->getGUID(); for (const auto *Node = FuncInfo.find(G)->second.Index.Next; Node; Node = Node->Next) V(*reinterpret_cast<const PGOCtxProfContext *>(Node)); diff --git a/llvm/lib/IR/Globals.cpp b/llvm/lib/IR/Globals.cpp index 91c4a8fc387a0..d175bd6d3742c 100644 --- a/llvm/lib/IR/Globals.cpp +++ b/llvm/lib/IR/Globals.cpp @@ -77,6 +77,39 @@ GlobalValue::GUID GlobalValue::getGUID(StringRef GlobalIdentifier) { return MD5Hash(GlobalIdentifier); } +bool GlobalValue::assignGUID() { + if (isDeclaration()) + return false; + if (getMetadata(LLVMContext::MD_unique_id) != nullptr) + return false; + + const GUID G = GlobalValue::getGUID(getGlobalIdentifier()); + setMetadata( + LLVMContext::MD_unique_id, + MDNode::get(getContext(), {ConstantAsMetadata::get(ConstantInt::get( + Type::getInt64Ty(getContext()), G))})); + return true; +} + +GlobalValue::GUID GlobalValue::getGUID() const { + // TODO: do we need a special case for GlobalAlias? + + if (isDeclaration()) { + // Declarations don't get an assigned GUID. Their definition is in another + // module, and it may have been promoted from local to external linkage + // during LTO. Because of this, we can only determine their GUID once the + // definition is available. + return 0; + } + + auto *MD = getMetadata(LLVMContext::MD_unique_id); + assert(MD != nullptr && "GUID was not assigned before calling GetGUID()"); + return cast<ConstantInt>(cast<ConstantAsMetadata>(MD->getOperand(0)) + ->getValue() + ->stripPointerCasts()) + ->getZExtValue(); +} + void GlobalValue::removeFromParent() { switch (getValueID()) { #define HANDLE_GLOBAL_VALUE(NAME) \ diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index 3e5fd0bd6c994..95649b2af2e39 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -324,6 +324,7 @@ #include "llvm/Transforms/Scalar/TailRecursionElimination.h" #include "llvm/Transforms/Scalar/WarnMissedTransforms.h" #include "llvm/Transforms/Utils/AddDiscriminators.h" +#include "llvm/Transforms/Utils/AssignGUID.h" #include "llvm/Transforms/Utils/AssumeBundleBuilder.h" #include "llvm/Transforms/Utils/BreakCriticalEdges.h" #include "llvm/Transforms/Utils/CanonicalizeAliases.h" diff --git a/llvm/lib/Passes/PassBuilderPipelines.cpp b/llvm/lib/Passes/PassBuilderPipelines.cpp index a18b36ba40754..26906aee82e33 100644 --- a/llvm/lib/Passes/PassBuilderPipelines.cpp +++ b/llvm/lib/Passes/PassBuilderPipelines.cpp @@ -130,6 +130,7 @@ #include "llvm/Transforms/Scalar/TailRecursionElimination.h" #include "llvm/Transforms/Scalar/WarnMissedTransforms.h" #include "llvm/Transforms/Utils/AddDiscriminators.h" +#include "llvm/Transforms/Utils/AssignGUID.h" #include "llvm/Transforms/Utils/AssumeBundleBuilder.h" #include "llvm/Transforms/Utils/CanonicalizeAliases.h" #include "llvm/Transforms/Utils/CountVisits.h" @@ -791,6 +792,7 @@ PassBuilder::buildFunctionSimplificationPipeline(OptimizationLevel Level, void PassBuilder::addRequiredLTOPreLinkPasses(ModulePassManager &MPM) { MPM.addPass(CanonicalizeAliasesPass()); MPM.addPass(NameAnonGlobalPass()); + MPM.addPass(AssignGUIDPass()); } void PassBuilder::addPreInlinerPasses(ModulePassManager &MPM, @@ -1076,6 +1078,11 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level, ModulePassManager MPM; + if (Phase != ThinOrFullLTOPhase::ThinLTOPostLink) { + MPM.addPass(NameAnonGlobalPass()); + MPM.addPass(AssignGUIDPass()); + } + // Place pseudo probe instrumentation as the first pass of the pipeline to // minimize the impact of optimization changes. if (PGOOpt && PGOOpt->PseudoProbeForProfiling && @@ -1239,8 +1246,6 @@ PassBuilder::buildModuleSimplificationPipeline(OptimizationLevel Level, // In pre-link, we just want the instrumented IR. We use the contextual // profile in the post-thinlink phase. // The instrumentation will be removed in post-thinlink after IPO. - // FIXME(mtrofin): move AssignGUIDPass if there is agreement to use this - // mechanism for GUIDs. MPM.addPass(AssignGUIDPass()); if (IsCtxProfUse) return MPM; diff --git a/llvm/lib/Transforms/Instrumentation/PGOCtxProfFlattening.cpp b/llvm/lib/Transforms/Instrumentation/PGOCtxProfFlattening.cpp index e6aa374a221da..d3303a493d22f 100644 --- a/llvm/lib/Transforms/Instrumentation/PGOCtxProfFlattening.cpp +++ b/llvm/lib/Transforms/Instrumentation/PGOCtxProfFlattening.cpp @@ -451,7 +451,7 @@ PreservedAnalyses PGOCtxProfFlatteningPass::run(Module &M, "Function has unreacheable basic blocks. The expectation was that " "DCE was run before."); - auto It = FlattenedProfile.find(AssignGUIDPass::getGUID(F)); + auto It = FlattenedProfile.find(F.getGUID()); // If this function didn't appear in the contextual profile, it's cold. if (It == FlattenedProfile.end()) clearColdFunctionProfile(F); diff --git a/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp b/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp index 3c30dd61077e5..cd6cb320e088a 100644 --- a/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp +++ b/llvm/lib/Transforms/Instrumentation/PGOCtxProfLowering.cpp @@ -235,8 +235,7 @@ bool CtxInstrumentationLowerer::lowerFunction(Function &F) { assert(Mark->getIndex()->isZero()); IRBuilder<> Builder(Mark); - Guid = Builder.getInt64( - AssignGUIDPass::getGUID(cast<Function>(*Mark->getNameValue()))); + Guid = Builder.getInt64(cast<Function>(*Mark->getNameValue()).getGUID()); // The type of the context of this function is now knowable since we have // NumCallsites and NumCounters. We delcare it here because it's more // convenient - we have the Builder. diff --git a/llvm/lib/Transforms/Utils/AssignGUID.cpp b/llvm/lib/Transforms/Utils/AssignGUID.cpp new file mode 100644 index 0000000000000..8c33ff4b63e91 --- /dev/null +++ b/llvm/lib/Transforms/Utils/AssignGUID.cpp @@ -0,0 +1,34 @@ +//===-- AssignGUID.cpp - Unique identifier assignment pass ------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file provides a pass which assigns a a GUID (globally unique identifier) +// to every GlobalValue in the module, according to its current name, linkage, +// and originating file. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Transforms/Utils/AssignGUID.h" +#include "llvm/Support/Debug.h" + +using namespace llvm; + +PreservedAnalyses AssignGUIDPass::run(Module &M, ModuleAnalysisManager &AM) { + for (auto &GV : M.globals()) { + if (GV.isDeclaration()) + continue; + GV.assignGUID(); + dbgs() << "[Added GUID to GV:] " << GV.getName() << "\n"; + } + for (auto &F : M.functions()) { + if (F.isDeclaration()) + continue; + F.assignGUID(); + dbgs() << "[Added GUID to F:] " << F.getName() << "\n"; + } + return PreservedAnalyses::none(); +} \ No newline at end of file diff --git a/llvm/lib/Transforms/Utils/CMakeLists.txt b/llvm/lib/Transforms/Utils/CMakeLists.txt index 78cad0d253be8..9de8ce03ad31f 100644 --- a/llvm/lib/Transforms/Utils/CMakeLists.txt +++ b/llvm/lib/Transforms/Utils/CMakeLists.txt @@ -2,6 +2,7 @@ add_llvm_component_library(LLVMTransformUtils AddDiscriminators.cpp AMDGPUEmitPrintf.cpp ASanStackFrameLayout.cpp + AssignGUID.cpp AssumeBundleBuilder.cpp BasicBlockUtils.cpp BreakCriticalEdges.cpp diff --git a/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp b/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp index f0f9add09bf82..d5840673ad2c3 100644 --- a/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp +++ b/llvm/lib/Transforms/Utils/CallPromotionUtils.cpp @@ -616,11 +616,11 @@ CallBase *llvm::promoteCallWithIfThenElse(CallBase &CB, Function &Callee, IndirectBBIns->setIndex(IndirectID); IndirectBBIns->insertInto(&IndirectBB, IndirectBB.getFirstInsertionPt()); - const GlobalValue::GUID CalleeGUID = AssignGUIDPass::getGUID(Callee); + const GlobalValue::GUID CalleeGUID = Callee.getGUID(); const uint32_t NewCountersSize = IndirectID + 1; auto ProfileUpdater = [&](PGOCtxProfContext &Ctx) { - assert(Ctx.guid() == AssignGUIDPass::getGUID(Caller)); + assert(Ctx.guid() == Caller.getGUID()); assert(NewCountersSize - 2 == Ctx.counters().size()); // All the ctx-es belonging to a function must have the same size counters. Ctx.resizeCounters(NewCountersSize); diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp index 66fda5b1ec7c9..e7837cc0be83a 100644 --- a/llvm/lib/Transforms/Utils/InlineFunction.cpp +++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp @@ -2368,7 +2368,7 @@ llvm::InlineResult llvm::InlineFunction(CallBase &CB, InlineFunctionInfo &IFI, // Get some preliminary data about the callsite before it might get inlined. // Inlining shouldn't delete the callee, but it's cleaner (and low-cost) to // get this data upfront and rely less on InlineFunction's behavior. - const auto CalleeGUID = AssignGUIDPass::getGUID(Callee); + const auto CalleeGUID = Callee.getGUID(); auto *CallsiteIDIns = CtxProfAnalysis::getCallsiteInstrumentation(CB); const auto CallsiteID = static_cast<uint32_t>(CallsiteIDIns->getIndex()->getZExtValue()); @@ -2393,7 +2393,7 @@ llvm::InlineResult llvm::InlineFunction(CallBase &CB, InlineFunctionInfo &IFI, const uint32_t NewCountersSize = CtxProf.getNumCounters(Caller); auto Updater = [&](PGOCtxProfContext &Ctx) { - assert(Ctx.guid() == AssignGUIDPass::getGUID(Caller)); + assert(Ctx.guid() == Caller.getGUID()); const auto &[CalleeCounterMap, CalleeCallsiteMap] = IndicesMaps; assert( (Ctx.counters().size() + _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits