1 //===- lib/Linker/IRMover.cpp ---------------------------------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "llvm/Linker/IRMover.h"
10 #include "LinkDiagnosticInfo.h"
11 #include "llvm/ADT/SetVector.h"
12 #include "llvm/ADT/SmallString.h"
13 #include "llvm/ADT/Triple.h"
14 #include "llvm/IR/Constants.h"
15 #include "llvm/IR/DebugInfo.h"
16 #include "llvm/IR/DiagnosticPrinter.h"
17 #include "llvm/IR/GVMaterializer.h"
18 #include "llvm/IR/Intrinsics.h"
19 #include "llvm/IR/TypeFinder.h"
20 #include "llvm/Support/Error.h"
21 #include "llvm/Transforms/Utils/Cloning.h"
25 //===----------------------------------------------------------------------===//
26 // TypeMap implementation.
27 //===----------------------------------------------------------------------===//
30 class TypeMapTy
: public ValueMapTypeRemapper
{
31 /// This is a mapping from a source type to a destination type to use.
32 DenseMap
<Type
*, Type
*> MappedTypes
;
34 /// When checking to see if two subgraphs are isomorphic, we speculatively
35 /// add types to MappedTypes, but keep track of them here in case we need to
37 SmallVector
<Type
*, 16> SpeculativeTypes
;
39 SmallVector
<StructType
*, 16> SpeculativeDstOpaqueTypes
;
41 /// This is a list of non-opaque structs in the source module that are mapped
42 /// to an opaque struct in the destination module.
43 SmallVector
<StructType
*, 16> SrcDefinitionsToResolve
;
45 /// This is the set of opaque types in the destination modules who are
46 /// getting a body from the source module.
47 SmallPtrSet
<StructType
*, 16> DstResolvedOpaqueTypes
;
50 TypeMapTy(IRMover::IdentifiedStructTypeSet
&DstStructTypesSet
)
51 : DstStructTypesSet(DstStructTypesSet
) {}
53 IRMover::IdentifiedStructTypeSet
&DstStructTypesSet
;
54 /// Indicate that the specified type in the destination module is conceptually
55 /// equivalent to the specified type in the source module.
56 void addTypeMapping(Type
*DstTy
, Type
*SrcTy
);
58 /// Produce a body for an opaque type in the dest module from a type
59 /// definition in the source module.
60 void linkDefinedTypeBodies();
62 /// Return the mapped type to use for the specified input type from the
64 Type
*get(Type
*SrcTy
);
65 Type
*get(Type
*SrcTy
, SmallPtrSet
<StructType
*, 8> &Visited
);
67 void finishType(StructType
*DTy
, StructType
*STy
, ArrayRef
<Type
*> ETypes
);
69 FunctionType
*get(FunctionType
*T
) {
70 return cast
<FunctionType
>(get((Type
*)T
));
74 Type
*remapType(Type
*SrcTy
) override
{ return get(SrcTy
); }
76 bool areTypesIsomorphic(Type
*DstTy
, Type
*SrcTy
);
80 void TypeMapTy::addTypeMapping(Type
*DstTy
, Type
*SrcTy
) {
81 assert(SpeculativeTypes
.empty());
82 assert(SpeculativeDstOpaqueTypes
.empty());
84 // Check to see if these types are recursively isomorphic and establish a
85 // mapping between them if so.
86 if (!areTypesIsomorphic(DstTy
, SrcTy
)) {
87 // Oops, they aren't isomorphic. Just discard this request by rolling out
88 // any speculative mappings we've established.
89 for (Type
*Ty
: SpeculativeTypes
)
90 MappedTypes
.erase(Ty
);
92 SrcDefinitionsToResolve
.resize(SrcDefinitionsToResolve
.size() -
93 SpeculativeDstOpaqueTypes
.size());
94 for (StructType
*Ty
: SpeculativeDstOpaqueTypes
)
95 DstResolvedOpaqueTypes
.erase(Ty
);
97 // SrcTy and DstTy are recursively ismorphic. We clear names of SrcTy
98 // and all its descendants to lower amount of renaming in LLVM context
99 // Renaming occurs because we load all source modules to the same context
100 // and declaration with existing name gets renamed (i.e Foo -> Foo.42).
101 // As a result we may get several different types in the destination
102 // module, which are in fact the same.
103 for (Type
*Ty
: SpeculativeTypes
)
104 if (auto *STy
= dyn_cast
<StructType
>(Ty
))
108 SpeculativeTypes
.clear();
109 SpeculativeDstOpaqueTypes
.clear();
112 /// Recursively walk this pair of types, returning true if they are isomorphic,
113 /// false if they are not.
114 bool TypeMapTy::areTypesIsomorphic(Type
*DstTy
, Type
*SrcTy
) {
115 // Two types with differing kinds are clearly not isomorphic.
116 if (DstTy
->getTypeID() != SrcTy
->getTypeID())
119 // If we have an entry in the MappedTypes table, then we have our answer.
120 Type
*&Entry
= MappedTypes
[SrcTy
];
122 return Entry
== DstTy
;
124 // Two identical types are clearly isomorphic. Remember this
125 // non-speculatively.
126 if (DstTy
== SrcTy
) {
131 // Okay, we have two types with identical kinds that we haven't seen before.
133 // If this is an opaque struct type, special case it.
134 if (StructType
*SSTy
= dyn_cast
<StructType
>(SrcTy
)) {
135 // Mapping an opaque type to any struct, just keep the dest struct.
136 if (SSTy
->isOpaque()) {
138 SpeculativeTypes
.push_back(SrcTy
);
142 // Mapping a non-opaque source type to an opaque dest. If this is the first
143 // type that we're mapping onto this destination type then we succeed. Keep
144 // the dest, but fill it in later. If this is the second (different) type
145 // that we're trying to map onto the same opaque type then we fail.
146 if (cast
<StructType
>(DstTy
)->isOpaque()) {
147 // We can only map one source type onto the opaque destination type.
148 if (!DstResolvedOpaqueTypes
.insert(cast
<StructType
>(DstTy
)).second
)
150 SrcDefinitionsToResolve
.push_back(SSTy
);
151 SpeculativeTypes
.push_back(SrcTy
);
152 SpeculativeDstOpaqueTypes
.push_back(cast
<StructType
>(DstTy
));
158 // If the number of subtypes disagree between the two types, then we fail.
159 if (SrcTy
->getNumContainedTypes() != DstTy
->getNumContainedTypes())
162 // Fail if any of the extra properties (e.g. array size) of the type disagree.
163 if (isa
<IntegerType
>(DstTy
))
164 return false; // bitwidth disagrees.
165 if (PointerType
*PT
= dyn_cast
<PointerType
>(DstTy
)) {
166 if (PT
->getAddressSpace() != cast
<PointerType
>(SrcTy
)->getAddressSpace())
168 } else if (FunctionType
*FT
= dyn_cast
<FunctionType
>(DstTy
)) {
169 if (FT
->isVarArg() != cast
<FunctionType
>(SrcTy
)->isVarArg())
171 } else if (StructType
*DSTy
= dyn_cast
<StructType
>(DstTy
)) {
172 StructType
*SSTy
= cast
<StructType
>(SrcTy
);
173 if (DSTy
->isLiteral() != SSTy
->isLiteral() ||
174 DSTy
->isPacked() != SSTy
->isPacked())
176 } else if (auto *DSeqTy
= dyn_cast
<SequentialType
>(DstTy
)) {
177 if (DSeqTy
->getNumElements() !=
178 cast
<SequentialType
>(SrcTy
)->getNumElements())
182 // Otherwise, we speculate that these two types will line up and recursively
183 // check the subelements.
185 SpeculativeTypes
.push_back(SrcTy
);
187 for (unsigned I
= 0, E
= SrcTy
->getNumContainedTypes(); I
!= E
; ++I
)
188 if (!areTypesIsomorphic(DstTy
->getContainedType(I
),
189 SrcTy
->getContainedType(I
)))
192 // If everything seems to have lined up, then everything is great.
196 void TypeMapTy::linkDefinedTypeBodies() {
197 SmallVector
<Type
*, 16> Elements
;
198 for (StructType
*SrcSTy
: SrcDefinitionsToResolve
) {
199 StructType
*DstSTy
= cast
<StructType
>(MappedTypes
[SrcSTy
]);
200 assert(DstSTy
->isOpaque());
202 // Map the body of the source type over to a new body for the dest type.
203 Elements
.resize(SrcSTy
->getNumElements());
204 for (unsigned I
= 0, E
= Elements
.size(); I
!= E
; ++I
)
205 Elements
[I
] = get(SrcSTy
->getElementType(I
));
207 DstSTy
->setBody(Elements
, SrcSTy
->isPacked());
208 DstStructTypesSet
.switchToNonOpaque(DstSTy
);
210 SrcDefinitionsToResolve
.clear();
211 DstResolvedOpaqueTypes
.clear();
214 void TypeMapTy::finishType(StructType
*DTy
, StructType
*STy
,
215 ArrayRef
<Type
*> ETypes
) {
216 DTy
->setBody(ETypes
, STy
->isPacked());
219 if (STy
->hasName()) {
220 SmallString
<16> TmpName
= STy
->getName();
222 DTy
->setName(TmpName
);
225 DstStructTypesSet
.addNonOpaque(DTy
);
228 Type
*TypeMapTy::get(Type
*Ty
) {
229 SmallPtrSet
<StructType
*, 8> Visited
;
230 return get(Ty
, Visited
);
233 Type
*TypeMapTy::get(Type
*Ty
, SmallPtrSet
<StructType
*, 8> &Visited
) {
234 // If we already have an entry for this type, return it.
235 Type
**Entry
= &MappedTypes
[Ty
];
239 // These are types that LLVM itself will unique.
240 bool IsUniqued
= !isa
<StructType
>(Ty
) || cast
<StructType
>(Ty
)->isLiteral();
243 StructType
*STy
= cast
<StructType
>(Ty
);
244 // This is actually a type from the destination module, this can be reached
245 // when this type is loaded in another module, added to DstStructTypesSet,
246 // and then we reach the same type in another module where it has not been
247 // added to MappedTypes. (PR37684)
248 if (STy
->getContext().isODRUniquingDebugTypes() && !STy
->isOpaque() &&
249 DstStructTypesSet
.hasType(STy
))
253 for (auto &Pair
: MappedTypes
) {
254 assert(!(Pair
.first
!= Ty
&& Pair
.second
== Ty
) &&
255 "mapping to a source type");
259 if (!Visited
.insert(STy
).second
) {
260 StructType
*DTy
= StructType::create(Ty
->getContext());
265 // If this is not a recursive type, then just map all of the elements and
266 // then rebuild the type from inside out.
267 SmallVector
<Type
*, 4> ElementTypes
;
269 // If there are no element types to map, then the type is itself. This is
270 // true for the anonymous {} struct, things like 'float', integers, etc.
271 if (Ty
->getNumContainedTypes() == 0 && IsUniqued
)
274 // Remap all of the elements, keeping track of whether any of them change.
275 bool AnyChange
= false;
276 ElementTypes
.resize(Ty
->getNumContainedTypes());
277 for (unsigned I
= 0, E
= Ty
->getNumContainedTypes(); I
!= E
; ++I
) {
278 ElementTypes
[I
] = get(Ty
->getContainedType(I
), Visited
);
279 AnyChange
|= ElementTypes
[I
] != Ty
->getContainedType(I
);
282 // If we found our type while recursively processing stuff, just use it.
283 Entry
= &MappedTypes
[Ty
];
285 if (auto *DTy
= dyn_cast
<StructType
>(*Entry
)) {
286 if (DTy
->isOpaque()) {
287 auto *STy
= cast
<StructType
>(Ty
);
288 finishType(DTy
, STy
, ElementTypes
);
294 // If all of the element types mapped directly over and the type is not
295 // a named struct, then the type is usable as-is.
296 if (!AnyChange
&& IsUniqued
)
299 // Otherwise, rebuild a modified type.
300 switch (Ty
->getTypeID()) {
302 llvm_unreachable("unknown derived type to remap");
303 case Type::ArrayTyID
:
304 return *Entry
= ArrayType::get(ElementTypes
[0],
305 cast
<ArrayType
>(Ty
)->getNumElements());
306 case Type::VectorTyID
:
307 return *Entry
= VectorType::get(ElementTypes
[0],
308 cast
<VectorType
>(Ty
)->getNumElements());
309 case Type::PointerTyID
:
310 return *Entry
= PointerType::get(ElementTypes
[0],
311 cast
<PointerType
>(Ty
)->getAddressSpace());
312 case Type::FunctionTyID
:
313 return *Entry
= FunctionType::get(ElementTypes
[0],
314 makeArrayRef(ElementTypes
).slice(1),
315 cast
<FunctionType
>(Ty
)->isVarArg());
316 case Type::StructTyID
: {
317 auto *STy
= cast
<StructType
>(Ty
);
318 bool IsPacked
= STy
->isPacked();
320 return *Entry
= StructType::get(Ty
->getContext(), ElementTypes
, IsPacked
);
322 // If the type is opaque, we can just use it directly.
323 if (STy
->isOpaque()) {
324 DstStructTypesSet
.addOpaque(STy
);
328 if (StructType
*OldT
=
329 DstStructTypesSet
.findNonOpaque(ElementTypes
, IsPacked
)) {
331 return *Entry
= OldT
;
335 DstStructTypesSet
.addNonOpaque(STy
);
339 StructType
*DTy
= StructType::create(Ty
->getContext());
340 finishType(DTy
, STy
, ElementTypes
);
346 LinkDiagnosticInfo::LinkDiagnosticInfo(DiagnosticSeverity Severity
,
348 : DiagnosticInfo(DK_Linker
, Severity
), Msg(Msg
) {}
349 void LinkDiagnosticInfo::print(DiagnosticPrinter
&DP
) const { DP
<< Msg
; }
351 //===----------------------------------------------------------------------===//
352 // IRLinker implementation.
353 //===----------------------------------------------------------------------===//
358 /// Creates prototypes for functions that are lazily linked on the fly. This
359 /// speeds up linking for modules with many/ lazily linked functions of which
361 class GlobalValueMaterializer final
: public ValueMaterializer
{
362 IRLinker
&TheIRLinker
;
365 GlobalValueMaterializer(IRLinker
&TheIRLinker
) : TheIRLinker(TheIRLinker
) {}
366 Value
*materialize(Value
*V
) override
;
369 class LocalValueMaterializer final
: public ValueMaterializer
{
370 IRLinker
&TheIRLinker
;
373 LocalValueMaterializer(IRLinker
&TheIRLinker
) : TheIRLinker(TheIRLinker
) {}
374 Value
*materialize(Value
*V
) override
;
377 /// Type of the Metadata map in \a ValueToValueMapTy.
378 typedef DenseMap
<const Metadata
*, TrackingMDRef
> MDMapT
;
380 /// This is responsible for keeping track of the state used for moving data
381 /// from SrcM to DstM.
384 std::unique_ptr
<Module
> SrcM
;
386 /// See IRMover::move().
387 std::function
<void(GlobalValue
&, IRMover::ValueAdder
)> AddLazyFor
;
390 GlobalValueMaterializer GValMaterializer
;
391 LocalValueMaterializer LValMaterializer
;
393 /// A metadata map that's shared between IRLinker instances.
396 /// Mapping of values from what they used to be in Src, to what they are now
397 /// in DstM. ValueToValueMapTy is a ValueMap, which involves some overhead
398 /// due to the use of Value handles which the Linker doesn't actually need,
399 /// but this allows us to reuse the ValueMapper code.
400 ValueToValueMapTy ValueMap
;
401 ValueToValueMapTy IndirectSymbolValueMap
;
403 DenseSet
<GlobalValue
*> ValuesToLink
;
404 std::vector
<GlobalValue
*> Worklist
;
405 std::vector
<std::pair
<GlobalValue
*, Value
*>> RAUWWorklist
;
407 void maybeAdd(GlobalValue
*GV
) {
408 if (ValuesToLink
.insert(GV
).second
)
409 Worklist
.push_back(GV
);
412 /// Whether we are importing globals for ThinLTO, as opposed to linking the
413 /// source module. If this flag is set, it means that we can rely on some
414 /// other object file to define any non-GlobalValue entities defined by the
415 /// source module. This currently causes us to not link retained types in
416 /// debug info metadata and module inline asm.
417 bool IsPerformingImport
;
419 /// Set to true when all global value body linking is complete (including
420 /// lazy linking). Used to prevent metadata linking from creating new
422 bool DoneLinkingBodies
= false;
424 /// The Error encountered during materialization. We use an Optional here to
425 /// avoid needing to manage an unconsumed success value.
426 Optional
<Error
> FoundError
;
427 void setError(Error E
) {
429 FoundError
= std::move(E
);
432 /// Most of the errors produced by this module are inconvertible StringErrors.
433 /// This convenience function lets us return one of those more easily.
434 Error
stringErr(const Twine
&T
) {
435 return make_error
<StringError
>(T
, inconvertibleErrorCode());
438 /// Entry point for mapping values and alternate context for mapping aliases.
440 unsigned IndirectSymbolMCID
;
442 /// Handles cloning of a global values from the source module into
443 /// the destination module, including setting the attributes and visibility.
444 GlobalValue
*copyGlobalValueProto(const GlobalValue
*SGV
, bool ForDefinition
);
446 void emitWarning(const Twine
&Message
) {
447 SrcM
->getContext().diagnose(LinkDiagnosticInfo(DS_Warning
, Message
));
450 /// Given a global in the source module, return the global in the
451 /// destination module that is being linked to, if any.
452 GlobalValue
*getLinkedToGlobal(const GlobalValue
*SrcGV
) {
453 // If the source has no name it can't link. If it has local linkage,
454 // there is no name match-up going on.
455 if (!SrcGV
->hasName() || SrcGV
->hasLocalLinkage())
458 // Otherwise see if we have a match in the destination module's symtab.
459 GlobalValue
*DGV
= DstM
.getNamedValue(SrcGV
->getName());
463 // If we found a global with the same name in the dest module, but it has
464 // internal linkage, we are really not doing any linkage here.
465 if (DGV
->hasLocalLinkage())
468 // Otherwise, we do in fact link to the destination global.
472 void computeTypeMapping();
474 Expected
<Constant
*> linkAppendingVarProto(GlobalVariable
*DstGV
,
475 const GlobalVariable
*SrcGV
);
477 /// Given the GlobaValue \p SGV in the source module, and the matching
478 /// GlobalValue \p DGV (if any), return true if the linker will pull \p SGV
479 /// into the destination module.
481 /// Note this code may call the client-provided \p AddLazyFor.
482 bool shouldLink(GlobalValue
*DGV
, GlobalValue
&SGV
);
483 Expected
<Constant
*> linkGlobalValueProto(GlobalValue
*GV
,
484 bool ForIndirectSymbol
);
486 Error
linkModuleFlagsMetadata();
488 void linkGlobalVariable(GlobalVariable
&Dst
, GlobalVariable
&Src
);
489 Error
linkFunctionBody(Function
&Dst
, Function
&Src
);
490 void linkIndirectSymbolBody(GlobalIndirectSymbol
&Dst
,
491 GlobalIndirectSymbol
&Src
);
492 Error
linkGlobalValueBody(GlobalValue
&Dst
, GlobalValue
&Src
);
494 /// Replace all types in the source AttributeList with the
495 /// corresponding destination type.
496 AttributeList
mapAttributeTypes(LLVMContext
&C
, AttributeList Attrs
);
498 /// Functions that take care of cloning a specific global value type
499 /// into the destination module.
500 GlobalVariable
*copyGlobalVariableProto(const GlobalVariable
*SGVar
);
501 Function
*copyFunctionProto(const Function
*SF
);
502 GlobalValue
*copyGlobalIndirectSymbolProto(const GlobalIndirectSymbol
*SGIS
);
504 /// Perform "replace all uses with" operations. These work items need to be
505 /// performed as part of materialization, but we postpone them to happen after
506 /// materialization is done. The materializer called by ValueMapper is not
507 /// expected to delete constants, as ValueMapper is holding pointers to some
508 /// of them, but constant destruction may be indirectly triggered by RAUW.
509 /// Hence, the need to move this out of the materialization call chain.
510 void flushRAUWWorklist();
512 /// When importing for ThinLTO, prevent importing of types listed on
513 /// the DICompileUnit that we don't need a copy of in the importing
515 void prepareCompileUnitsForImport();
516 void linkNamedMDNodes();
519 IRLinker(Module
&DstM
, MDMapT
&SharedMDs
,
520 IRMover::IdentifiedStructTypeSet
&Set
, std::unique_ptr
<Module
> SrcM
,
521 ArrayRef
<GlobalValue
*> ValuesToLink
,
522 std::function
<void(GlobalValue
&, IRMover::ValueAdder
)> AddLazyFor
,
523 bool IsPerformingImport
)
524 : DstM(DstM
), SrcM(std::move(SrcM
)), AddLazyFor(std::move(AddLazyFor
)),
525 TypeMap(Set
), GValMaterializer(*this), LValMaterializer(*this),
526 SharedMDs(SharedMDs
), IsPerformingImport(IsPerformingImport
),
527 Mapper(ValueMap
, RF_MoveDistinctMDs
| RF_IgnoreMissingLocals
, &TypeMap
,
529 IndirectSymbolMCID(Mapper
.registerAlternateMappingContext(
530 IndirectSymbolValueMap
, &LValMaterializer
)) {
531 ValueMap
.getMDMap() = std::move(SharedMDs
);
532 for (GlobalValue
*GV
: ValuesToLink
)
534 if (IsPerformingImport
)
535 prepareCompileUnitsForImport();
537 ~IRLinker() { SharedMDs
= std::move(*ValueMap
.getMDMap()); }
540 Value
*materialize(Value
*V
, bool ForIndirectSymbol
);
544 /// The LLVM SymbolTable class autorenames globals that conflict in the symbol
545 /// table. This is good for all clients except for us. Go through the trouble
546 /// to force this back.
547 static void forceRenaming(GlobalValue
*GV
, StringRef Name
) {
548 // If the global doesn't force its name or if it already has the right name,
549 // there is nothing for us to do.
550 if (GV
->hasLocalLinkage() || GV
->getName() == Name
)
553 Module
*M
= GV
->getParent();
555 // If there is a conflict, rename the conflict.
556 if (GlobalValue
*ConflictGV
= M
->getNamedValue(Name
)) {
557 GV
->takeName(ConflictGV
);
558 ConflictGV
->setName(Name
); // This will cause ConflictGV to get renamed
559 assert(ConflictGV
->getName() != Name
&& "forceRenaming didn't work");
561 GV
->setName(Name
); // Force the name back
565 Value
*GlobalValueMaterializer::materialize(Value
*SGV
) {
566 return TheIRLinker
.materialize(SGV
, false);
569 Value
*LocalValueMaterializer::materialize(Value
*SGV
) {
570 return TheIRLinker
.materialize(SGV
, true);
573 Value
*IRLinker::materialize(Value
*V
, bool ForIndirectSymbol
) {
574 auto *SGV
= dyn_cast
<GlobalValue
>(V
);
578 Expected
<Constant
*> NewProto
= linkGlobalValueProto(SGV
, ForIndirectSymbol
);
580 setError(NewProto
.takeError());
586 GlobalValue
*New
= dyn_cast
<GlobalValue
>(*NewProto
);
590 // If we already created the body, just return.
591 if (auto *F
= dyn_cast
<Function
>(New
)) {
592 if (!F
->isDeclaration())
594 } else if (auto *V
= dyn_cast
<GlobalVariable
>(New
)) {
595 if (V
->hasInitializer() || V
->hasAppendingLinkage())
598 auto *IS
= cast
<GlobalIndirectSymbol
>(New
);
599 if (IS
->getIndirectSymbol())
603 // When linking a global for an indirect symbol, it will always be linked.
604 // However we need to check if it was not already scheduled to satisfy a
605 // reference from a regular global value initializer. We know if it has been
606 // schedule if the "New" GlobalValue that is mapped here for the indirect
607 // symbol is the same as the one already mapped. If there is an entry in the
608 // ValueMap but the value is different, it means that the value already had a
609 // definition in the destination module (linkonce for instance), but we need a
610 // new definition for the indirect symbol ("New" will be different.
611 if (ForIndirectSymbol
&& ValueMap
.lookup(SGV
) == New
)
614 if (ForIndirectSymbol
|| shouldLink(New
, *SGV
))
615 setError(linkGlobalValueBody(*New
, *SGV
));
620 /// Loop through the global variables in the src module and merge them into the
622 GlobalVariable
*IRLinker::copyGlobalVariableProto(const GlobalVariable
*SGVar
) {
623 // No linking to be performed or linking from the source: simply create an
624 // identical version of the symbol over in the dest module... the
625 // initializer will be filled in later by LinkGlobalInits.
626 GlobalVariable
*NewDGV
=
627 new GlobalVariable(DstM
, TypeMap
.get(SGVar
->getValueType()),
628 SGVar
->isConstant(), GlobalValue::ExternalLinkage
,
629 /*init*/ nullptr, SGVar
->getName(),
630 /*insertbefore*/ nullptr, SGVar
->getThreadLocalMode(),
631 SGVar
->getType()->getAddressSpace());
632 NewDGV
->setAlignment(MaybeAlign(SGVar
->getAlignment()));
633 NewDGV
->copyAttributesFrom(SGVar
);
637 AttributeList
IRLinker::mapAttributeTypes(LLVMContext
&C
, AttributeList Attrs
) {
638 for (unsigned i
= 0; i
< Attrs
.getNumAttrSets(); ++i
) {
639 if (Attrs
.hasAttribute(i
, Attribute::ByVal
)) {
640 Type
*Ty
= Attrs
.getAttribute(i
, Attribute::ByVal
).getValueAsType();
644 Attrs
= Attrs
.removeAttribute(C
, i
, Attribute::ByVal
);
645 Attrs
= Attrs
.addAttribute(
646 C
, i
, Attribute::getWithByValType(C
, TypeMap
.get(Ty
)));
652 /// Link the function in the source module into the destination module if
653 /// needed, setting up mapping information.
654 Function
*IRLinker::copyFunctionProto(const Function
*SF
) {
655 // If there is no linkage to be performed or we are linking from the source,
658 Function::Create(TypeMap
.get(SF
->getFunctionType()),
659 GlobalValue::ExternalLinkage
, SF
->getName(), &DstM
);
660 F
->copyAttributesFrom(SF
);
661 F
->setAttributes(mapAttributeTypes(F
->getContext(), F
->getAttributes()));
665 /// Set up prototypes for any indirect symbols that come over from the source
668 IRLinker::copyGlobalIndirectSymbolProto(const GlobalIndirectSymbol
*SGIS
) {
669 // If there is no linkage to be performed or we're linking from the source,
671 auto *Ty
= TypeMap
.get(SGIS
->getValueType());
672 GlobalIndirectSymbol
*GIS
;
673 if (isa
<GlobalAlias
>(SGIS
))
674 GIS
= GlobalAlias::create(Ty
, SGIS
->getType()->getPointerAddressSpace(),
675 GlobalValue::ExternalLinkage
, SGIS
->getName(),
678 GIS
= GlobalIFunc::create(Ty
, SGIS
->getType()->getPointerAddressSpace(),
679 GlobalValue::ExternalLinkage
, SGIS
->getName(),
681 GIS
->copyAttributesFrom(SGIS
);
685 GlobalValue
*IRLinker::copyGlobalValueProto(const GlobalValue
*SGV
,
686 bool ForDefinition
) {
688 if (auto *SGVar
= dyn_cast
<GlobalVariable
>(SGV
)) {
689 NewGV
= copyGlobalVariableProto(SGVar
);
690 } else if (auto *SF
= dyn_cast
<Function
>(SGV
)) {
691 NewGV
= copyFunctionProto(SF
);
694 NewGV
= copyGlobalIndirectSymbolProto(cast
<GlobalIndirectSymbol
>(SGV
));
695 else if (SGV
->getValueType()->isFunctionTy())
697 Function::Create(cast
<FunctionType
>(TypeMap
.get(SGV
->getValueType())),
698 GlobalValue::ExternalLinkage
, SGV
->getName(), &DstM
);
700 NewGV
= new GlobalVariable(
701 DstM
, TypeMap
.get(SGV
->getValueType()),
702 /*isConstant*/ false, GlobalValue::ExternalLinkage
,
703 /*init*/ nullptr, SGV
->getName(),
704 /*insertbefore*/ nullptr, SGV
->getThreadLocalMode(),
705 SGV
->getType()->getAddressSpace());
709 NewGV
->setLinkage(SGV
->getLinkage());
710 else if (SGV
->hasExternalWeakLinkage())
711 NewGV
->setLinkage(GlobalValue::ExternalWeakLinkage
);
713 if (auto *NewGO
= dyn_cast
<GlobalObject
>(NewGV
)) {
714 // Metadata for global variables and function declarations is copied eagerly.
715 if (isa
<GlobalVariable
>(SGV
) || SGV
->isDeclaration())
716 NewGO
->copyMetadata(cast
<GlobalObject
>(SGV
), 0);
719 // Remove these copied constants in case this stays a declaration, since
720 // they point to the source module. If the def is linked the values will
721 // be mapped in during linkFunctionBody.
722 if (auto *NewF
= dyn_cast
<Function
>(NewGV
)) {
723 NewF
->setPersonalityFn(nullptr);
724 NewF
->setPrefixData(nullptr);
725 NewF
->setPrologueData(nullptr);
731 static StringRef
getTypeNamePrefix(StringRef Name
) {
732 size_t DotPos
= Name
.rfind('.');
733 return (DotPos
== 0 || DotPos
== StringRef::npos
|| Name
.back() == '.' ||
734 !isdigit(static_cast<unsigned char>(Name
[DotPos
+ 1])))
736 : Name
.substr(0, DotPos
);
739 /// Loop over all of the linked values to compute type mappings. For example,
740 /// if we link "extern Foo *x" and "Foo *x = NULL", then we have two struct
741 /// types 'Foo' but one got renamed when the module was loaded into the same
743 void IRLinker::computeTypeMapping() {
744 for (GlobalValue
&SGV
: SrcM
->globals()) {
745 GlobalValue
*DGV
= getLinkedToGlobal(&SGV
);
749 if (!DGV
->hasAppendingLinkage() || !SGV
.hasAppendingLinkage()) {
750 TypeMap
.addTypeMapping(DGV
->getType(), SGV
.getType());
754 // Unify the element type of appending arrays.
755 ArrayType
*DAT
= cast
<ArrayType
>(DGV
->getValueType());
756 ArrayType
*SAT
= cast
<ArrayType
>(SGV
.getValueType());
757 TypeMap
.addTypeMapping(DAT
->getElementType(), SAT
->getElementType());
760 for (GlobalValue
&SGV
: *SrcM
)
761 if (GlobalValue
*DGV
= getLinkedToGlobal(&SGV
)) {
762 if (DGV
->getType() == SGV
.getType()) {
763 // If the types of DGV and SGV are the same, it means that DGV is from
764 // the source module and got added to DstM from a shared metadata. We
765 // shouldn't map this type to itself in case the type's components get
766 // remapped to a new type from DstM (for instance, during the loop over
767 // SrcM->getIdentifiedStructTypes() below).
771 TypeMap
.addTypeMapping(DGV
->getType(), SGV
.getType());
774 for (GlobalValue
&SGV
: SrcM
->aliases())
775 if (GlobalValue
*DGV
= getLinkedToGlobal(&SGV
))
776 TypeMap
.addTypeMapping(DGV
->getType(), SGV
.getType());
778 // Incorporate types by name, scanning all the types in the source module.
779 // At this point, the destination module may have a type "%foo = { i32 }" for
780 // example. When the source module got loaded into the same LLVMContext, if
781 // it had the same type, it would have been renamed to "%foo.42 = { i32 }".
782 std::vector
<StructType
*> Types
= SrcM
->getIdentifiedStructTypes();
783 for (StructType
*ST
: Types
) {
787 if (TypeMap
.DstStructTypesSet
.hasType(ST
)) {
788 // This is actually a type from the destination module.
789 // getIdentifiedStructTypes() can have found it by walking debug info
790 // metadata nodes, some of which get linked by name when ODR Type Uniquing
791 // is enabled on the Context, from the source to the destination module.
795 auto STTypePrefix
= getTypeNamePrefix(ST
->getName());
796 if (STTypePrefix
.size()== ST
->getName().size())
799 // Check to see if the destination module has a struct with the prefix name.
800 StructType
*DST
= DstM
.getTypeByName(STTypePrefix
);
804 // Don't use it if this actually came from the source module. They're in
805 // the same LLVMContext after all. Also don't use it unless the type is
806 // actually used in the destination module. This can happen in situations
811 // %Z = type { %A } %B = type { %C.1 }
812 // %A = type { %B.1, [7 x i8] } %C.1 = type { i8* }
813 // %B.1 = type { %C } %A.2 = type { %B.3, [5 x i8] }
814 // %C = type { i8* } %B.3 = type { %C.1 }
816 // When we link Module B with Module A, the '%B' in Module B is
817 // used. However, that would then use '%C.1'. But when we process '%C.1',
818 // we prefer to take the '%C' version. So we are then left with both
819 // '%C.1' and '%C' being used for the same types. This leads to some
820 // variables using one type and some using the other.
821 if (TypeMap
.DstStructTypesSet
.hasType(DST
))
822 TypeMap
.addTypeMapping(DST
, ST
);
825 // Now that we have discovered all of the type equivalences, get a body for
826 // any 'opaque' types in the dest module that are now resolved.
827 TypeMap
.linkDefinedTypeBodies();
830 static void getArrayElements(const Constant
*C
,
831 SmallVectorImpl
<Constant
*> &Dest
) {
832 unsigned NumElements
= cast
<ArrayType
>(C
->getType())->getNumElements();
834 for (unsigned i
= 0; i
!= NumElements
; ++i
)
835 Dest
.push_back(C
->getAggregateElement(i
));
838 /// If there were any appending global variables, link them together now.
840 IRLinker::linkAppendingVarProto(GlobalVariable
*DstGV
,
841 const GlobalVariable
*SrcGV
) {
842 Type
*EltTy
= cast
<ArrayType
>(TypeMap
.get(SrcGV
->getValueType()))
845 // FIXME: This upgrade is done during linking to support the C API. Once the
846 // old form is deprecated, we should move this upgrade to
847 // llvm::UpgradeGlobalVariable() and simplify the logic here and in
848 // Mapper::mapAppendingVariable() in ValueMapper.cpp.
849 StringRef Name
= SrcGV
->getName();
850 bool IsNewStructor
= false;
851 bool IsOldStructor
= false;
852 if (Name
== "llvm.global_ctors" || Name
== "llvm.global_dtors") {
853 if (cast
<StructType
>(EltTy
)->getNumElements() == 3)
854 IsNewStructor
= true;
856 IsOldStructor
= true;
859 PointerType
*VoidPtrTy
= Type::getInt8Ty(SrcGV
->getContext())->getPointerTo();
861 auto &ST
= *cast
<StructType
>(EltTy
);
862 Type
*Tys
[3] = {ST
.getElementType(0), ST
.getElementType(1), VoidPtrTy
};
863 EltTy
= StructType::get(SrcGV
->getContext(), Tys
, false);
866 uint64_t DstNumElements
= 0;
868 ArrayType
*DstTy
= cast
<ArrayType
>(DstGV
->getValueType());
869 DstNumElements
= DstTy
->getNumElements();
871 if (!SrcGV
->hasAppendingLinkage() || !DstGV
->hasAppendingLinkage())
873 "Linking globals named '" + SrcGV
->getName() +
874 "': can only link appending global with another appending "
877 // Check to see that they two arrays agree on type.
878 if (EltTy
!= DstTy
->getElementType())
879 return stringErr("Appending variables with different element types!");
880 if (DstGV
->isConstant() != SrcGV
->isConstant())
881 return stringErr("Appending variables linked with different const'ness!");
883 if (DstGV
->getAlignment() != SrcGV
->getAlignment())
885 "Appending variables with different alignment need to be linked!");
887 if (DstGV
->getVisibility() != SrcGV
->getVisibility())
889 "Appending variables with different visibility need to be linked!");
891 if (DstGV
->hasGlobalUnnamedAddr() != SrcGV
->hasGlobalUnnamedAddr())
893 "Appending variables with different unnamed_addr need to be linked!");
895 if (DstGV
->getSection() != SrcGV
->getSection())
897 "Appending variables with different section name need to be linked!");
900 SmallVector
<Constant
*, 16> SrcElements
;
901 getArrayElements(SrcGV
->getInitializer(), SrcElements
);
904 auto It
= remove_if(SrcElements
, [this](Constant
*E
) {
906 dyn_cast
<GlobalValue
>(E
->getAggregateElement(2)->stripPointerCasts());
909 GlobalValue
*DGV
= getLinkedToGlobal(Key
);
910 return !shouldLink(DGV
, *Key
);
912 SrcElements
.erase(It
, SrcElements
.end());
914 uint64_t NewSize
= DstNumElements
+ SrcElements
.size();
915 ArrayType
*NewType
= ArrayType::get(EltTy
, NewSize
);
917 // Create the new global variable.
918 GlobalVariable
*NG
= new GlobalVariable(
919 DstM
, NewType
, SrcGV
->isConstant(), SrcGV
->getLinkage(),
920 /*init*/ nullptr, /*name*/ "", DstGV
, SrcGV
->getThreadLocalMode(),
921 SrcGV
->getType()->getAddressSpace());
923 NG
->copyAttributesFrom(SrcGV
);
924 forceRenaming(NG
, SrcGV
->getName());
926 Constant
*Ret
= ConstantExpr::getBitCast(NG
, TypeMap
.get(SrcGV
->getType()));
928 Mapper
.scheduleMapAppendingVariable(*NG
,
929 DstGV
? DstGV
->getInitializer() : nullptr,
930 IsOldStructor
, SrcElements
);
932 // Replace any uses of the two global variables with uses of the new
935 RAUWWorklist
.push_back(
936 std::make_pair(DstGV
, ConstantExpr::getBitCast(NG
, DstGV
->getType())));
942 bool IRLinker::shouldLink(GlobalValue
*DGV
, GlobalValue
&SGV
) {
943 if (ValuesToLink
.count(&SGV
) || SGV
.hasLocalLinkage())
946 if (DGV
&& !DGV
->isDeclarationForLinker())
949 if (SGV
.isDeclaration() || DoneLinkingBodies
)
952 // Callback to the client to give a chance to lazily add the Global to the
953 // list of value to link.
954 bool LazilyAdded
= false;
955 AddLazyFor(SGV
, [this, &LazilyAdded
](GlobalValue
&GV
) {
962 Expected
<Constant
*> IRLinker::linkGlobalValueProto(GlobalValue
*SGV
,
963 bool ForIndirectSymbol
) {
964 GlobalValue
*DGV
= getLinkedToGlobal(SGV
);
966 bool ShouldLink
= shouldLink(DGV
, *SGV
);
968 // just missing from map
970 auto I
= ValueMap
.find(SGV
);
971 if (I
!= ValueMap
.end())
972 return cast
<Constant
>(I
->second
);
974 I
= IndirectSymbolValueMap
.find(SGV
);
975 if (I
!= IndirectSymbolValueMap
.end())
976 return cast
<Constant
>(I
->second
);
979 if (!ShouldLink
&& ForIndirectSymbol
)
982 // Handle the ultra special appending linkage case first.
983 assert(!DGV
|| SGV
->hasAppendingLinkage() == DGV
->hasAppendingLinkage());
984 if (SGV
->hasAppendingLinkage())
985 return linkAppendingVarProto(cast_or_null
<GlobalVariable
>(DGV
),
986 cast
<GlobalVariable
>(SGV
));
989 if (DGV
&& !ShouldLink
) {
992 // If we are done linking global value bodies (i.e. we are performing
993 // metadata linking), don't link in the global value due to this
994 // reference, simply map it to null.
995 if (DoneLinkingBodies
)
998 NewGV
= copyGlobalValueProto(SGV
, ShouldLink
|| ForIndirectSymbol
);
999 if (ShouldLink
|| !ForIndirectSymbol
)
1000 forceRenaming(NewGV
, SGV
->getName());
1003 // Overloaded intrinsics have overloaded types names as part of their
1004 // names. If we renamed overloaded types we should rename the intrinsic
1006 if (Function
*F
= dyn_cast
<Function
>(NewGV
))
1007 if (auto Remangled
= Intrinsic::remangleIntrinsicFunction(F
))
1008 NewGV
= Remangled
.getValue();
1010 if (ShouldLink
|| ForIndirectSymbol
) {
1011 if (const Comdat
*SC
= SGV
->getComdat()) {
1012 if (auto *GO
= dyn_cast
<GlobalObject
>(NewGV
)) {
1013 Comdat
*DC
= DstM
.getOrInsertComdat(SC
->getName());
1014 DC
->setSelectionKind(SC
->getSelectionKind());
1020 if (!ShouldLink
&& ForIndirectSymbol
)
1021 NewGV
->setLinkage(GlobalValue::InternalLinkage
);
1023 Constant
*C
= NewGV
;
1024 // Only create a bitcast if necessary. In particular, with
1025 // DebugTypeODRUniquing we may reach metadata in the destination module
1026 // containing a GV from the source module, in which case SGV will be
1027 // the same as DGV and NewGV, and TypeMap.get() will assert since it
1028 // assumes it is being invoked on a type in the source module.
1029 if (DGV
&& NewGV
!= SGV
) {
1030 C
= ConstantExpr::getPointerBitCastOrAddrSpaceCast(
1031 NewGV
, TypeMap
.get(SGV
->getType()));
1034 if (DGV
&& NewGV
!= DGV
) {
1035 // Schedule "replace all uses with" to happen after materializing is
1036 // done. It is not safe to do it now, since ValueMapper may be holding
1037 // pointers to constants that will get deleted if RAUW runs.
1038 RAUWWorklist
.push_back(std::make_pair(
1040 ConstantExpr::getPointerBitCastOrAddrSpaceCast(NewGV
, DGV
->getType())));
1046 /// Update the initializers in the Dest module now that all globals that may be
1047 /// referenced are in Dest.
1048 void IRLinker::linkGlobalVariable(GlobalVariable
&Dst
, GlobalVariable
&Src
) {
1049 // Figure out what the initializer looks like in the dest module.
1050 Mapper
.scheduleMapGlobalInitializer(Dst
, *Src
.getInitializer());
1053 /// Copy the source function over into the dest function and fix up references
1054 /// to values. At this point we know that Dest is an external function, and
1055 /// that Src is not.
1056 Error
IRLinker::linkFunctionBody(Function
&Dst
, Function
&Src
) {
1057 assert(Dst
.isDeclaration() && !Src
.isDeclaration());
1059 // Materialize if needed.
1060 if (Error Err
= Src
.materialize())
1063 // Link in the operands without remapping.
1064 if (Src
.hasPrefixData())
1065 Dst
.setPrefixData(Src
.getPrefixData());
1066 if (Src
.hasPrologueData())
1067 Dst
.setPrologueData(Src
.getPrologueData());
1068 if (Src
.hasPersonalityFn())
1069 Dst
.setPersonalityFn(Src
.getPersonalityFn());
1071 // Copy over the metadata attachments without remapping.
1072 Dst
.copyMetadata(&Src
, 0);
1074 // Steal arguments and splice the body of Src into Dst.
1075 Dst
.stealArgumentListFrom(Src
);
1076 Dst
.getBasicBlockList().splice(Dst
.end(), Src
.getBasicBlockList());
1078 // Everything has been moved over. Remap it.
1079 Mapper
.scheduleRemapFunction(Dst
);
1080 return Error::success();
1083 void IRLinker::linkIndirectSymbolBody(GlobalIndirectSymbol
&Dst
,
1084 GlobalIndirectSymbol
&Src
) {
1085 Mapper
.scheduleMapGlobalIndirectSymbol(Dst
, *Src
.getIndirectSymbol(),
1086 IndirectSymbolMCID
);
1089 Error
IRLinker::linkGlobalValueBody(GlobalValue
&Dst
, GlobalValue
&Src
) {
1090 if (auto *F
= dyn_cast
<Function
>(&Src
))
1091 return linkFunctionBody(cast
<Function
>(Dst
), *F
);
1092 if (auto *GVar
= dyn_cast
<GlobalVariable
>(&Src
)) {
1093 linkGlobalVariable(cast
<GlobalVariable
>(Dst
), *GVar
);
1094 return Error::success();
1096 linkIndirectSymbolBody(cast
<GlobalIndirectSymbol
>(Dst
), cast
<GlobalIndirectSymbol
>(Src
));
1097 return Error::success();
1100 void IRLinker::flushRAUWWorklist() {
1101 for (const auto Elem
: RAUWWorklist
) {
1104 std::tie(Old
, New
) = Elem
;
1106 Old
->replaceAllUsesWith(New
);
1107 Old
->eraseFromParent();
1109 RAUWWorklist
.clear();
1112 void IRLinker::prepareCompileUnitsForImport() {
1113 NamedMDNode
*SrcCompileUnits
= SrcM
->getNamedMetadata("llvm.dbg.cu");
1114 if (!SrcCompileUnits
)
1116 // When importing for ThinLTO, prevent importing of types listed on
1117 // the DICompileUnit that we don't need a copy of in the importing
1118 // module. They will be emitted by the originating module.
1119 for (unsigned I
= 0, E
= SrcCompileUnits
->getNumOperands(); I
!= E
; ++I
) {
1120 auto *CU
= cast
<DICompileUnit
>(SrcCompileUnits
->getOperand(I
));
1121 assert(CU
&& "Expected valid compile unit");
1122 // Enums, macros, and retained types don't need to be listed on the
1123 // imported DICompileUnit. This means they will only be imported
1124 // if reached from the mapped IR. Do this by setting their value map
1125 // entries to nullptr, which will automatically prevent their importing
1126 // when reached from the DICompileUnit during metadata mapping.
1127 ValueMap
.MD()[CU
->getRawEnumTypes()].reset(nullptr);
1128 ValueMap
.MD()[CU
->getRawMacros()].reset(nullptr);
1129 ValueMap
.MD()[CU
->getRawRetainedTypes()].reset(nullptr);
1130 // The original definition (or at least its debug info - if the variable is
1131 // internalized an optimized away) will remain in the source module, so
1132 // there's no need to import them.
1133 // If LLVM ever does more advanced optimizations on global variables
1134 // (removing/localizing write operations, for instance) that can track
1135 // through debug info, this decision may need to be revisited - but do so
1136 // with care when it comes to debug info size. Emitting small CUs containing
1137 // only a few imported entities into every destination module may be very
1138 // size inefficient.
1139 ValueMap
.MD()[CU
->getRawGlobalVariables()].reset(nullptr);
1141 // Imported entities only need to be mapped in if they have local
1142 // scope, as those might correspond to an imported entity inside a
1143 // function being imported (any locally scoped imported entities that
1144 // don't end up referenced by an imported function will not be emitted
1145 // into the object). Imported entities not in a local scope
1146 // (e.g. on the namespace) only need to be emitted by the originating
1147 // module. Create a list of the locally scoped imported entities, and
1148 // replace the source CUs imported entity list with the new list, so
1149 // only those are mapped in.
1150 // FIXME: Locally-scoped imported entities could be moved to the
1151 // functions they are local to instead of listing them on the CU, and
1152 // we would naturally only link in those needed by function importing.
1153 SmallVector
<TrackingMDNodeRef
, 4> AllImportedModules
;
1154 bool ReplaceImportedEntities
= false;
1155 for (auto *IE
: CU
->getImportedEntities()) {
1156 DIScope
*Scope
= IE
->getScope();
1157 assert(Scope
&& "Invalid Scope encoding!");
1158 if (isa
<DILocalScope
>(Scope
))
1159 AllImportedModules
.emplace_back(IE
);
1161 ReplaceImportedEntities
= true;
1163 if (ReplaceImportedEntities
) {
1164 if (!AllImportedModules
.empty())
1165 CU
->replaceImportedEntities(MDTuple::get(
1167 SmallVector
<Metadata
*, 16>(AllImportedModules
.begin(),
1168 AllImportedModules
.end())));
1170 // If there were no local scope imported entities, we can map
1171 // the whole list to nullptr.
1172 ValueMap
.MD()[CU
->getRawImportedEntities()].reset(nullptr);
1177 /// Insert all of the named MDNodes in Src into the Dest module.
1178 void IRLinker::linkNamedMDNodes() {
1179 const NamedMDNode
*SrcModFlags
= SrcM
->getModuleFlagsMetadata();
1180 for (const NamedMDNode
&NMD
: SrcM
->named_metadata()) {
1181 // Don't link module flags here. Do them separately.
1182 if (&NMD
== SrcModFlags
)
1184 NamedMDNode
*DestNMD
= DstM
.getOrInsertNamedMetadata(NMD
.getName());
1185 // Add Src elements into Dest node.
1186 for (const MDNode
*Op
: NMD
.operands())
1187 DestNMD
->addOperand(Mapper
.mapMDNode(*Op
));
1191 /// Merge the linker flags in Src into the Dest module.
1192 Error
IRLinker::linkModuleFlagsMetadata() {
1193 // If the source module has no module flags, we are done.
1194 const NamedMDNode
*SrcModFlags
= SrcM
->getModuleFlagsMetadata();
1196 return Error::success();
1198 // If the destination module doesn't have module flags yet, then just copy
1199 // over the source module's flags.
1200 NamedMDNode
*DstModFlags
= DstM
.getOrInsertModuleFlagsMetadata();
1201 if (DstModFlags
->getNumOperands() == 0) {
1202 for (unsigned I
= 0, E
= SrcModFlags
->getNumOperands(); I
!= E
; ++I
)
1203 DstModFlags
->addOperand(SrcModFlags
->getOperand(I
));
1205 return Error::success();
1208 // First build a map of the existing module flags and requirements.
1209 DenseMap
<MDString
*, std::pair
<MDNode
*, unsigned>> Flags
;
1210 SmallSetVector
<MDNode
*, 16> Requirements
;
1211 for (unsigned I
= 0, E
= DstModFlags
->getNumOperands(); I
!= E
; ++I
) {
1212 MDNode
*Op
= DstModFlags
->getOperand(I
);
1213 ConstantInt
*Behavior
= mdconst::extract
<ConstantInt
>(Op
->getOperand(0));
1214 MDString
*ID
= cast
<MDString
>(Op
->getOperand(1));
1216 if (Behavior
->getZExtValue() == Module::Require
) {
1217 Requirements
.insert(cast
<MDNode
>(Op
->getOperand(2)));
1219 Flags
[ID
] = std::make_pair(Op
, I
);
1223 // Merge in the flags from the source module, and also collect its set of
1225 for (unsigned I
= 0, E
= SrcModFlags
->getNumOperands(); I
!= E
; ++I
) {
1226 MDNode
*SrcOp
= SrcModFlags
->getOperand(I
);
1227 ConstantInt
*SrcBehavior
=
1228 mdconst::extract
<ConstantInt
>(SrcOp
->getOperand(0));
1229 MDString
*ID
= cast
<MDString
>(SrcOp
->getOperand(1));
1232 std::tie(DstOp
, DstIndex
) = Flags
.lookup(ID
);
1233 unsigned SrcBehaviorValue
= SrcBehavior
->getZExtValue();
1235 // If this is a requirement, add it and continue.
1236 if (SrcBehaviorValue
== Module::Require
) {
1237 // If the destination module does not already have this requirement, add
1239 if (Requirements
.insert(cast
<MDNode
>(SrcOp
->getOperand(2)))) {
1240 DstModFlags
->addOperand(SrcOp
);
1245 // If there is no existing flag with this ID, just add it.
1247 Flags
[ID
] = std::make_pair(SrcOp
, DstModFlags
->getNumOperands());
1248 DstModFlags
->addOperand(SrcOp
);
1252 // Otherwise, perform a merge.
1253 ConstantInt
*DstBehavior
=
1254 mdconst::extract
<ConstantInt
>(DstOp
->getOperand(0));
1255 unsigned DstBehaviorValue
= DstBehavior
->getZExtValue();
1257 auto overrideDstValue
= [&]() {
1258 DstModFlags
->setOperand(DstIndex
, SrcOp
);
1259 Flags
[ID
].first
= SrcOp
;
1262 // If either flag has override behavior, handle it first.
1263 if (DstBehaviorValue
== Module::Override
) {
1264 // Diagnose inconsistent flags which both have override behavior.
1265 if (SrcBehaviorValue
== Module::Override
&&
1266 SrcOp
->getOperand(2) != DstOp
->getOperand(2))
1267 return stringErr("linking module flags '" + ID
->getString() +
1268 "': IDs have conflicting override values in '" +
1269 SrcM
->getModuleIdentifier() + "' and '" +
1270 DstM
.getModuleIdentifier() + "'");
1272 } else if (SrcBehaviorValue
== Module::Override
) {
1273 // Update the destination flag to that of the source.
1278 // Diagnose inconsistent merge behavior types.
1279 if (SrcBehaviorValue
!= DstBehaviorValue
)
1280 return stringErr("linking module flags '" + ID
->getString() +
1281 "': IDs have conflicting behaviors in '" +
1282 SrcM
->getModuleIdentifier() + "' and '" +
1283 DstM
.getModuleIdentifier() + "'");
1285 auto replaceDstValue
= [&](MDNode
*New
) {
1286 Metadata
*FlagOps
[] = {DstOp
->getOperand(0), ID
, New
};
1287 MDNode
*Flag
= MDNode::get(DstM
.getContext(), FlagOps
);
1288 DstModFlags
->setOperand(DstIndex
, Flag
);
1289 Flags
[ID
].first
= Flag
;
1292 // Perform the merge for standard behavior types.
1293 switch (SrcBehaviorValue
) {
1294 case Module::Require
:
1295 case Module::Override
:
1296 llvm_unreachable("not possible");
1297 case Module::Error
: {
1298 // Emit an error if the values differ.
1299 if (SrcOp
->getOperand(2) != DstOp
->getOperand(2))
1300 return stringErr("linking module flags '" + ID
->getString() +
1301 "': IDs have conflicting values in '" +
1302 SrcM
->getModuleIdentifier() + "' and '" +
1303 DstM
.getModuleIdentifier() + "'");
1306 case Module::Warning
: {
1307 // Emit a warning if the values differ.
1308 if (SrcOp
->getOperand(2) != DstOp
->getOperand(2)) {
1310 raw_string_ostream(str
)
1311 << "linking module flags '" << ID
->getString()
1312 << "': IDs have conflicting values ('" << *SrcOp
->getOperand(2)
1313 << "' from " << SrcM
->getModuleIdentifier() << " with '"
1314 << *DstOp
->getOperand(2) << "' from " << DstM
.getModuleIdentifier()
1321 ConstantInt
*DstValue
=
1322 mdconst::extract
<ConstantInt
>(DstOp
->getOperand(2));
1323 ConstantInt
*SrcValue
=
1324 mdconst::extract
<ConstantInt
>(SrcOp
->getOperand(2));
1325 if (SrcValue
->getZExtValue() > DstValue
->getZExtValue())
1329 case Module::Append
: {
1330 MDNode
*DstValue
= cast
<MDNode
>(DstOp
->getOperand(2));
1331 MDNode
*SrcValue
= cast
<MDNode
>(SrcOp
->getOperand(2));
1332 SmallVector
<Metadata
*, 8> MDs
;
1333 MDs
.reserve(DstValue
->getNumOperands() + SrcValue
->getNumOperands());
1334 MDs
.append(DstValue
->op_begin(), DstValue
->op_end());
1335 MDs
.append(SrcValue
->op_begin(), SrcValue
->op_end());
1337 replaceDstValue(MDNode::get(DstM
.getContext(), MDs
));
1340 case Module::AppendUnique
: {
1341 SmallSetVector
<Metadata
*, 16> Elts
;
1342 MDNode
*DstValue
= cast
<MDNode
>(DstOp
->getOperand(2));
1343 MDNode
*SrcValue
= cast
<MDNode
>(SrcOp
->getOperand(2));
1344 Elts
.insert(DstValue
->op_begin(), DstValue
->op_end());
1345 Elts
.insert(SrcValue
->op_begin(), SrcValue
->op_end());
1347 replaceDstValue(MDNode::get(DstM
.getContext(),
1348 makeArrayRef(Elts
.begin(), Elts
.end())));
1354 // Check all of the requirements.
1355 for (unsigned I
= 0, E
= Requirements
.size(); I
!= E
; ++I
) {
1356 MDNode
*Requirement
= Requirements
[I
];
1357 MDString
*Flag
= cast
<MDString
>(Requirement
->getOperand(0));
1358 Metadata
*ReqValue
= Requirement
->getOperand(1);
1360 MDNode
*Op
= Flags
[Flag
].first
;
1361 if (!Op
|| Op
->getOperand(2) != ReqValue
)
1362 return stringErr("linking module flags '" + Flag
->getString() +
1363 "': does not have the required value");
1365 return Error::success();
1368 /// Return InlineAsm adjusted with target-specific directives if required.
1369 /// For ARM and Thumb, we have to add directives to select the appropriate ISA
1370 /// to support mixing module-level inline assembly from ARM and Thumb modules.
1371 static std::string
adjustInlineAsm(const std::string
&InlineAsm
,
1372 const Triple
&Triple
) {
1373 if (Triple
.getArch() == Triple::thumb
|| Triple
.getArch() == Triple::thumbeb
)
1374 return ".text\n.balign 2\n.thumb\n" + InlineAsm
;
1375 if (Triple
.getArch() == Triple::arm
|| Triple
.getArch() == Triple::armeb
)
1376 return ".text\n.balign 4\n.arm\n" + InlineAsm
;
1380 Error
IRLinker::run() {
1381 // Ensure metadata materialized before value mapping.
1382 if (SrcM
->getMaterializer())
1383 if (Error Err
= SrcM
->getMaterializer()->materializeMetadata())
1386 // Inherit the target data from the source module if the destination module
1387 // doesn't have one already.
1388 if (DstM
.getDataLayout().isDefault())
1389 DstM
.setDataLayout(SrcM
->getDataLayout());
1391 if (SrcM
->getDataLayout() != DstM
.getDataLayout()) {
1392 emitWarning("Linking two modules of different data layouts: '" +
1393 SrcM
->getModuleIdentifier() + "' is '" +
1394 SrcM
->getDataLayoutStr() + "' whereas '" +
1395 DstM
.getModuleIdentifier() + "' is '" +
1396 DstM
.getDataLayoutStr() + "'\n");
1399 // Copy the target triple from the source to dest if the dest's is empty.
1400 if (DstM
.getTargetTriple().empty() && !SrcM
->getTargetTriple().empty())
1401 DstM
.setTargetTriple(SrcM
->getTargetTriple());
1403 Triple
SrcTriple(SrcM
->getTargetTriple()), DstTriple(DstM
.getTargetTriple());
1405 if (!SrcM
->getTargetTriple().empty()&&
1406 !SrcTriple
.isCompatibleWith(DstTriple
))
1407 emitWarning("Linking two modules of different target triples: " +
1408 SrcM
->getModuleIdentifier() + "' is '" +
1409 SrcM
->getTargetTriple() + "' whereas '" +
1410 DstM
.getModuleIdentifier() + "' is '" + DstM
.getTargetTriple() +
1413 DstM
.setTargetTriple(SrcTriple
.merge(DstTriple
));
1415 // Append the module inline asm string.
1416 if (!IsPerformingImport
&& !SrcM
->getModuleInlineAsm().empty()) {
1417 std::string SrcModuleInlineAsm
= adjustInlineAsm(SrcM
->getModuleInlineAsm(),
1419 if (DstM
.getModuleInlineAsm().empty())
1420 DstM
.setModuleInlineAsm(SrcModuleInlineAsm
);
1422 DstM
.setModuleInlineAsm(DstM
.getModuleInlineAsm() + "\n" +
1423 SrcModuleInlineAsm
);
1426 // Loop over all of the linked values to compute type mappings.
1427 computeTypeMapping();
1429 std::reverse(Worklist
.begin(), Worklist
.end());
1430 while (!Worklist
.empty()) {
1431 GlobalValue
*GV
= Worklist
.back();
1432 Worklist
.pop_back();
1435 if (ValueMap
.find(GV
) != ValueMap
.end() ||
1436 IndirectSymbolValueMap
.find(GV
) != IndirectSymbolValueMap
.end())
1439 assert(!GV
->isDeclaration());
1440 Mapper
.mapValue(*GV
);
1442 return std::move(*FoundError
);
1443 flushRAUWWorklist();
1446 // Note that we are done linking global value bodies. This prevents
1447 // metadata linking from creating new references.
1448 DoneLinkingBodies
= true;
1449 Mapper
.addFlags(RF_NullMapMissingGlobalValues
);
1451 // Remap all of the named MDNodes in Src into the DstM module. We do this
1452 // after linking GlobalValues so that MDNodes that reference GlobalValues
1453 // are properly remapped.
1456 // Merge the module flags into the DstM module.
1457 return linkModuleFlagsMetadata();
1460 IRMover::StructTypeKeyInfo::KeyTy::KeyTy(ArrayRef
<Type
*> E
, bool P
)
1461 : ETypes(E
), IsPacked(P
) {}
1463 IRMover::StructTypeKeyInfo::KeyTy::KeyTy(const StructType
*ST
)
1464 : ETypes(ST
->elements()), IsPacked(ST
->isPacked()) {}
1466 bool IRMover::StructTypeKeyInfo::KeyTy::operator==(const KeyTy
&That
) const {
1467 return IsPacked
== That
.IsPacked
&& ETypes
== That
.ETypes
;
1470 bool IRMover::StructTypeKeyInfo::KeyTy::operator!=(const KeyTy
&That
) const {
1471 return !this->operator==(That
);
1474 StructType
*IRMover::StructTypeKeyInfo::getEmptyKey() {
1475 return DenseMapInfo
<StructType
*>::getEmptyKey();
1478 StructType
*IRMover::StructTypeKeyInfo::getTombstoneKey() {
1479 return DenseMapInfo
<StructType
*>::getTombstoneKey();
1482 unsigned IRMover::StructTypeKeyInfo::getHashValue(const KeyTy
&Key
) {
1483 return hash_combine(hash_combine_range(Key
.ETypes
.begin(), Key
.ETypes
.end()),
1487 unsigned IRMover::StructTypeKeyInfo::getHashValue(const StructType
*ST
) {
1488 return getHashValue(KeyTy(ST
));
1491 bool IRMover::StructTypeKeyInfo::isEqual(const KeyTy
&LHS
,
1492 const StructType
*RHS
) {
1493 if (RHS
== getEmptyKey() || RHS
== getTombstoneKey())
1495 return LHS
== KeyTy(RHS
);
1498 bool IRMover::StructTypeKeyInfo::isEqual(const StructType
*LHS
,
1499 const StructType
*RHS
) {
1500 if (RHS
== getEmptyKey() || RHS
== getTombstoneKey())
1502 return KeyTy(LHS
) == KeyTy(RHS
);
1505 void IRMover::IdentifiedStructTypeSet::addNonOpaque(StructType
*Ty
) {
1506 assert(!Ty
->isOpaque());
1507 NonOpaqueStructTypes
.insert(Ty
);
1510 void IRMover::IdentifiedStructTypeSet::switchToNonOpaque(StructType
*Ty
) {
1511 assert(!Ty
->isOpaque());
1512 NonOpaqueStructTypes
.insert(Ty
);
1513 bool Removed
= OpaqueStructTypes
.erase(Ty
);
1518 void IRMover::IdentifiedStructTypeSet::addOpaque(StructType
*Ty
) {
1519 assert(Ty
->isOpaque());
1520 OpaqueStructTypes
.insert(Ty
);
1524 IRMover::IdentifiedStructTypeSet::findNonOpaque(ArrayRef
<Type
*> ETypes
,
1526 IRMover::StructTypeKeyInfo::KeyTy
Key(ETypes
, IsPacked
);
1527 auto I
= NonOpaqueStructTypes
.find_as(Key
);
1528 return I
== NonOpaqueStructTypes
.end() ? nullptr : *I
;
1531 bool IRMover::IdentifiedStructTypeSet::hasType(StructType
*Ty
) {
1533 return OpaqueStructTypes
.count(Ty
);
1534 auto I
= NonOpaqueStructTypes
.find(Ty
);
1535 return I
== NonOpaqueStructTypes
.end() ? false : *I
== Ty
;
1538 IRMover::IRMover(Module
&M
) : Composite(M
) {
1539 TypeFinder StructTypes
;
1540 StructTypes
.run(M
, /* OnlyNamed */ false);
1541 for (StructType
*Ty
: StructTypes
) {
1543 IdentifiedStructTypes
.addOpaque(Ty
);
1545 IdentifiedStructTypes
.addNonOpaque(Ty
);
1547 // Self-map metadatas in the destination module. This is needed when
1548 // DebugTypeODRUniquing is enabled on the LLVMContext, since metadata in the
1549 // destination module may be reached from the source module.
1550 for (auto *MD
: StructTypes
.getVisitedMetadata()) {
1551 SharedMDs
[MD
].reset(const_cast<MDNode
*>(MD
));
1555 Error
IRMover::move(
1556 std::unique_ptr
<Module
> Src
, ArrayRef
<GlobalValue
*> ValuesToLink
,
1557 std::function
<void(GlobalValue
&, ValueAdder Add
)> AddLazyFor
,
1558 bool IsPerformingImport
) {
1559 IRLinker
TheIRLinker(Composite
, SharedMDs
, IdentifiedStructTypes
,
1560 std::move(Src
), ValuesToLink
, std::move(AddLazyFor
),
1561 IsPerformingImport
);
1562 Error E
= TheIRLinker
.run();
1563 Composite
.dropTriviallyDeadConstantArrays();