Lines Matching defs:SGV

454   GlobalValue *copyGlobalValueProto(const GlobalValue *SGV, bool ForDefinition);
495 /// Given the GlobaValue \p SGV in the source module, and the matching
496 /// GlobalValue \p DGV (if any), return true if the linker will pull \p SGV
500 bool shouldLink(GlobalValue *DGV, GlobalValue &SGV);
520 GlobalValue *copyIndirectSymbolProto(const GlobalValue *SGV);
585 Value *GlobalValueMaterializer::materialize(Value *SGV) {
586 return TheIRLinker.materialize(SGV, false);
589 Value *LocalValueMaterializer::materialize(Value *SGV) {
590 return TheIRLinker.materialize(SGV, true);
594 auto *SGV = dyn_cast<GlobalValue>(V);
595 if (!SGV)
602 if (SGV->getParent() != &DstM && SGV->getParent() != SrcM.get())
605 Expected<Constant *> NewProto = linkGlobalValueProto(SGV, ForIndirectSymbol);
642 if ((ForIndirectSymbol && ValueMap.lookup(SGV) == New) ||
643 (!ForIndirectSymbol && IndirectSymbolValueMap.lookup(SGV) == New))
646 if (ForIndirectSymbol || shouldLink(New, *SGV))
647 setError(linkGlobalValueBody(*New, *SGV));
704 GlobalValue *IRLinker::copyIndirectSymbolProto(const GlobalValue *SGV) {
707 auto *Ty = TypeMap.get(SGV->getValueType());
709 if (auto *GA = dyn_cast<GlobalAlias>(SGV)) {
710 auto *DGA = GlobalAlias::create(Ty, SGV->getAddressSpace(),
712 SGV->getName(), &DstM);
717 if (auto *GI = dyn_cast<GlobalIFunc>(SGV)) {
718 auto *DGI = GlobalIFunc::create(Ty, SGV->getAddressSpace(),
720 SGV->getName(), nullptr, &DstM);
728 GlobalValue *IRLinker::copyGlobalValueProto(const GlobalValue *SGV,
731 if (auto *SGVar = dyn_cast<GlobalVariable>(SGV)) {
733 } else if (auto *SF = dyn_cast<Function>(SGV)) {
737 NewGV = copyIndirectSymbolProto(SGV);
738 else if (SGV->getValueType()->isFunctionTy())
740 Function::Create(cast<FunctionType>(TypeMap.get(SGV->getValueType())),
741 GlobalValue::ExternalLinkage, SGV->getAddressSpace(),
742 SGV->getName(), &DstM);
745 new GlobalVariable(DstM, TypeMap.get(SGV->getValueType()),
747 /*init*/ nullptr, SGV->getName(),
749 SGV->getThreadLocalMode(), SGV->getAddressSpace());
753 NewGV->setLinkage(SGV->getLinkage());
754 else if (SGV->hasExternalWeakLinkage())
759 if (isa<GlobalVariable>(SGV) || SGV->isDeclaration()) {
760 NewGO->copyMetadata(cast<GlobalObject>(SGV), 0);
761 if (SGV->isDeclaration() && NewGO->hasMetadata())
791 for (GlobalValue &SGV : SrcM->globals()) {
792 GlobalValue *DGV = getLinkedToGlobal(&SGV);
796 if (!DGV->hasAppendingLinkage() || !SGV.hasAppendingLinkage()) {
797 TypeMap.addTypeMapping(DGV->getType(), SGV.getType());
803 ArrayType *SAT = cast<ArrayType>(SGV.getValueType());
807 for (GlobalValue &SGV : *SrcM)
808 if (GlobalValue *DGV = getLinkedToGlobal(&SGV)) {
809 if (DGV->getType() == SGV.getType()) {
810 // If the types of DGV and SGV are the same, it means that DGV is from
818 TypeMap.addTypeMapping(DGV->getType(), SGV.getType());
821 for (GlobalValue &SGV : SrcM->aliases())
822 if (GlobalValue *DGV = getLinkedToGlobal(&SGV))
823 TypeMap.addTypeMapping(DGV->getType(), SGV.getType());
1000 bool IRLinker::shouldLink(GlobalValue *DGV, GlobalValue &SGV) {
1001 if (ValuesToLink.count(&SGV) || SGV.hasLocalLinkage())
1007 if (SGV.isDeclaration() || DoneLinkingBodies)
1014 AddLazyFor(SGV, [this, &LazilyAdded](GlobalValue &GV) {
1021 Expected<Constant *> IRLinker::linkGlobalValueProto(GlobalValue *SGV,
1023 GlobalValue *DGV = getLinkedToGlobal(SGV);
1025 bool ShouldLink = shouldLink(DGV, *SGV);
1029 auto I = ValueMap.find(SGV);
1033 I = IndirectSymbolValueMap.find(SGV);
1042 if (SGV->hasAppendingLinkage() || (DGV && DGV->hasAppendingLinkage()))
1044 cast<GlobalVariable>(SGV));
1057 NewGV = copyGlobalValueProto(SGV, ShouldLink || ForIndirectSymbol);
1077 forceRenaming(NewGV, SGV->getName());
1080 if (const Comdat *SC = SGV->getComdat()) {
1095 // containing a GV from the source module, in which case SGV will be
1098 if (DGV && NewGV != SGV) {
1100 NewGV, TypeMap.get(SGV->getType()));