Lines Matching refs:SGV
446 GlobalValue *copyGlobalValueProto(const GlobalValue *SGV, bool ForDefinition);
492 bool shouldLink(GlobalValue *DGV, GlobalValue &SGV);
512 GlobalValue *copyIndirectSymbolProto(const GlobalValue *SGV);
574 Value *GlobalValueMaterializer::materialize(Value *SGV) { in materialize() argument
575 return TheIRLinker.materialize(SGV, false); in materialize()
578 Value *LocalValueMaterializer::materialize(Value *SGV) { in materialize() argument
579 return TheIRLinker.materialize(SGV, true); in materialize()
583 auto *SGV = dyn_cast<GlobalValue>(V); in materialize() local
584 if (!SGV) in materialize()
591 if (SGV->getParent() != &DstM && SGV->getParent() != SrcM.get()) in materialize()
594 Expected<Constant *> NewProto = linkGlobalValueProto(SGV, ForIndirectSymbol); in materialize()
631 if ((ForIndirectSymbol && ValueMap.lookup(SGV) == New) || in materialize()
632 (!ForIndirectSymbol && IndirectSymbolValueMap.lookup(SGV) == New)) in materialize()
635 if (ForIndirectSymbol || shouldLink(New, *SGV)) in materialize()
636 setError(linkGlobalValueBody(*New, *SGV)); in materialize()
691 GlobalValue *IRLinker::copyIndirectSymbolProto(const GlobalValue *SGV) { in copyIndirectSymbolProto() argument
694 auto *Ty = TypeMap.get(SGV->getValueType()); in copyIndirectSymbolProto()
696 if (auto *GA = dyn_cast<GlobalAlias>(SGV)) { in copyIndirectSymbolProto()
697 auto *DGA = GlobalAlias::create(Ty, SGV->getAddressSpace(), in copyIndirectSymbolProto()
699 SGV->getName(), &DstM); in copyIndirectSymbolProto()
704 if (auto *GI = dyn_cast<GlobalIFunc>(SGV)) { in copyIndirectSymbolProto()
705 auto *DGI = GlobalIFunc::create(Ty, SGV->getAddressSpace(), in copyIndirectSymbolProto()
707 SGV->getName(), nullptr, &DstM); in copyIndirectSymbolProto()
715 GlobalValue *IRLinker::copyGlobalValueProto(const GlobalValue *SGV, in copyGlobalValueProto() argument
718 if (auto *SGVar = dyn_cast<GlobalVariable>(SGV)) { in copyGlobalValueProto()
720 } else if (auto *SF = dyn_cast<Function>(SGV)) { in copyGlobalValueProto()
724 NewGV = copyIndirectSymbolProto(SGV); in copyGlobalValueProto()
725 else if (SGV->getValueType()->isFunctionTy()) in copyGlobalValueProto()
727 Function::Create(cast<FunctionType>(TypeMap.get(SGV->getValueType())), in copyGlobalValueProto()
728 GlobalValue::ExternalLinkage, SGV->getAddressSpace(), in copyGlobalValueProto()
729 SGV->getName(), &DstM); in copyGlobalValueProto()
732 new GlobalVariable(DstM, TypeMap.get(SGV->getValueType()), in copyGlobalValueProto()
734 /*init*/ nullptr, SGV->getName(), in copyGlobalValueProto()
736 SGV->getThreadLocalMode(), SGV->getAddressSpace()); in copyGlobalValueProto()
740 NewGV->setLinkage(SGV->getLinkage()); in copyGlobalValueProto()
741 else if (SGV->hasExternalWeakLinkage()) in copyGlobalValueProto()
746 if (isa<GlobalVariable>(SGV) || SGV->isDeclaration()) in copyGlobalValueProto()
747 NewGO->copyMetadata(cast<GlobalObject>(SGV), 0); in copyGlobalValueProto()
775 for (GlobalValue &SGV : SrcM->globals()) { in computeTypeMapping()
776 GlobalValue *DGV = getLinkedToGlobal(&SGV); in computeTypeMapping()
780 if (!DGV->hasAppendingLinkage() || !SGV.hasAppendingLinkage()) { in computeTypeMapping()
781 TypeMap.addTypeMapping(DGV->getType(), SGV.getType()); in computeTypeMapping()
787 ArrayType *SAT = cast<ArrayType>(SGV.getValueType()); in computeTypeMapping()
791 for (GlobalValue &SGV : *SrcM) in computeTypeMapping()
792 if (GlobalValue *DGV = getLinkedToGlobal(&SGV)) { in computeTypeMapping()
793 if (DGV->getType() == SGV.getType()) { in computeTypeMapping()
802 TypeMap.addTypeMapping(DGV->getType(), SGV.getType()); in computeTypeMapping()
805 for (GlobalValue &SGV : SrcM->aliases()) in computeTypeMapping()
806 if (GlobalValue *DGV = getLinkedToGlobal(&SGV)) in computeTypeMapping()
807 TypeMap.addTypeMapping(DGV->getType(), SGV.getType()); in computeTypeMapping()
981 bool IRLinker::shouldLink(GlobalValue *DGV, GlobalValue &SGV) { in shouldLink() argument
982 if (ValuesToLink.count(&SGV) || SGV.hasLocalLinkage()) in shouldLink()
988 if (SGV.isDeclaration() || DoneLinkingBodies) in shouldLink()
995 AddLazyFor(SGV, [this, &LazilyAdded](GlobalValue &GV) { in shouldLink()
1002 Expected<Constant *> IRLinker::linkGlobalValueProto(GlobalValue *SGV, in linkGlobalValueProto() argument
1004 GlobalValue *DGV = getLinkedToGlobal(SGV); in linkGlobalValueProto()
1006 bool ShouldLink = shouldLink(DGV, *SGV); in linkGlobalValueProto()
1010 auto I = ValueMap.find(SGV); in linkGlobalValueProto()
1014 I = IndirectSymbolValueMap.find(SGV); in linkGlobalValueProto()
1023 if (SGV->hasAppendingLinkage() || (DGV && DGV->hasAppendingLinkage())) in linkGlobalValueProto()
1025 cast<GlobalVariable>(SGV)); in linkGlobalValueProto()
1038 NewGV = copyGlobalValueProto(SGV, ShouldLink || ForIndirectSymbol); in linkGlobalValueProto()
1054 forceRenaming(NewGV, SGV->getName()); in linkGlobalValueProto()
1057 if (const Comdat *SC = SGV->getComdat()) { in linkGlobalValueProto()
1075 if (DGV && NewGV != SGV) { in linkGlobalValueProto()
1077 NewGV, TypeMap.get(SGV->getType())); in linkGlobalValueProto()