From 6586cbfe078430e0698ce76c4cc49462fba64d1a Mon Sep 17 00:00:00 2001 From: Vitaly Buka Date: Fri, 5 Sep 2025 18:51:58 -0700 Subject: [PATCH 1/2] =?UTF-8?q?[=F0=9D=98=80=F0=9D=97=BD=F0=9D=97=BF]=20in?= =?UTF-8?q?itial=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created using spr 1.3.6 --- llvm/include/llvm/Linker/IRMover.h | 6 ++++++ llvm/lib/Linker/IRMover.cpp | 16 +++++++++------- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/llvm/include/llvm/Linker/IRMover.h b/llvm/include/llvm/Linker/IRMover.h index 39929311a3227..1dac5605f4961 100644 --- a/llvm/include/llvm/Linker/IRMover.h +++ b/llvm/include/llvm/Linker/IRMover.h @@ -10,6 +10,7 @@ #define LLVM_LINKER_IRMOVER_H #include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/FunctionExtras.h" #include "llvm/Support/Compiler.h" @@ -19,6 +20,8 @@ namespace llvm { class Error; class GlobalValue; class Metadata; +class MDNode; +class NamedMDNode; class Module; class StructType; class TrackingMDRef; @@ -67,6 +70,8 @@ class IRMover { using LazyCallback = llvm::unique_function; + typedef DenseMap> NamedMDNodesT; + /// Move in the provide values in \p ValuesToLink from \p Src. /// /// - \p AddLazyFor is a call back that the IRMover will call when a global @@ -86,6 +91,7 @@ class IRMover { Module &Composite; IdentifiedStructTypeSet IdentifiedStructTypes; MDMapT SharedMDs; ///< A Metadata map to use for all calls to \a move(). + NamedMDNodesT NamedMDNodes; ///< Cache for IRMover::linkNamedMDNodes(). }; } // End llvm namespace diff --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp index f53fe8f84fe3c..489e03d5fdd60 100644 --- a/llvm/lib/Linker/IRMover.cpp +++ b/llvm/lib/Linker/IRMover.cpp @@ -293,7 +293,7 @@ class IRLinker { std::unique_ptr SrcM; // Lookup table to optimize IRMover::linkNamedMDNodes(). - DenseMap> NamedMDNodes; + IRMover::NamedMDNodesT &NamedMDNodes; /// See IRMover::move(). IRMover::LazyCallback AddLazyFor; @@ -440,10 +440,12 @@ class IRLinker { IRLinker(Module &DstM, MDMapT &SharedMDs, IRMover::IdentifiedStructTypeSet &Set, std::unique_ptr SrcM, ArrayRef ValuesToLink, - IRMover::LazyCallback AddLazyFor, bool IsPerformingImport) - : DstM(DstM), SrcM(std::move(SrcM)), AddLazyFor(std::move(AddLazyFor)), - TypeMap(Set), GValMaterializer(*this), LValMaterializer(*this), - SharedMDs(SharedMDs), IsPerformingImport(IsPerformingImport), + IRMover::LazyCallback AddLazyFor, bool IsPerformingImport, + IRMover::NamedMDNodesT &NamedMDNodes) + : DstM(DstM), SrcM(std::move(SrcM)), NamedMDNodes(NamedMDNodes), + AddLazyFor(std::move(AddLazyFor)), TypeMap(Set), + GValMaterializer(*this), LValMaterializer(*this), SharedMDs(SharedMDs), + IsPerformingImport(IsPerformingImport), Mapper(ValueMap, RF_ReuseAndMutateDistinctMDs | RF_IgnoreMissingLocals, &TypeMap, &GValMaterializer), IndirectSymbolMCID(Mapper.registerAlternateMappingContext( @@ -1138,7 +1140,7 @@ void IRLinker::linkNamedMDNodes() { NamedMDNode *DestNMD = DstM.getOrInsertNamedMetadata(NMD.getName()); - auto &Inserted = NamedMDNodes[DestNMD->getName()]; + auto &Inserted = NamedMDNodes[DestNMD]; if (Inserted.empty()) { // Must be the first module, copy everything from DestNMD. Inserted.insert(DestNMD->operands().begin(), DestNMD->operands().end()); @@ -1683,6 +1685,6 @@ Error IRMover::move(std::unique_ptr Src, LazyCallback AddLazyFor, bool IsPerformingImport) { IRLinker TheIRLinker(Composite, SharedMDs, IdentifiedStructTypes, std::move(Src), ValuesToLink, std::move(AddLazyFor), - IsPerformingImport); + IsPerformingImport, NamedMDNodes); return TheIRLinker.run(); } From a2ad08e0a371ae535682f44737c547ecd72b3c65 Mon Sep 17 00:00:00 2001 From: Vitaly Buka Date: Fri, 5 Sep 2025 18:54:03 -0700 Subject: [PATCH 2/2] Update llvm/include/llvm/Linker/IRMover.h Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- llvm/include/llvm/Linker/IRMover.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/include/llvm/Linker/IRMover.h b/llvm/include/llvm/Linker/IRMover.h index 1dac5605f4961..2a234d5d28fd8 100644 --- a/llvm/include/llvm/Linker/IRMover.h +++ b/llvm/include/llvm/Linker/IRMover.h @@ -70,7 +70,7 @@ class IRMover { using LazyCallback = llvm::unique_function; - typedef DenseMap> NamedMDNodesT; + using NamedMDNodesT = DenseMap>; /// Move in the provide values in \p ValuesToLink from \p Src. ///