Lines Matching defs:SGV
438 GlobalValue *copyGlobalValueProto(const GlobalValue *SGV, bool ForDefinition);
479 /// Given the GlobaValue \p SGV in the source module, and the matching
480 /// GlobalValue \p DGV (if any), return true if the linker will pull \p SGV
484 bool shouldLink(GlobalValue *DGV, GlobalValue &SGV);
504 GlobalValue *copyIndirectSymbolProto(const GlobalValue *SGV);
569 Value *GlobalValueMaterializer::materialize(Value *SGV) {
570 return TheIRLinker.materialize(SGV, false);
573 Value *LocalValueMaterializer::materialize(Value *SGV) {
574 return TheIRLinker.materialize(SGV, true);
578 auto *SGV = dyn_cast<GlobalValue>(V);
579 if (!SGV)
582 // If SGV is from dest, it was already materialized when dest was loaded.
583 if (SGV->getParent() == &DstM)
590 if (SGV->getParent() != SrcM.get())
593 Expected<Constant *> NewProto = linkGlobalValueProto(SGV, ForIndirectSymbol);
630 if ((ForIndirectSymbol && ValueMap.lookup(SGV) == New) ||
631 (!ForIndirectSymbol && IndirectSymbolValueMap.lookup(SGV) == New))
634 if (ForIndirectSymbol || shouldLink(New, *SGV))
635 setError(linkGlobalValueBody(*New, *SGV));
692 GlobalValue *IRLinker::copyIndirectSymbolProto(const GlobalValue *SGV) {
695 auto *Ty = TypeMap.get(SGV->getValueType());
697 if (auto *GA = dyn_cast<GlobalAlias>(SGV)) {
698 auto *DGA = GlobalAlias::create(Ty, SGV->getAddressSpace(),
700 SGV->getName(), &DstM);
705 if (auto *GI = dyn_cast<GlobalIFunc>(SGV)) {
706 auto *DGI = GlobalIFunc::create(Ty, SGV->getAddressSpace(),
708 SGV->getName(), nullptr, &DstM);
716 GlobalValue *IRLinker::copyGlobalValueProto(const GlobalValue *SGV,
719 if (auto *SGVar = dyn_cast<GlobalVariable>(SGV)) {
721 } else if (auto *SF = dyn_cast<Function>(SGV)) {
725 NewGV = copyIndirectSymbolProto(SGV);
726 else if (SGV->getValueType()->isFunctionTy())
728 Function::Create(cast<FunctionType>(TypeMap.get(SGV->getValueType())),
729 GlobalValue::ExternalLinkage, SGV->getAddressSpace(),
730 SGV->getName(), &DstM);
733 new GlobalVariable(DstM, TypeMap.get(SGV->getValueType()),
735 /*init*/ nullptr, SGV->getName(),
737 SGV->getThreadLocalMode(), SGV->getAddressSpace());
741 NewGV->setLinkage(SGV->getLinkage());
742 else if (SGV->hasExternalWeakLinkage())
747 if (isa<GlobalVariable>(SGV) || SGV->isDeclaration()) {
748 NewGO->copyMetadata(cast<GlobalObject>(SGV), 0);
749 if (SGV->isDeclaration() && NewGO->hasMetadata())
779 for (GlobalValue &SGV : SrcM->globals()) {
780 GlobalValue *DGV = getLinkedToGlobal(&SGV);
784 if (!DGV->hasAppendingLinkage() || !SGV.hasAppendingLinkage()) {
785 TypeMap.addTypeMapping(DGV->getType(), SGV.getType());
791 ArrayType *SAT = cast<ArrayType>(SGV.getValueType());
795 for (GlobalValue &SGV : *SrcM)
796 if (GlobalValue *DGV = getLinkedToGlobal(&SGV)) {
797 if (DGV->getType() == SGV.getType()) {
798 // If the types of DGV and SGV are the same, it means that DGV is from
806 TypeMap.addTypeMapping(DGV->getType(), SGV.getType());
809 for (GlobalValue &SGV : SrcM->aliases())
810 if (GlobalValue *DGV = getLinkedToGlobal(&SGV))
811 TypeMap.addTypeMapping(DGV->getType(), SGV.getType());
988 bool IRLinker::shouldLink(GlobalValue *DGV, GlobalValue &SGV) {
989 if (ValuesToLink.count(&SGV) || SGV.hasLocalLinkage())
995 if (SGV.isDeclaration() || DoneLinkingBodies)
1002 AddLazyFor(SGV, [this, &LazilyAdded](GlobalValue &GV) {
1009 Expected<Constant *> IRLinker::linkGlobalValueProto(GlobalValue *SGV,
1011 GlobalValue *DGV = getLinkedToGlobal(SGV);
1013 bool ShouldLink = shouldLink(DGV, *SGV);
1017 auto I = ValueMap.find(SGV);
1021 I = IndirectSymbolValueMap.find(SGV);
1030 if (SGV->hasAppendingLinkage() || (DGV && DGV->hasAppendingLinkage()))
1032 cast<GlobalVariable>(SGV));
1045 NewGV = copyGlobalValueProto(SGV, ShouldLink || ForIndirectSymbol);
1065 forceRenaming(NewGV, SGV->getName());
1068 if (const Comdat *SC = SGV->getComdat()) {
1083 // containing a GV from the source module, in which case SGV will be
1086 if (DGV && NewGV != SGV) {
1088 NewGV, TypeMap.get(SGV->getType()));