Lines Matching refs:SGV
453 GlobalValue *copyGlobalValueProto(const GlobalValue *SGV, bool ForDefinition);
499 bool shouldLink(GlobalValue *DGV, GlobalValue &SGV);
519 GlobalValue *copyIndirectSymbolProto(const GlobalValue *SGV);
584 Value *GlobalValueMaterializer::materialize(Value *SGV) { in materialize() argument
585 return TheIRLinker.materialize(SGV, false); in materialize()
588 Value *LocalValueMaterializer::materialize(Value *SGV) { in materialize() argument
589 return TheIRLinker.materialize(SGV, true); in materialize()
593 auto *SGV = dyn_cast<GlobalValue>(V); in materialize() local
594 if (!SGV) in materialize()
601 if (SGV->getParent() != &DstM && SGV->getParent() != SrcM.get()) in materialize()
604 Expected<Constant *> NewProto = linkGlobalValueProto(SGV, ForIndirectSymbol); in materialize()
641 if ((ForIndirectSymbol && ValueMap.lookup(SGV) == New) || in materialize()
642 (!ForIndirectSymbol && IndirectSymbolValueMap.lookup(SGV) == New)) in materialize()
645 if (ForIndirectSymbol || shouldLink(New, *SGV)) in materialize()
646 setError(linkGlobalValueBody(*New, *SGV)); in materialize()
702 GlobalValue *IRLinker::copyIndirectSymbolProto(const GlobalValue *SGV) { in copyIndirectSymbolProto() argument
705 auto *Ty = TypeMap.get(SGV->getValueType()); in copyIndirectSymbolProto()
707 if (auto *GA = dyn_cast<GlobalAlias>(SGV)) { in copyIndirectSymbolProto()
708 auto *DGA = GlobalAlias::create(Ty, SGV->getAddressSpace(), in copyIndirectSymbolProto()
710 SGV->getName(), &DstM); in copyIndirectSymbolProto()
715 if (auto *GI = dyn_cast<GlobalIFunc>(SGV)) { in copyIndirectSymbolProto()
716 auto *DGI = GlobalIFunc::create(Ty, SGV->getAddressSpace(), in copyIndirectSymbolProto()
718 SGV->getName(), nullptr, &DstM); in copyIndirectSymbolProto()
726 GlobalValue *IRLinker::copyGlobalValueProto(const GlobalValue *SGV, in copyGlobalValueProto() argument
729 if (auto *SGVar = dyn_cast<GlobalVariable>(SGV)) { in copyGlobalValueProto()
731 } else if (auto *SF = dyn_cast<Function>(SGV)) { in copyGlobalValueProto()
735 NewGV = copyIndirectSymbolProto(SGV); in copyGlobalValueProto()
736 else if (SGV->getValueType()->isFunctionTy()) in copyGlobalValueProto()
738 Function::Create(cast<FunctionType>(TypeMap.get(SGV->getValueType())), in copyGlobalValueProto()
739 GlobalValue::ExternalLinkage, SGV->getAddressSpace(), in copyGlobalValueProto()
740 SGV->getName(), &DstM); in copyGlobalValueProto()
743 new GlobalVariable(DstM, TypeMap.get(SGV->getValueType()), in copyGlobalValueProto()
745 /*init*/ nullptr, SGV->getName(), in copyGlobalValueProto()
747 SGV->getThreadLocalMode(), SGV->getAddressSpace()); in copyGlobalValueProto()
751 NewGV->setLinkage(SGV->getLinkage()); in copyGlobalValueProto()
752 else if (SGV->hasExternalWeakLinkage()) in copyGlobalValueProto()
757 if (isa<GlobalVariable>(SGV) || SGV->isDeclaration()) { in copyGlobalValueProto()
758 NewGO->copyMetadata(cast<GlobalObject>(SGV), 0); in copyGlobalValueProto()
759 if (SGV->isDeclaration() && NewGO->hasMetadata()) in copyGlobalValueProto()
789 for (GlobalValue &SGV : SrcM->globals()) { in computeTypeMapping()
790 GlobalValue *DGV = getLinkedToGlobal(&SGV); in computeTypeMapping()
794 if (!DGV->hasAppendingLinkage() || !SGV.hasAppendingLinkage()) { in computeTypeMapping()
795 TypeMap.addTypeMapping(DGV->getType(), SGV.getType()); in computeTypeMapping()
801 ArrayType *SAT = cast<ArrayType>(SGV.getValueType()); in computeTypeMapping()
805 for (GlobalValue &SGV : *SrcM) in computeTypeMapping()
806 if (GlobalValue *DGV = getLinkedToGlobal(&SGV)) { in computeTypeMapping()
807 if (DGV->getType() == SGV.getType()) { in computeTypeMapping()
816 TypeMap.addTypeMapping(DGV->getType(), SGV.getType()); in computeTypeMapping()
819 for (GlobalValue &SGV : SrcM->aliases()) in computeTypeMapping()
820 if (GlobalValue *DGV = getLinkedToGlobal(&SGV)) in computeTypeMapping()
821 TypeMap.addTypeMapping(DGV->getType(), SGV.getType()); in computeTypeMapping()
998 bool IRLinker::shouldLink(GlobalValue *DGV, GlobalValue &SGV) { in shouldLink() argument
999 if (ValuesToLink.count(&SGV) || SGV.hasLocalLinkage()) in shouldLink()
1005 if (SGV.isDeclaration() || DoneLinkingBodies) in shouldLink()
1012 AddLazyFor(SGV, [this, &LazilyAdded](GlobalValue &GV) { in shouldLink()
1019 Expected<Constant *> IRLinker::linkGlobalValueProto(GlobalValue *SGV, in linkGlobalValueProto() argument
1021 GlobalValue *DGV = getLinkedToGlobal(SGV); in linkGlobalValueProto()
1023 bool ShouldLink = shouldLink(DGV, *SGV); in linkGlobalValueProto()
1027 auto I = ValueMap.find(SGV); in linkGlobalValueProto()
1031 I = IndirectSymbolValueMap.find(SGV); in linkGlobalValueProto()
1040 if (SGV->hasAppendingLinkage() || (DGV && DGV->hasAppendingLinkage())) in linkGlobalValueProto()
1042 cast<GlobalVariable>(SGV)); in linkGlobalValueProto()
1055 NewGV = copyGlobalValueProto(SGV, ShouldLink || ForIndirectSymbol); in linkGlobalValueProto()
1075 forceRenaming(NewGV, SGV->getName()); in linkGlobalValueProto()
1078 if (const Comdat *SC = SGV->getComdat()) { in linkGlobalValueProto()
1096 if (DGV && NewGV != SGV) { in linkGlobalValueProto()
1098 NewGV, TypeMap.get(SGV->getType())); in linkGlobalValueProto()