LinkModules.cpp revision 6d6c6d7d2ce42af78ffa4e84a30f14e4404f5985
1c834bbf55832c45f90b1163f920472fefbf77bc1Mikhail Glushenkov//===- lib/Linker/LinkModules.cpp - Module Linker Implementation ----------===// 2f976c856fcc5055f3fc7d9f070d72c2d027c1d9dMisha Brukman// 3b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell// The LLVM Compiler Infrastructure 4b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell// 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details. 7f976c856fcc5055f3fc7d9f070d72c2d027c1d9dMisha Brukman// 8b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell//===----------------------------------------------------------------------===// 952f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner// 1052f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner// This file implements the LLVM module linker. 1152f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner// 1252f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner//===----------------------------------------------------------------------===// 1352f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner 147cc371a7958c7a049c679a59023c3c8c83f6cc83Reid Spencer#include "llvm/Linker.h" 15adbc0b5287bf36893cdcae2440d48b3cb3489e38Chris Lattner#include "llvm/Constants.h" 16adbc0b5287bf36893cdcae2440d48b3cb3489e38Chris Lattner#include "llvm/DerivedTypes.h" 17f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner#include "llvm/Instructions.h" 185c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner#include "llvm/Module.h" 19d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling#include "llvm/ADT/DenseSet.h" 203ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola#include "llvm/ADT/Optional.h" 21d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling#include "llvm/ADT/SetVector.h" 22d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling#include "llvm/ADT/SmallPtrSet.h" 23cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling#include "llvm/Support/Debug.h" 241f6efa3996dd1929fbc129203ce5009b620e6969Michael J. Spencer#include "llvm/Support/Path.h" 25cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling#include "llvm/Support/raw_ostream.h" 26f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner#include "llvm/Transforms/Utils/Cloning.h" 2705ea54e8869a81b8dd846397175f218f97968907Dan Gohman#include "llvm/Transforms/Utils/ValueMapper.h" 280aaf2f63699f4c99a940abf81c4c9d912fa54356Duncan Sands#include <cctype> 29f7703df4968084c18c248c1feea9961c19a32e6aChris Lattnerusing namespace llvm; 30d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke 311afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 321afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner// TypeMap implementation. 331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 344c00e53b81de81ecf4ba0c4e287ea230c79e82aeChris Lattner 3562a81a1eba019ab570b002f8e1686494139785a1Chris Lattnernamespace { 361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerclass TypeMapTy : public ValueMapTypeRemapper { 371afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// MappedTypes - This is a mapping from a source type to a destination type 381afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// to use. 391afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DenseMap<Type*, Type*> MappedTypes; 401afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 411afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// SpeculativeTypes - When checking to see if two subgraphs are isomorphic, 421afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// we speculatively add types to MappedTypes, but keep track of them here in 431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// case we need to roll back. 441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SmallVector<Type*, 16> SpeculativeTypes; 451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4668910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner /// SrcDefinitionsToResolve - This is a list of non-opaque structs in the 4768910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner /// source module that are mapped to an opaque struct in the destination 4868910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner /// module. 4968910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner SmallVector<StructType*, 16> SrcDefinitionsToResolve; 5068910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner 5168910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner /// DstResolvedOpaqueTypes - This is the set of opaque types in the 5268910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner /// destination modules who are getting a body from the source module. 5368910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner SmallPtrSet<StructType*, 16> DstResolvedOpaqueTypes; 546d6c6d7d2ce42af78ffa4e84a30f14e4404f5985Bill Wendling 55fc196f9ee909ac35837f6f771a42aa0dec817584Chris Lattnerpublic: 561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// addTypeMapping - Indicate that the specified type in the destination 571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// module is conceptually equivalent to the specified type in the source 581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// module. 591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void addTypeMapping(Type *DstTy, Type *SrcTy); 601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// linkDefinedTypeBodies - Produce a body for an opaque type in the dest 621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// module from a type definition in the source module. 631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkDefinedTypeBodies(); 641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// get - Return the mapped type to use for the specified input type from the 661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// source module. 671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *get(Type *SrcTy); 681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner FunctionType *get(FunctionType *T) {return cast<FunctionType>(get((Type*)T));} 701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 71cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling /// dump - Dump out the type map for debugging purposes. 72cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling void dump() const { 73cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling for (DenseMap<Type*, Type*>::const_iterator 74cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling I = MappedTypes.begin(), E = MappedTypes.end(); I != E; ++I) { 75cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling dbgs() << "TypeMap: "; 76cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling I->first->dump(); 77cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling dbgs() << " => "; 78cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling I->second->dump(); 79cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling dbgs() << '\n'; 80cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling } 81cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling } 82cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling 831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerprivate: 841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *getImpl(Type *T); 851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// remapType - Implement the ValueMapTypeRemapper interface. 861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *remapType(Type *SrcTy) { 871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return get(SrcTy); 8862a81a1eba019ab570b002f8e1686494139785a1Chris Lattner } 891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool areTypesIsomorphic(Type *DstTy, Type *SrcTy); 911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner}; 921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 93eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid TypeMapTy::addTypeMapping(Type *DstTy, Type *SrcTy) { 951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *&Entry = MappedTypes[SrcTy]; 961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (Entry) return; 971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstTy == SrcTy) { 991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = DstTy; 1001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return; 10162a81a1eba019ab570b002f8e1686494139785a1Chris Lattner } 102601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 1031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Check to see if these types are recursively isomorphic and establish a 1041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // mapping between them if so. 105601c094734cc5920a4e937c74447dd6922770a2dBill Wendling if (!areTypesIsomorphic(DstTy, SrcTy)) { 1061afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Oops, they aren't isomorphic. Just discard this request by rolling out 1071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // any speculative mappings we've established. 1081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (unsigned i = 0, e = SpeculativeTypes.size(); i != e; ++i) 1091afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner MappedTypes.erase(SpeculativeTypes[i]); 110601c094734cc5920a4e937c74447dd6922770a2dBill Wendling } 1111afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SpeculativeTypes.clear(); 11262a81a1eba019ab570b002f8e1686494139785a1Chris Lattner} 11362a81a1eba019ab570b002f8e1686494139785a1Chris Lattner 1141afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// areTypesIsomorphic - Recursively walk this pair of types, returning true 1151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// if they are isomorphic, false if they are not. 1161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool TypeMapTy::areTypesIsomorphic(Type *DstTy, Type *SrcTy) { 1171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Two types with differing kinds are clearly not isomorphic. 1181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstTy->getTypeID() != SrcTy->getTypeID()) return false; 1191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If we have an entry in the MappedTypes table, then we have our answer. 1211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *&Entry = MappedTypes[SrcTy]; 1221afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (Entry) 1231afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return Entry == DstTy; 1241afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1251afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Two identical types are clearly isomorphic. Remember this 1261afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // non-speculatively. 1271afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstTy == SrcTy) { 1281afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = DstTy; 12956539659eb1b192d493aa333b60213889129b9f1Chris Lattner return true; 130e76c57ad467ed57f09f2a3ef51628d4b6eb2b304Chris Lattner } 131601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 1321afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Okay, we have two types with identical kinds that we haven't seen before. 1331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If this is an opaque struct type, special case it. 1351afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (StructType *SSTy = dyn_cast<StructType>(SrcTy)) { 1361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Mapping an opaque type to any struct, just keep the dest struct. 1371afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (SSTy->isOpaque()) { 1381afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = DstTy; 1391afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SpeculativeTypes.push_back(SrcTy); 140f6f4f7a149e2864cc0441afcbed5fd99ff4b9587Chris Lattner return true; 1411afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 142eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 14368910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // Mapping a non-opaque source type to an opaque dest. If this is the first 14468910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // type that we're mapping onto this destination type then we succeed. Keep 14568910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // the dest, but fill it in later. This doesn't need to be speculative. If 14668910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // this is the second (different) type that we're trying to map onto the 14768910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // same opaque type then we fail. 1481afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (cast<StructType>(DstTy)->isOpaque()) { 14968910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // We can only map one source type onto the opaque destination type. 15068910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner if (!DstResolvedOpaqueTypes.insert(cast<StructType>(DstTy))) 15168910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner return false; 15268910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner SrcDefinitionsToResolve.push_back(SSTy); 1531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = DstTy; 1541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 155a4477f9b31ce0b6fadc5365ff9355679c1ecb954Chris Lattner } 156e3092c94ad2e3af96f37a0a8186149acbbd9700aChris Lattner } 1571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If the number of subtypes disagree between the two types, then we fail. 1591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (SrcTy->getNumContainedTypes() != DstTy->getNumContainedTypes()) 1601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Fail if any of the extra properties (e.g. array size) of the type disagree. 1631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (isa<IntegerType>(DstTy)) 1641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; // bitwidth disagrees. 1651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (PointerType *PT = dyn_cast<PointerType>(DstTy)) { 1661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (PT->getAddressSpace() != cast<PointerType>(SrcTy)->getAddressSpace()) 1671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1681a31f3b90c012b067f8509546e1e037051e6482dChris Lattner 1691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } else if (FunctionType *FT = dyn_cast<FunctionType>(DstTy)) { 1701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (FT->isVarArg() != cast<FunctionType>(SrcTy)->isVarArg()) 1711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } else if (StructType *DSTy = dyn_cast<StructType>(DstTy)) { 1731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner StructType *SSTy = cast<StructType>(SrcTy); 1741bcbf8582e94eee6f151e5e2db2d04f417abf5f7Chris Lattner if (DSTy->isLiteral() != SSTy->isLiteral() || 1751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DSTy->isPacked() != SSTy->isPacked()) 1761afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } else if (ArrayType *DATy = dyn_cast<ArrayType>(DstTy)) { 1781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DATy->getNumElements() != cast<ArrayType>(SrcTy)->getNumElements()) 1791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } else if (VectorType *DVTy = dyn_cast<VectorType>(DstTy)) { 1811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DVTy->getNumElements() != cast<ArrayType>(SrcTy)->getNumElements()) 1821afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 183f6f4f7a149e2864cc0441afcbed5fd99ff4b9587Chris Lattner } 184eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 1851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise, we speculate that these two types will line up and recursively 1861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // check the subelements. 1871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = DstTy; 1881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SpeculativeTypes.push_back(SrcTy); 1891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 190601c094734cc5920a4e937c74447dd6922770a2dBill Wendling for (unsigned i = 0, e = SrcTy->getNumContainedTypes(); i != e; ++i) 191601c094734cc5920a4e937c74447dd6922770a2dBill Wendling if (!areTypesIsomorphic(DstTy->getContainedType(i), 192601c094734cc5920a4e937c74447dd6922770a2dBill Wendling SrcTy->getContainedType(i))) 1931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 1941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If everything seems to have lined up, then everything is great. 1961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 1971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 198eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 1991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// linkDefinedTypeBodies - Produce a body for an opaque type in the dest 2001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// module from a type definition in the source module. 2011afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid TypeMapTy::linkDefinedTypeBodies() { 2021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SmallVector<Type*, 16> Elements; 2031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SmallString<16> TmpName; 2041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Note that processing entries in this loop (calling 'get') can add new 20668910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner // entries to the SrcDefinitionsToResolve vector. 20768910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner while (!SrcDefinitionsToResolve.empty()) { 20868910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner StructType *SrcSTy = SrcDefinitionsToResolve.pop_back_val(); 2091afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner StructType *DstSTy = cast<StructType>(MappedTypes[SrcSTy]); 2101afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2111afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // TypeMap is a many-to-one mapping, if there were multiple types that 2121afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // provide a body for DstSTy then previous iterations of this loop may have 2131afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // already handled it. Just ignore this case. 2141afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!DstSTy->isOpaque()) continue; 2151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert(!SrcSTy->isOpaque() && "Not resolving a definition?"); 2161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Map the body of the source type over to a new body for the dest type. 2181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Elements.resize(SrcSTy->getNumElements()); 2191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (unsigned i = 0, e = Elements.size(); i != e; ++i) 2201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Elements[i] = getImpl(SrcSTy->getElementType(i)); 2211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2221afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstSTy->setBody(Elements, SrcSTy->isPacked()); 2231afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2241afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If DstSTy has no name or has a longer name than STy, then viciously steal 2251afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // STy's name. 2261afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcSTy->hasName()) continue; 2271afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner StringRef SrcName = SrcSTy->getName(); 2281afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2291afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!DstSTy->hasName() || DstSTy->getName().size() > SrcName.size()) { 2301afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TmpName.insert(TmpName.end(), SrcName.begin(), SrcName.end()); 2311afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SrcSTy->setName(""); 2321afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstSTy->setName(TmpName.str()); 2331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TmpName.clear(); 2341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 235f976c856fcc5055f3fc7d9f070d72c2d027c1d9dMisha Brukman } 23668910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner 23768910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner DstResolvedOpaqueTypes.clear(); 238e76c57ad467ed57f09f2a3ef51628d4b6eb2b304Chris Lattner} 239e76c57ad467ed57f09f2a3ef51628d4b6eb2b304Chris Lattner 240601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 2411afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// get - Return the mapped type to use for the specified input type from the 2421afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// source module. 2431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris LattnerType *TypeMapTy::get(Type *Ty) { 2441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *Result = getImpl(Ty); 2451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If this caused a reference to any struct type, resolve it before returning. 24768910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner if (!SrcDefinitionsToResolve.empty()) 2481afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner linkDefinedTypeBodies(); 2491afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return Result; 2501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 251e76c57ad467ed57f09f2a3ef51628d4b6eb2b304Chris Lattner 2521afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// getImpl - This is the recursive version of get(). 2531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris LattnerType *TypeMapTy::getImpl(Type *Ty) { 2541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If we already have an entry for this type, return it. 2551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type **Entry = &MappedTypes[Ty]; 2561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (*Entry) return *Entry; 257601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 2581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If this is not a named struct type, then just map all of the elements and 2591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // then rebuild the type from inside out. 2601bcbf8582e94eee6f151e5e2db2d04f417abf5f7Chris Lattner if (!isa<StructType>(Ty) || cast<StructType>(Ty)->isLiteral()) { 2611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If there are no element types to map, then the type is itself. This is 2621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // true for the anonymous {} struct, things like 'float', integers, etc. 2631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (Ty->getNumContainedTypes() == 0) 2641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = Ty; 2651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Remap all of the elements, keeping track of whether any of them change. 2671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool AnyChange = false; 2681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SmallVector<Type*, 4> ElementTypes; 2691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ElementTypes.resize(Ty->getNumContainedTypes()); 2701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (unsigned i = 0, e = Ty->getNumContainedTypes(); i != e; ++i) { 2711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ElementTypes[i] = getImpl(Ty->getContainedType(i)); 2721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AnyChange |= ElementTypes[i] != Ty->getContainedType(i); 2731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 2741afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If we found our type while recursively processing stuff, just use it. 2761afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Entry = &MappedTypes[Ty]; 2771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (*Entry) return *Entry; 2781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If all of the element types mapped directly over, then the type is usable 2801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // as-is. 2811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!AnyChange) 2821afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = Ty; 2831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 2841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise, rebuild a modified type. 2851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner switch (Ty->getTypeID()) { 286858143816d43e58b17bfd11cb1b57afbd7f0f893Craig Topper default: llvm_unreachable("unknown derived type to remap"); 2871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner case Type::ArrayTyID: 2881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = ArrayType::get(ElementTypes[0], 2891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<ArrayType>(Ty)->getNumElements()); 2901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner case Type::VectorTyID: 2911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = VectorType::get(ElementTypes[0], 2921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<VectorType>(Ty)->getNumElements()); 2931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner case Type::PointerTyID: 2941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = PointerType::get(ElementTypes[0], 2951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<PointerType>(Ty)->getAddressSpace()); 2961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner case Type::FunctionTyID: 2971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = FunctionType::get(ElementTypes[0], 29839b5abf507b43da6b92f68b86406e0015ead18e9Frits van Bommel makeArrayRef(ElementTypes).slice(1), 2991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<FunctionType>(Ty)->isVarArg()); 3001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner case Type::StructTyID: 3011afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Note that this is only reached for anonymous structs. 3021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = StructType::get(Ty->getContext(), ElementTypes, 3031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<StructType>(Ty)->isPacked()); 3044c00e53b81de81ecf4ba0c4e287ea230c79e82aeChris Lattner } 3054c00e53b81de81ecf4ba0c4e287ea230c79e82aeChris Lattner } 3064c00e53b81de81ecf4ba0c4e287ea230c79e82aeChris Lattner 3071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise, this is an unmapped named struct. If the struct can be directly 3081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // mapped over, just use it as-is. This happens in a case when the linked-in 3091afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // module has something like: 3101afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // %T = type {%T*, i32} 3111afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // @GV = global %T* null 3121afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // where T does not exist at all in the destination module. 3131afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // 3141afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // The other case we watch for is when the type is not in the destination 3151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // module, but that it has to be rebuilt because it refers to something that 3161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // is already mapped. For example, if the destination module has: 3171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // %A = type { i32 } 3181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // and the source module has something like 3191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // %A' = type { i32 } 3201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // %B = type { %A'* } 3211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // @GV = global %B* null 3221afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // then we want to create a new type: "%B = type { %A*}" and have it take the 3231afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // pristine "%B" name from the source module. 3241afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // 3251afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // To determine which case this is, we have to recursively walk the type graph 3261afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // speculating that we'll be able to reuse it unmodified. Only if this is 3271afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // safe would we map the entire thing over. Because this is an optimization, 3281afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // and is not required for the prettiness of the linked module, we just skip 3291afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // it and always rebuild a type here. 3301afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner StructType *STy = cast<StructType>(Ty); 3311afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3321afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If the type is opaque, we can just use it directly. 3331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (STy->isOpaque()) 3341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return *Entry = STy; 335601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 3361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise we create a new type and resolve its body later. This will be 3371afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // resolved by the top level of get(). 33868910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner SrcDefinitionsToResolve.push_back(STy); 33968910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner StructType *DTy = StructType::create(STy->getContext()); 34068910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner DstResolvedOpaqueTypes.insert(DTy); 34168910509fdd638727ce2f244ab7c0e4346671de1Chris Lattner return *Entry = DTy; 3421afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 3432f6bb2bce13084dfc4c8acf47f9eae0578267aaaChris Lattner 344601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 345601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 3461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 3471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner// ModuleLinker implementation. 3481afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 3494c00e53b81de81ecf4ba0c4e287ea230c79e82aeChris Lattner 3501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnernamespace { 3511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// ModuleLinker - This is an implementation class for the LinkModules 3521afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// function, which is the entrypoint for this file. 3531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner class ModuleLinker { 3541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Module *DstM, *SrcM; 3551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMapTy TypeMap; 3571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// ValueMap - Mapping of values from what they used to be in Src, to what 3591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// they are now in DstM. ValueToValueMapTy is a ValueMap, which involves 3601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// some overhead due to the use of Value handles which the Linker doesn't 3611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// actually need, but this allows us to reuse the ValueMapper code. 3621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueToValueMapTy ValueMap; 3631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner struct AppendingVarInfo { 3651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalVariable *NewGV; // New aggregate global in dest module. 3661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Constant *DstInit; // Old initializer from dest module. 3671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Constant *SrcInit; // Old initializer from src module. 3681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner }; 3691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner std::vector<AppendingVarInfo> AppendingVars; 3711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 372f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner unsigned Mode; // Mode to treat source module. 373f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 374f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Set of items not to link in from source. 375f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner SmallPtrSet<const Value*, 16> DoNotLinkFromSource; 376f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 3779af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Vector of functions to lazily link in. 3789af37a3de8c8688adae383471379f0216287ce28Tanya Lattner std::vector<Function*> LazilyLinkFunctions; 3799af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 3801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner public: 3811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner std::string ErrorMsg; 3821afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 383f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner ModuleLinker(Module *dstM, Module *srcM, unsigned mode) 384f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner : DstM(dstM), SrcM(srcM), Mode(mode) { } 3851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool run(); 3871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner private: 3891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// emitError - Helper method for setting a message and returning an error 3901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// code. 3911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool emitError(const Twine &Message) { 3921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ErrorMsg = Message.str(); 3931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 3941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 3951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 3961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// getLinkageResult - This analyzes the two global values and determines 3971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// what the result will look like in the destination module. 3981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool getLinkageResult(GlobalValue *Dest, const GlobalValue *Src, 3993ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::LinkageTypes <, 4003ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes &Vis, 4013ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola bool &LinkFromSrc); 4021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// getLinkedToGlobal - Given a global in the source module, return the 4041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /// global in the destination module that is being linked to, if any. 4051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *getLinkedToGlobal(GlobalValue *SrcGV) { 4061afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If the source has no name it can't link. If it has local linkage, 4071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // there is no name match-up going on. 4081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcGV->hasName() || SrcGV->hasLocalLinkage()) 4091afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return 0; 410601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 4111afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise see if we have a match in the destination module's symtab. 4121afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *DGV = DstM->getNamedValue(SrcGV->getName()); 4131afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV == 0) return 0; 414601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 4151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If we found a global with the same name in the dest module, but it has 4161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // internal linkage, we are really not doing any linkage here. 4171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV->hasLocalLinkage()) 4181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return 0; 4191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Otherwise, we do in fact link to the destination global. 4211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return DGV; 4221afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 4231afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4241afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void computeTypeMapping(); 425d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling bool categorizeModuleFlagNodes(const NamedMDNode *ModFlags, 426d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, MDNode*> &ErrorNode, 427d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, MDNode*> &WarningNode, 428d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, MDNode*> &OverrideNode, 429d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, 430d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling SmallSetVector<MDNode*, 8> > &RequireNodes, 431d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling SmallSetVector<MDString*, 16> &SeenIDs); 4321afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool linkAppendingVarProto(GlobalVariable *DstGV, GlobalVariable *SrcGV); 4341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool linkGlobalProto(GlobalVariable *SrcGV); 4351afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool linkFunctionProto(Function *SrcF); 4361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool linkAliasProto(GlobalAlias *SrcA); 437d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling bool linkModuleFlagsMetadata(); 4381afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4391afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkAppendingVarInit(const AppendingVarInfo &AVI); 4401afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkGlobalInits(); 4411afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkFunctionBody(Function *Dst, Function *Src); 4421afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkAliasBodies(); 4431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner void linkNamedMDNodes(); 4441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner }; 445601c094734cc5920a4e937c74447dd6922770a2dBill Wendling} 446601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 4471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// forceRenaming - The LLVM SymbolTable class autorenames globals that conflict 4488bef0373f1b8fab20b9acd277377ca01d72bac7eReid Spencer/// in the symbol table. This is good for all clients except for us. Go 4498bef0373f1b8fab20b9acd277377ca01d72bac7eReid Spencer/// through the trouble to force this back. 4501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerstatic void forceRenaming(GlobalValue *GV, StringRef Name) { 4511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If the global doesn't force its name or if it already has the right name, 4521afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // there is nothing for us to do. 4531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (GV->hasLocalLinkage() || GV->getName() == Name) 4541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return; 4551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Module *M = GV->getParent(); 457c003628a612d3687fb77088a5894314210a65385Chris Lattner 458c003628a612d3687fb77088a5894314210a65385Chris Lattner // If there is a conflict, rename the conflict. 4591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (GlobalValue *ConflictGV = M->getNamedValue(Name)) { 46033f294930e0affa51c3818405741abd80cc90316Chris Lattner GV->takeName(ConflictGV); 46133f294930e0affa51c3818405741abd80cc90316Chris Lattner ConflictGV->setName(Name); // This will cause ConflictGV to get renamed 4621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert(ConflictGV->getName() != Name && "forceRenaming didn't work"); 46333f294930e0affa51c3818405741abd80cc90316Chris Lattner } else { 46433f294930e0affa51c3818405741abd80cc90316Chris Lattner GV->setName(Name); // Force the name back 465ef9b9a793949469cdaa4ab6d0173136229dcab7bReid Spencer } 466ef9b9a793949469cdaa4ab6d0173136229dcab7bReid Spencer} 467ef9b9a793949469cdaa4ab6d0173136229dcab7bReid Spencer 468cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// copyGVAttributes - copy additional attributes (those not needed to construct 469eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov/// a GlobalValue) from the SrcGV to the DestGV. 470cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendlingstatic void copyGVAttributes(GlobalValue *DestGV, const GlobalValue *SrcGV) { 47128c3cff8250b3fe2adc6479306fe7dbdb48a1bdbDuncan Sands // Use the maximum alignment, rather than just copying the alignment of SrcGV. 47228c3cff8250b3fe2adc6479306fe7dbdb48a1bdbDuncan Sands unsigned Alignment = std::max(DestGV->getAlignment(), SrcGV->getAlignment()); 47328c3cff8250b3fe2adc6479306fe7dbdb48a1bdbDuncan Sands DestGV->copyAttributesFrom(SrcGV); 47428c3cff8250b3fe2adc6479306fe7dbdb48a1bdbDuncan Sands DestGV->setAlignment(Alignment); 4751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 4761afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner forceRenaming(DestGV, SrcGV->getName()); 477c003628a612d3687fb77088a5894314210a65385Chris Lattner} 478c003628a612d3687fb77088a5894314210a65385Chris Lattner 4793ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindolastatic bool isLessConstraining(GlobalValue::VisibilityTypes a, 4803ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes b) { 4813ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (a == GlobalValue::HiddenVisibility) 4823ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola return false; 4833ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (b == GlobalValue::HiddenVisibility) 4843ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola return true; 4853ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (a == GlobalValue::ProtectedVisibility) 4863ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola return false; 4873ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (b == GlobalValue::ProtectedVisibility) 4883ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola return true; 4893ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola return false; 4903ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola} 4913ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 4921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// getLinkageResult - This analyzes the two global values and determines what 493aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner/// the result will look like in the destination module. In particular, it 4943ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola/// computes the resultant linkage type and visibility, computes whether the 4953ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola/// global in the source should be copied over to the destination (replacing 4963ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola/// the existing one), and computes whether this linkage is an error or not. 4971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::getLinkageResult(GlobalValue *Dest, const GlobalValue *Src, 4983ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::LinkageTypes <, 4993ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes &Vis, 5001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool &LinkFromSrc) { 5011afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert(Dest && "Must have two globals being queried"); 5021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert(!Src->hasLocalLinkage() && 503aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner "If Src has internal linkage, Dest shouldn't be set!"); 5041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 5058895316d0489e2353c0dce289b49f5cdd41085d7Peter Collingbourne bool SrcIsDeclaration = Src->isDeclaration() && !Src->isMaterializable(); 506f84c59d1100af416a70e475eb25741e27f3bb832Chris Lattner bool DestIsDeclaration = Dest->isDeclaration(); 5071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 5081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (SrcIsDeclaration) { 5092b48ef0450944c2c46633aec9baf6be835a3b503Anton Korobeynikov // If Src is external or if both Src & Dest are external.. Just link the 510aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner // external globals, we aren't adding anything. 511b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov if (Src->hasDLLImportLinkage()) { 51278ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov // If one of GVs has DLLImport linkage, result should be dllimport'ed. 5131afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DestIsDeclaration) { 514b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov LinkFromSrc = true; 515b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov LT = Src->getLinkage(); 516eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov } 5178753c447a5f8eec1421331c40ffbb72c6d411f78Andrew Lenharth } else if (Dest->hasExternalWeakLinkage()) { 518667d4b8de6dea70195ff12ef39a4deebffa2f5c7Duncan Sands // If the Dest is weak, use the source linkage. 5198753c447a5f8eec1421331c40ffbb72c6d411f78Andrew Lenharth LinkFromSrc = true; 5208753c447a5f8eec1421331c40ffbb72c6d411f78Andrew Lenharth LT = Src->getLinkage(); 521b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov } else { 522b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov LinkFromSrc = false; 523b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov LT = Dest->getLinkage(); 524b74ed07bfd3af42331b1964c24c39912610a08f4Anton Korobeynikov } 5251afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } else if (DestIsDeclaration && !Dest->hasDLLImportLinkage()) { 526aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner // If Dest is external but Src is not: 527aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LinkFromSrc = true; 528aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LT = Src->getLinkage(); 529a05ef5e107943478ad02bc0cd5170a3894076bc4Duncan Sands } else if (Src->isWeakForLinker()) { 530aafce77b17d340aace52bcd49d1944109d82f14aDale Johannesen // At this point we know that Dest has LinkOnce, External*, Weak, Common, 531aafce77b17d340aace52bcd49d1944109d82f14aDale Johannesen // or DLL* linkage. 532266c7bbbbcc4b326dea82e577de1a415d6acc23eChris Lattner if (Dest->hasExternalWeakLinkage() || 533266c7bbbbcc4b326dea82e577de1a415d6acc23eChris Lattner Dest->hasAvailableExternallyLinkage() || 534266c7bbbbcc4b326dea82e577de1a415d6acc23eChris Lattner (Dest->hasLinkOnceLinkage() && 535266c7bbbbcc4b326dea82e577de1a415d6acc23eChris Lattner (Src->hasWeakLinkage() || Src->hasCommonLinkage()))) { 536aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LinkFromSrc = true; 537aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LT = Src->getLinkage(); 538aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner } else { 539aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LinkFromSrc = false; 540aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner LT = Dest->getLinkage(); 541aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner } 542a05ef5e107943478ad02bc0cd5170a3894076bc4Duncan Sands } else if (Dest->isWeakForLinker()) { 54378ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov // At this point we know that Src has External* or DLL* linkage. 54478ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov if (Src->hasExternalWeakLinkage()) { 54578ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov LinkFromSrc = false; 54678ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov LT = Dest->getLinkage(); 54778ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov } else { 54878ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov LinkFromSrc = true; 54978ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov LT = GlobalValue::ExternalLinkage; 55078ee7b78c3c47b71c4b7a1475438d6574216a64bAnton Korobeynikov } 551aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner } else { 5521afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert((Dest->hasExternalLinkage() || Dest->hasDLLImportLinkage() || 5531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Dest->hasDLLExportLinkage() || Dest->hasExternalWeakLinkage()) && 5541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner (Src->hasExternalLinkage() || Src->hasDLLImportLinkage() || 5551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Src->hasDLLExportLinkage() || Src->hasExternalWeakLinkage()) && 556aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner "Unexpected linkage type!"); 5571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError("Linking globals named '" + Src->getName() + 558aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner "': symbol multiply defined!"); 559aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner } 5609cd3ccf5065a8a139e458d016c88a8512471598bAnton Korobeynikov 5613ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola // Compute the visibility. We follow the rules in the System V Application 5623ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola // Binary Interface. 5633ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola Vis = isLessConstraining(Src->getVisibility(), Dest->getVisibility()) ? 5643ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola Dest->getVisibility() : Src->getVisibility(); 565aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner return false; 566aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner} 5675c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 5681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// computeTypeMapping - Loop over all of the linked values to compute type 5691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// mappings. For example, if we link "extern Foo *x" and "Foo *x = NULL", then 5701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// we have two struct types 'Foo' but one got renamed when the module was 5711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// loaded into the same LLVMContext. 5721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::computeTypeMapping() { 5731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Incorporate globals. 5741afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::global_iterator I = SrcM->global_begin(), 5751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner E = SrcM->global_end(); I != E; ++I) { 5761afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *DGV = getLinkedToGlobal(I); 5771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV == 0) continue; 5781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 5791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!DGV->hasAppendingLinkage() || !I->hasAppendingLinkage()) { 5801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMap.addTypeMapping(DGV->getType(), I->getType()); 5811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner continue; 5821afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 5831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 5841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Unify the element type of appending arrays. 5851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *DAT = cast<ArrayType>(DGV->getType()->getElementType()); 5861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *SAT = cast<ArrayType>(I->getType()->getElementType()); 5871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMap.addTypeMapping(DAT->getElementType(), SAT->getElementType()); 588ab67e705f59d567afded845465f358b8a66ab62eDevang Patel } 5891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 5901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Incorporate functions. 5911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::iterator I = SrcM->begin(), E = SrcM->end(); I != E; ++I) { 5921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (GlobalValue *DGV = getLinkedToGlobal(I)) 5931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMap.addTypeMapping(DGV->getType(), I->getType()); 5941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 595c68d127b2c5a233c5e3f9dd59ca4ab335419d9ddBill Wendling 596601c094734cc5920a4e937c74447dd6922770a2dBill Wendling // Incorporate types by name, scanning all the types in the source module. 597601c094734cc5920a4e937c74447dd6922770a2dBill Wendling // At this point, the destination module may have a type "%foo = { i32 }" for 598348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling // example. When the source module got loaded into the same LLVMContext, if 599348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling // it had the same type, it would have been renamed to "%foo.42 = { i32 }". 600601c094734cc5920a4e937c74447dd6922770a2dBill Wendling // Though it isn't required for correctness, attempt to link these up to clean 601601c094734cc5920a4e937c74447dd6922770a2dBill Wendling // up the IR. 602348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling std::vector<StructType*> SrcStructTypes; 603348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling SrcM->findUsedStructTypes(SrcStructTypes); 604348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling 605348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling SmallPtrSet<StructType*, 32> SrcStructTypesSet(SrcStructTypes.begin(), 606348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling SrcStructTypes.end()); 607348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling 608348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling for (unsigned i = 0, e = SrcStructTypes.size(); i != e; ++i) { 609348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling StructType *ST = SrcStructTypes[i]; 610348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling if (!ST->hasName()) continue; 611348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling 612348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling // Check to see if there is a dot in the name followed by a digit. 613601c094734cc5920a4e937c74447dd6922770a2dBill Wendling size_t DotPos = ST->getName().rfind('.'); 614601c094734cc5920a4e937c74447dd6922770a2dBill Wendling if (DotPos == 0 || DotPos == StringRef::npos || 615601c094734cc5920a4e937c74447dd6922770a2dBill Wendling ST->getName().back() == '.' || !isdigit(ST->getName()[DotPos+1])) 616601c094734cc5920a4e937c74447dd6922770a2dBill Wendling continue; 617348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling 618348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling // Check to see if the destination module has a struct with the prefix name. 619601c094734cc5920a4e937c74447dd6922770a2dBill Wendling if (StructType *DST = DstM->getTypeByName(ST->getName().substr(0, DotPos))) 620348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling // Don't use it if this actually came from the source module. They're in 621348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling // the same LLVMContext after all. 622348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling if (!SrcStructTypesSet.count(DST)) 623348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling TypeMap.addTypeMapping(DST, ST); 624348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling } 625348e5e763e1297870878c5cb11aadfab2e8e5e7aBill Wendling 6261afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Don't bother incorporating aliases, they aren't generally typed well. 627601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 6281afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Now that we have discovered all of the type equivalences, get a body for 6291afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // any 'opaque' types in the dest module that are now resolved. 6301afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMap.linkDefinedTypeBodies(); 631ab67e705f59d567afded845465f358b8a66ab62eDevang Patel} 632ab67e705f59d567afded845465f358b8a66ab62eDevang Patel 6331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// linkAppendingVarProto - If there were any appending global variables, link 6341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// them together now. Return true on error. 6351afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::linkAppendingVarProto(GlobalVariable *DstGV, 6361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalVariable *SrcGV) { 637601c094734cc5920a4e937c74447dd6922770a2dBill Wendling 6381afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcGV->hasAppendingLinkage() || !DstGV->hasAppendingLinkage()) 6391afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError("Linking globals named '" + SrcGV->getName() + 6401afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner "': can only link appending global with another appending global!"); 6411afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6421afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *DstTy = cast<ArrayType>(DstGV->getType()->getElementType()); 6431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *SrcTy = 6441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner cast<ArrayType>(TypeMap.get(SrcGV->getType()->getElementType())); 6451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Type *EltTy = DstTy->getElementType(); 6461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Check to see that they two arrays agree on type. 6481afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (EltTy != SrcTy->getElementType()) 6491afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError("Appending variables with different element types!"); 6501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstGV->isConstant() != SrcGV->isConstant()) 6511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError("Appending variables linked with different const'ness!"); 6521afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstGV->getAlignment() != SrcGV->getAlignment()) 6541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError( 6551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner "Appending variables with different alignment need to be linked!"); 6561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstGV->getVisibility() != SrcGV->getVisibility()) 6581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError( 6591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner "Appending variables with different visibility need to be linked!"); 6601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstGV->getSection() != SrcGV->getSection()) 6621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return emitError( 6631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner "Appending variables with different section name need to be linked!"); 6641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner uint64_t NewSize = DstTy->getNumElements() + SrcTy->getNumElements(); 6661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *NewType = ArrayType::get(EltTy, NewSize); 6671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Create the new global variable. 6691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalVariable *NG = 6701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner new GlobalVariable(*DstGV->getParent(), NewType, SrcGV->isConstant(), 6711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstGV->getLinkage(), /*init*/0, /*name*/"", DstGV, 6721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstGV->isThreadLocal(), 6731afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstGV->getType()->getAddressSpace()); 6741afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Propagate alignment, visibility and section info. 676cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling copyGVAttributes(NG, DstGV); 6771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AppendingVarInfo AVI; 6791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AVI.NewGV = NG; 6801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AVI.DstInit = DstGV->getInitializer(); 6811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AVI.SrcInit = SrcGV->getInitializer(); 6821afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AppendingVars.push_back(AVI); 6831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Replace any uses of the two global variables with uses of the new 6851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // global. 6861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SrcGV] = ConstantExpr::getBitCast(NG, TypeMap.get(SrcGV->getType())); 6871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 6881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstGV->replaceAllUsesWith(ConstantExpr::getBitCast(NG, DstGV->getType())); 6891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstGV->eraseFromParent(); 6901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 691f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Track the source variable so we don't try to link it. 692f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner DoNotLinkFromSource.insert(SrcGV); 693f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 6941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 6951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 6965c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 6971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// linkGlobalProto - Loop through the global variables in the src module and 6981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// merge them into the dest module. 6991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::linkGlobalProto(GlobalVariable *SGV) { 7001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *DGV = getLinkedToGlobal(SGV); 7013ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola llvm::Optional<GlobalValue::VisibilityTypes> NewVisibility; 7021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 7041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Concatenation of appending linkage variables is magic and handled later. 7051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV->hasAppendingLinkage() || SGV->hasAppendingLinkage()) 7061afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return linkAppendingVarProto(cast<GlobalVariable>(DGV), SGV); 7071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Determine whether linkage of these two globals follows the source 7091afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // module's definition or the destination module's definition. 710b324bd735ff5c99a52cd3c3f5d01c0e1398a2d3aChris Lattner GlobalValue::LinkageTypes NewLinkage = GlobalValue::InternalLinkage; 7113ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes NV; 712b324bd735ff5c99a52cd3c3f5d01c0e1398a2d3aChris Lattner bool LinkFromSrc = false; 7133ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (getLinkageResult(DGV, SGV, NewLinkage, NV, LinkFromSrc)) 714aee38ea5698fd770bb41d01d06542cb849e131a4Chris Lattner return true; 7153ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewVisibility = NV; 7160fec08eb58dd9fffeb72c584aa61a59d71111c8dChris Lattner 7171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If we're not linking from the source, then keep the definition that we 7181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // have. 7191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!LinkFromSrc) { 7201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Special case for const propagation. 7211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (GlobalVariable *DGVar = dyn_cast<GlobalVariable>(DGV)) 7221afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGVar->isDeclaration() && SGV->isConstant() && !DGVar->isConstant()) 7231afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGVar->setConstant(true); 7241afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7253ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola // Set calculated linkage and visibility. 7261afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->setLinkage(NewLinkage); 7273ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola DGV->setVisibility(*NewVisibility); 7283ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 7296157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner // Make sure to remember this mapping. 7301afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SGV] = ConstantExpr::getBitCast(DGV,TypeMap.get(SGV->getType())); 7311afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 732f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Track the source global so that we don't attempt to copy it over when 733f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // processing global initializers. 734f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner DoNotLinkFromSource.insert(SGV); 735f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 7361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 7376157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner } 7385c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner } 7391afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7401afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // No linking to be performed or linking from the source: simply create an 7411afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // identical version of the symbol over in the dest module... the 7421afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // initializer will be filled in later by LinkGlobalInits. 7431afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalVariable *NewDGV = 7441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner new GlobalVariable(*DstM, TypeMap.get(SGV->getType()->getElementType()), 7451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SGV->isConstant(), SGV->getLinkage(), /*init*/0, 7461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SGV->getName(), /*insertbefore*/0, 7471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SGV->isThreadLocal(), 7481afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SGV->getType()->getAddressSpace()); 7491afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Propagate alignment, visibility and section info. 750cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling copyGVAttributes(NewDGV, SGV); 7513ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (NewVisibility) 7523ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewDGV->setVisibility(*NewVisibility); 7531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 7551afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->replaceAllUsesWith(ConstantExpr::getBitCast(NewDGV, DGV->getType())); 7561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->eraseFromParent(); 75758887bc59316bcaf0c0675a45ddecd6994f3fbc6Anton Korobeynikov } 7581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Make sure to remember this mapping. 7601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SGV] = NewDGV; 76131ed0fb804dd86fb15093e114701932119914400Lauro Ramos Venancio return false; 76231ed0fb804dd86fb15093e114701932119914400Lauro Ramos Venancio} 76331ed0fb804dd86fb15093e114701932119914400Lauro Ramos Venancio 7641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// linkFunctionProto - Link the function in the source module into the 7651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// destination module if needed, setting up mapping information. 7661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::linkFunctionProto(Function *SF) { 7671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *DGV = getLinkedToGlobal(SF); 7683ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola llvm::Optional<GlobalValue::VisibilityTypes> NewVisibility; 7695c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 7701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 7711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue::LinkageTypes NewLinkage = GlobalValue::InternalLinkage; 7721afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner bool LinkFromSrc = false; 7733ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes NV; 7743ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (getLinkageResult(DGV, SF, NewLinkage, NV, LinkFromSrc)) 7751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 7763ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewVisibility = NV; 7773ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 7781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!LinkFromSrc) { 7791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Set calculated linkage 7801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->setLinkage(NewLinkage); 7813ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola DGV->setVisibility(*NewVisibility); 7823ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 7831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Make sure to remember this mapping. 7841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SF] = ConstantExpr::getBitCast(DGV, TypeMap.get(SF->getType())); 7851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 786f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Track the function from the source module so we don't attempt to remap 787f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // it. 788f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner DoNotLinkFromSource.insert(SF); 789f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 7901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 7918d2de8a82cce67513debee7a3fa5aca0189b4105Chris Lattner } 7928d2de8a82cce67513debee7a3fa5aca0189b4105Chris Lattner } 7931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 7941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If there is no linkage to be performed or we are linking from the source, 7951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // bring SF over. 7961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Function *NewDF = Function::Create(TypeMap.get(SF->getFunctionType()), 7971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SF->getLinkage(), SF->getName(), DstM); 798cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling copyGVAttributes(NewDF, SF); 7993ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (NewVisibility) 8003ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewDF->setVisibility(*NewVisibility); 8011afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 8031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Any uses of DF need to change to NewDF, with cast. 8041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->replaceAllUsesWith(ConstantExpr::getBitCast(NewDF, DGV->getType())); 8051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->eraseFromParent(); 8069af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } else { 8079af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Internal, LO_ODR, or LO linkage - stick in set to ignore and lazily link. 8089af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (SF->hasLocalLinkage() || SF->hasLinkOnceLinkage() || 8099af37a3de8c8688adae383471379f0216287ce28Tanya Lattner SF->hasAvailableExternallyLinkage()) { 8109af37a3de8c8688adae383471379f0216287ce28Tanya Lattner DoNotLinkFromSource.insert(SF); 8119af37a3de8c8688adae383471379f0216287ce28Tanya Lattner LazilyLinkFunctions.push_back(SF); 8129af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } 8131afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 8141afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SF] = NewDF; 8168d2de8a82cce67513debee7a3fa5aca0189b4105Chris Lattner return false; 8178d2de8a82cce67513debee7a3fa5aca0189b4105Chris Lattner} 8185c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 8191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// LinkAliasProto - Set up prototypes for any aliases that come over from the 8201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// source module. 8211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::linkAliasProto(GlobalAlias *SGA) { 8221afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalValue *DGV = getLinkedToGlobal(SGA); 8233ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola llvm::Optional<GlobalValue::VisibilityTypes> NewVisibility; 8243ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 8251afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 8266157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner GlobalValue::LinkageTypes NewLinkage = GlobalValue::InternalLinkage; 8273ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola GlobalValue::VisibilityTypes NV; 8286157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner bool LinkFromSrc = false; 8293ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (getLinkageResult(DGV, SGA, NewLinkage, NV, LinkFromSrc)) 8306157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner return true; 8313ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewVisibility = NV; 8323ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 8331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!LinkFromSrc) { 8341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Set calculated linkage. 8351afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->setLinkage(NewLinkage); 8363ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola DGV->setVisibility(*NewVisibility); 8373ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola 8381afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Make sure to remember this mapping. 8391afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SGA] = ConstantExpr::getBitCast(DGV,TypeMap.get(SGA->getType())); 8401afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 841f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Track the alias from the source module so we don't attempt to remap it. 842f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner DoNotLinkFromSource.insert(SGA); 843f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 8441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 845822143e6f7271c6546434d2d0b3da7a29711020dChris Lattner } 8461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 8471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8481afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If there is no linkage to be performed or we're linking from the source, 8491afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // bring over SGA. 8501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalAlias *NewDA = new GlobalAlias(TypeMap.get(SGA->getType()), 8511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SGA->getLinkage(), SGA->getName(), 8521afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner /*aliasee*/0, DstM); 853cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling copyGVAttributes(NewDA, SGA); 8543ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola if (NewVisibility) 8553ed8815541d2118728a91bbd5bee054fbcfba71fRafael Espindola NewDA->setVisibility(*NewVisibility); 8561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DGV) { 8581afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Any uses of DGV need to change to NewDA, with cast. 8591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->replaceAllUsesWith(ConstantExpr::getBitCast(NewDA, DGV->getType())); 8601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->eraseFromParent(); 8611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 8621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ValueMap[SGA] = NewDA; 8641afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 8651afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 866eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 8671ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattnerstatic void getArrayElements(Constant *C, SmallVectorImpl<Constant*> &Dest) { 868a1f00f4d488eb5daff52faaf99c62ee652fd3b85Chris Lattner unsigned NumElements = cast<ArrayType>(C->getType())->getNumElements(); 869a1f00f4d488eb5daff52faaf99c62ee652fd3b85Chris Lattner 870a1f00f4d488eb5daff52faaf99c62ee652fd3b85Chris Lattner for (unsigned i = 0; i != NumElements; ++i) 871a1f00f4d488eb5daff52faaf99c62ee652fd3b85Chris Lattner Dest.push_back(C->getAggregateElement(i)); 8721ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattner} 8731ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattner 8741afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::linkAppendingVarInit(const AppendingVarInfo &AVI) { 8751afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Merge the initializer. 8761afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SmallVector<Constant*, 16> Elements; 8771ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattner getArrayElements(AVI.DstInit, Elements); 8781afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Constant *SrcInit = MapValue(AVI.SrcInit, ValueMap, RF_None, &TypeMap); 8801ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattner getArrayElements(SrcInit, Elements); 8811ee0ecf84a07693c3a517ba030fac8ac1f9f3fbcChris Lattner 8821afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner ArrayType *NewType = cast<ArrayType>(AVI.NewGV->getType()->getElementType()); 8831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner AVI.NewGV->setInitializer(ConstantArray::get(NewType, Elements)); 8841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 8856157e383c4a15ffb6e7f27cdb153daa9caa15ca5Chris Lattner 886cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// linkGlobalInits - Update the initializers in the Dest module now that all 887cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// globals that may be referenced are in Dest. 8881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::linkGlobalInits() { 8891afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Loop over all of the globals in the src module, mapping them over as we go 8901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::const_global_iterator I = SrcM->global_begin(), 8911afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner E = SrcM->global_end(); I != E; ++I) { 892f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 893f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Only process initialized GV's or ones not already in dest. 894f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner if (!I->hasInitializer() || DoNotLinkFromSource.count(I)) continue; 8951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 8961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Grab destination global variable. 8971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalVariable *DGV = cast<GlobalVariable>(ValueMap[I]); 8981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Figure out what the initializer looks like in the dest module. 8991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DGV->setInitializer(MapValue(I->getInitializer(), ValueMap, 9001afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner RF_None, &TypeMap)); 9015c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner } 9025c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner} 9035c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 904cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// linkFunctionBody - Copy the source function over into the dest function and 905cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// fix up references to values. At this point we know that Dest is an external 906cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// function, and that Src is not. 9071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::linkFunctionBody(Function *Dst, Function *Src) { 9081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner assert(Src && Dst && Dst->isDeclaration() && !Src->isDeclaration()); 9095c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 9100033baf94e049e075f3ba4700c109779e2d7c131Chris Lattner // Go through and convert function arguments over, remembering the mapping. 9111afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner Function::arg_iterator DI = Dst->arg_begin(); 912e4d5c441e04bdc00ccf1804744af670655123b07Chris Lattner for (Function::arg_iterator I = Src->arg_begin(), E = Src->arg_end(); 91369da5cf26143e4542d4bf8c78ffac6d079efe5c9Chris Lattner I != E; ++I, ++DI) { 9141afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DI->setName(I->getName()); // Copy the name over. 9155c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 9161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Add a mapping to our mapping. 917817bf2aeb22db13d03beb15e9bf17c425d0c694dAnton Korobeynikov ValueMap[I] = DI; 9185c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner } 9195c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 920f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner if (Mode == Linker::DestroySource) { 921f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Splice the body of the source function into the dest function. 922f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner Dst->getBasicBlockList().splice(Dst->end(), Src->getBasicBlockList()); 923f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 924f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // At this point, all of the instructions and values of the function are now 925f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // copied over. The only problem is that they are still referencing values in 926f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // the Source function as operands. Loop through all of the operands of the 927f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // functions and patch them up to point to the local versions. 928f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner for (Function::iterator BB = Dst->begin(), BE = Dst->end(); BB != BE; ++BB) 929f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) 930f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner RemapInstruction(I, ValueMap, RF_IgnoreMissingEntries, &TypeMap); 931f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 932f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner } else { 933f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner // Clone the body of the function into the dest function. 934f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner SmallVector<ReturnInst*, 8> Returns; // Ignore returns. 935d24397a9319a41e80169f572ad274a711f41d64eMon P Wang CloneFunctionInto(Dst, Src, ValueMap, false, Returns, "", NULL, &TypeMap); 936f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner } 937f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 9380033baf94e049e075f3ba4700c109779e2d7c131Chris Lattner // There is no need to map the arguments anymore. 9391127315562b221010040925980040fd4f65bdb1cChris Lattner for (Function::arg_iterator I = Src->arg_begin(), E = Src->arg_end(); 9401127315562b221010040925980040fd4f65bdb1cChris Lattner I != E; ++I) 941ef9b9a793949469cdaa4ab6d0173136229dcab7bReid Spencer ValueMap.erase(I); 942f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner 9435c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner} 9445c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 945cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// linkAliasBodies - Insert all of the aliases in Src into the Dest module. 9461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::linkAliasBodies() { 9471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::alias_iterator I = SrcM->alias_begin(), E = SrcM->alias_end(); 948f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner I != E; ++I) { 949f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner if (DoNotLinkFromSource.count(I)) 950f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner continue; 9511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (Constant *Aliasee = I->getAliasee()) { 9521afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner GlobalAlias *DA = cast<GlobalAlias>(ValueMap[I]); 9531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DA->setAliasee(MapValue(Aliasee, ValueMap, RF_None, &TypeMap)); 954c2d774b6c1d38421c435b6d3cfaa10402c900aebChris Lattner } 955f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner } 9565c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner} 9575c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 958cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// linkNamedMDNodes - Insert all of the named MDNodes in Src into the Dest 9591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner/// module. 9601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnervoid ModuleLinker::linkNamedMDNodes() { 961d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling const NamedMDNode *SrcModFlags = SrcM->getModuleFlagsMetadata(); 9621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::const_named_metadata_iterator I = SrcM->named_metadata_begin(), 9631afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner E = SrcM->named_metadata_end(); I != E; ++I) { 964d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Don't link module flags here. Do them separately. 965d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (&*I == SrcModFlags) continue; 9661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner NamedMDNode *DestNMD = DstM->getOrInsertNamedMetadata(I->getName()); 9671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Add Src elements into Dest node. 9681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) 9691afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DestNMD->addOperand(MapValue(I->getOperand(i), ValueMap, 9701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner RF_None, &TypeMap)); 9718166e6eef6518da6f1f805e0d5e2bb22c15dd49cChris Lattner } 9728166e6eef6518da6f1f805e0d5e2bb22c15dd49cChris Lattner} 973d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 974cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// categorizeModuleFlagNodes - Categorize the module flags according to their 975cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// type: Error, Warning, Override, and Require. 976d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendlingbool ModuleLinker:: 977d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill WendlingcategorizeModuleFlagNodes(const NamedMDNode *ModFlags, 978d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, MDNode*> &ErrorNode, 979d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, MDNode*> &WarningNode, 980d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, MDNode*> &OverrideNode, 981d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, 982d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling SmallSetVector<MDNode*, 8> > &RequireNodes, 983d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling SmallSetVector<MDString*, 16> &SeenIDs) { 984d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling bool HasErr = false; 985d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 986d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling for (unsigned I = 0, E = ModFlags->getNumOperands(); I != E; ++I) { 987d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDNode *Op = ModFlags->getOperand(I); 988d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling assert(Op->getNumOperands() == 3 && "Invalid module flag metadata!"); 989d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling assert(isa<ConstantInt>(Op->getOperand(0)) && 990d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling "Module flag's first operand must be an integer!"); 991d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling assert(isa<MDString>(Op->getOperand(1)) && 992d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling "Module flag's second operand must be an MDString!"); 993d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 994d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling ConstantInt *Behavior = cast<ConstantInt>(Op->getOperand(0)); 995d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDString *ID = cast<MDString>(Op->getOperand(1)); 996d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling Value *Val = Op->getOperand(2); 997d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling switch (Behavior->getZExtValue()) { 998d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling default: 999d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling assert(false && "Invalid behavior in module flag metadata!"); 1000d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling break; 1001d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling case Module::Error: { 1002d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDNode *&ErrNode = ErrorNode[ID]; 1003d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (!ErrNode) ErrNode = Op; 1004d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (ErrNode->getOperand(2) != Val) 100575b3d6886762bbbc9e1805793222c29cb39fbd2fBill Wendling HasErr = emitError("linking module flags '" + ID->getString() + 100675b3d6886762bbbc9e1805793222c29cb39fbd2fBill Wendling "': IDs have conflicting values"); 1007d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling break; 1008d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1009d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling case Module::Warning: { 1010d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDNode *&WarnNode = WarningNode[ID]; 1011d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (!WarnNode) WarnNode = Op; 1012d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (WarnNode->getOperand(2) != Val) 101375b3d6886762bbbc9e1805793222c29cb39fbd2fBill Wendling errs() << "WARNING: linking module flags '" << ID->getString() 101475b3d6886762bbbc9e1805793222c29cb39fbd2fBill Wendling << "': IDs have conflicting values"; 1015d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling break; 1016d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1017d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling case Module::Require: RequireNodes[ID].insert(Op); break; 1018d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling case Module::Override: { 1019d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDNode *&OvrNode = OverrideNode[ID]; 1020d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (!OvrNode) OvrNode = Op; 1021d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (OvrNode->getOperand(2) != Val) 102275b3d6886762bbbc9e1805793222c29cb39fbd2fBill Wendling HasErr = emitError("linking module flags '" + ID->getString() + 102375b3d6886762bbbc9e1805793222c29cb39fbd2fBill Wendling "': IDs have conflicting override values"); 1024d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling break; 1025d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1026d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1027d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1028d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling SeenIDs.insert(ID); 1029d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1030d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1031d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling return HasErr; 1032d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling} 1033d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1034d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling/// linkModuleFlagsMetadata - Merge the linker flags in Src into the Dest 1035d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling/// module. 1036d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendlingbool ModuleLinker::linkModuleFlagsMetadata() { 1037d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling const NamedMDNode *SrcModFlags = SrcM->getModuleFlagsMetadata(); 1038d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (!SrcModFlags) return false; 1039d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1040d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling NamedMDNode *DstModFlags = DstM->getOrInsertModuleFlagsMetadata(); 1041d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1042d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // If the destination module doesn't have module flags yet, then just copy 1043d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // over the source module's flags. 1044d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (DstModFlags->getNumOperands() == 0) { 1045d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling for (unsigned I = 0, E = SrcModFlags->getNumOperands(); I != E; ++I) 1046d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DstModFlags->addOperand(SrcModFlags->getOperand(I)); 1047d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1048d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling return false; 1049d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1050d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1051d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling bool HasErr = false; 1052d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1053d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Otherwise, we have to merge them based on their behaviors. First, 1054d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // categorize all of the nodes in the modules' module flags. If an error or 1055d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // warning occurs, then emit the appropriate message(s). 1056d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, MDNode*> ErrorNode; 1057d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, MDNode*> WarningNode; 1058d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, MDNode*> OverrideNode; 1059d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, SmallSetVector<MDNode*, 8> > RequireNodes; 1060d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling SmallSetVector<MDString*, 16> SeenIDs; 1061d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1062d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling HasErr |= categorizeModuleFlagNodes(SrcModFlags, ErrorNode, WarningNode, 1063d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling OverrideNode, RequireNodes, SeenIDs); 1064d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling HasErr |= categorizeModuleFlagNodes(DstModFlags, ErrorNode, WarningNode, 1065d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling OverrideNode, RequireNodes, SeenIDs); 1066d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1067d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Check that there isn't both an error and warning node for a flag. 1068d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling for (SmallSetVector<MDString*, 16>::iterator 1069d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling I = SeenIDs.begin(), E = SeenIDs.end(); I != E; ++I) { 1070d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDString *ID = *I; 1071d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (ErrorNode[ID] && WarningNode[ID]) 107275b3d6886762bbbc9e1805793222c29cb39fbd2fBill Wendling HasErr = emitError("linking module flags '" + ID->getString() + 1073d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling "': IDs have conflicting behaviors"); 1074d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1075d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1076d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Early exit if we had an error. 1077d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (HasErr) return true; 1078d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1079d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Get the destination's module flags ready for new operands. 1080d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DstModFlags->dropAllReferences(); 1081d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1082d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Add all of the module flags to the destination module. 1083d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DenseMap<MDString*, SmallVector<MDNode*, 4> > AddedNodes; 1084d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling for (SmallSetVector<MDString*, 16>::iterator 1085d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling I = SeenIDs.begin(), E = SeenIDs.end(); I != E; ++I) { 1086d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDString *ID = *I; 1087d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (OverrideNode[ID]) { 1088d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DstModFlags->addOperand(OverrideNode[ID]); 1089d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling AddedNodes[ID].push_back(OverrideNode[ID]); 1090d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } else if (ErrorNode[ID]) { 1091d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DstModFlags->addOperand(ErrorNode[ID]); 1092d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling AddedNodes[ID].push_back(ErrorNode[ID]); 1093d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } else if (WarningNode[ID]) { 1094d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DstModFlags->addOperand(WarningNode[ID]); 1095d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling AddedNodes[ID].push_back(WarningNode[ID]); 1096d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1097d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1098d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling for (SmallSetVector<MDNode*, 8>::iterator 1099d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling II = RequireNodes[ID].begin(), IE = RequireNodes[ID].end(); 1100d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling II != IE; ++II) 1101d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling DstModFlags->addOperand(*II); 1102d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1103d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1104d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Now check that all of the requirements have been satisfied. 1105d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling for (SmallSetVector<MDString*, 16>::iterator 1106d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling I = SeenIDs.begin(), E = SeenIDs.end(); I != E; ++I) { 1107d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDString *ID = *I; 1108d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling SmallSetVector<MDNode*, 8> &Set = RequireNodes[ID]; 1109d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1110d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling for (SmallSetVector<MDNode*, 8>::iterator 1111d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling II = Set.begin(), IE = Set.end(); II != IE; ++II) { 1112d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDNode *Node = *II; 1113d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling assert(isa<MDNode>(Node->getOperand(2)) && 1114d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling "Module flag's third operand must be an MDNode!"); 1115d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDNode *Val = cast<MDNode>(Node->getOperand(2)); 1116d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1117d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDString *ReqID = cast<MDString>(Val->getOperand(0)); 1118d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling Value *ReqVal = Val->getOperand(1); 1119d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1120d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling bool HasValue = false; 1121d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling for (SmallVectorImpl<MDNode*>::iterator 1122d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling RI = AddedNodes[ReqID].begin(), RE = AddedNodes[ReqID].end(); 1123d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling RI != RE; ++RI) { 1124d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling MDNode *ReqNode = *RI; 1125d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (ReqNode->getOperand(2) == ReqVal) { 1126d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling HasValue = true; 1127d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling break; 1128d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1129d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1130d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1131d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (!HasValue) 113275b3d6886762bbbc9e1805793222c29cb39fbd2fBill Wendling HasErr = emitError("linking module flags '" + ReqID->getString() + 113375b3d6886762bbbc9e1805793222c29cb39fbd2fBill Wendling "': does not have the required value"); 1134d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1135d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling } 1136d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 1137d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling return HasErr; 1138d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling} 11391afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 11401afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattnerbool ModuleLinker::run() { 1141d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling assert(DstM && "Null destination module"); 1142d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling assert(SrcM && "Null source module"); 114352f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner 11441afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Inherit the target data from the source module if the destination module 11451afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // doesn't have one already. 11461afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstM->getDataLayout().empty() && !SrcM->getDataLayout().empty()) 11471afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->setDataLayout(SrcM->getDataLayout()); 1148873c5e7859c1534bf92c9e2747f2b70685059598Chris Lattner 1149f27dfcb210fec571d79bc881f5463e0b405707c0Chris Lattner // Copy the target triple from the source to dest if the dest's is empty. 11501afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstM->getTargetTriple().empty() && !SrcM->getTargetTriple().empty()) 11511afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->setTargetTriple(SrcM->getTargetTriple()); 1152eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 11531afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcM->getDataLayout().empty() && !DstM->getDataLayout().empty() && 11541afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SrcM->getDataLayout() != DstM->getDataLayout()) 1155bdff548e4dd577a72094d57b282de4e765643b96Chris Lattner errs() << "WARNING: Linking two modules of different data layouts!\n"; 11561afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcM->getTargetTriple().empty() && 11571afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->getTargetTriple() != SrcM->getTargetTriple()) { 1158a797ee0210902669833720f9df7c3be5e58c1401Chris Lattner errs() << "WARNING: Linking two modules of different target triples: "; 11591afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcM->getModuleIdentifier().empty()) 11601afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner errs() << SrcM->getModuleIdentifier() << ": "; 11611afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner errs() << "'" << SrcM->getTargetTriple() << "' and '" 11621afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner << DstM->getTargetTriple() << "'\n"; 1163a797ee0210902669833720f9df7c3be5e58c1401Chris Lattner } 1164f976c856fcc5055f3fc7d9f070d72c2d027c1d9dMisha Brukman 1165f27dfcb210fec571d79bc881f5463e0b405707c0Chris Lattner // Append the module inline asm string. 11661afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!SrcM->getModuleInlineAsm().empty()) { 11671afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (DstM->getModuleInlineAsm().empty()) 11681afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->setModuleInlineAsm(SrcM->getModuleInlineAsm()); 1169e1b2e14f92e8e9da1eb4854511a881cf9c22af3cChris Lattner else 11701afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->setModuleInlineAsm(DstM->getModuleInlineAsm()+"\n"+ 11711afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner SrcM->getModuleInlineAsm()); 1172e1b2e14f92e8e9da1eb4854511a881cf9c22af3cChris Lattner } 1173eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov 1174719012d6254ee425464f034250176283fb96793bReid Spencer // Update the destination module's dependent libraries list with the libraries 117557a0efa32240ef03ea318f9ba7680fd2b8609c6eReid Spencer // from the source module. There's no opportunity for duplicates here as the 117657a0efa32240ef03ea318f9ba7680fd2b8609c6eReid Spencer // Module ensures that duplicate insertions are discarded. 11771afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::lib_iterator SI = SrcM->lib_begin(), SE = SrcM->lib_end(); 1178eba2cb0d5aef5a8229facae5624c65d9fd65e9d1Mikhail Glushenkov SI != SE; ++SI) 11791afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->addLibrary(*SI); 11801afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 11811afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If the source library's module id is in the dependent library list of the 11821afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // destination library, remove it since that module is now linked in. 11831afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner StringRef ModuleId = SrcM->getModuleIdentifier(); 11841afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (!ModuleId.empty()) 11851afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner DstM->removeLibrary(sys::path::stem(ModuleId)); 11861afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 11871afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Loop over all of the linked values to compute type mappings. 11881afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner computeTypeMapping(); 11892c236f3e20a0fb84b5948efa6bb7bb60d759cb32Chris Lattner 11901afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Insert all of the globals in src into the DstM module... without linking 11918166e6eef6518da6f1f805e0d5e2bb22c15dd49cChris Lattner // initializers (which could refer to functions not yet mapped over). 11921afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::global_iterator I = SrcM->global_begin(), 11931afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner E = SrcM->global_end(); I != E; ++I) 11941afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (linkGlobalProto(I)) 11951afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 11965c377c524a6929cdaa683f3f034b3fc01526b264Chris Lattner 1197c8cc4cb03bd90f89be7fe1649542a2d5ae689632Chris Lattner // Link the functions together between the two modules, without doing function 11981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // bodies... this just adds external function prototypes to the DstM 1199c8cc4cb03bd90f89be7fe1649542a2d5ae689632Chris Lattner // function... We do this so that when we begin processing function bodies, 1200c8cc4cb03bd90f89be7fe1649542a2d5ae689632Chris Lattner // all of the global values that may be referenced are available in our 1201c8cc4cb03bd90f89be7fe1649542a2d5ae689632Chris Lattner // ValueMap. 12021afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::iterator I = SrcM->begin(), E = SrcM->end(); I != E; ++I) 12031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (linkFunctionProto(I)) 12041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 12056cdf1971bdf88ddd9a7d46b5f5f975497d68c38eChris Lattner 12061afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // If there were any aliases, link them now. 12071afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::alias_iterator I = SrcM->alias_begin(), 12081afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner E = SrcM->alias_end(); I != E; ++I) 12091afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (linkAliasProto(I)) 12101afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 121152f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner 12121afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (unsigned i = 0, e = AppendingVars.size(); i != e; ++i) 12131afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner linkAppendingVarInit(AppendingVars[i]); 12141afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 12151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Update the initializers in the DstM module now that all globals that may 12161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // be referenced are in DstM. 12171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner linkGlobalInits(); 12181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 12191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Link in the function bodies that are defined in the source module into 12201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // DstM. 12211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner for (Module::iterator SF = SrcM->begin(), E = SrcM->end(); SF != E; ++SF) { 12222b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner // Skip if not linking from source. 12232b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner if (DoNotLinkFromSource.count(SF)) continue; 12242b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner 12252b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner // Skip if no body (function is external) or materialize. 12262b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner if (SF->isDeclaration()) { 12272b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner if (!SF->isMaterializable()) 12282b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner continue; 12292b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner if (SF->Materialize(&ErrorMsg)) 12302b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner return true; 12312b28a74bc69e33eedc60f438e4fe9ef9ae606f3cTanya Lattner } 12321afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 12331afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner linkFunctionBody(cast<Function>(ValueMap[SF]), SF); 12341afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 12358166e6eef6518da6f1f805e0d5e2bb22c15dd49cChris Lattner 12361afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Resolve all uses of aliases with aliasees. 12371afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner linkAliasBodies(); 12383db9191baf5f5229a2f4d204c6332ba27fff81d0Anton Korobeynikov 1239d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Remap all of the named MDNodes in Src into the DstM module. We do this 1240211da8f7a96e26cc8d53a0c2ea34f6b791513021Devang Patel // after linking GlobalValues so that MDNodes that reference GlobalValues 1241211da8f7a96e26cc8d53a0c2ea34f6b791513021Devang Patel // are properly remapped. 1242211da8f7a96e26cc8d53a0c2ea34f6b791513021Devang Patel linkNamedMDNodes(); 1243211da8f7a96e26cc8d53a0c2ea34f6b791513021Devang Patel 1244d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling // Merge the module flags into the DstM module. 1245d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling if (linkModuleFlagsMetadata()) 1246d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling return true; 1247d34cb1e09f5e4b3feb7305346655b83ad2f67773Bill Wendling 12489af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Process vector of lazily linked in functions. 12499af37a3de8c8688adae383471379f0216287ce28Tanya Lattner bool LinkedInAnyFunctions; 12509af37a3de8c8688adae383471379f0216287ce28Tanya Lattner do { 12519af37a3de8c8688adae383471379f0216287ce28Tanya Lattner LinkedInAnyFunctions = false; 12529af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12539af37a3de8c8688adae383471379f0216287ce28Tanya Lattner for(std::vector<Function*>::iterator I = LazilyLinkFunctions.begin(), 12549af37a3de8c8688adae383471379f0216287ce28Tanya Lattner E = LazilyLinkFunctions.end(); I != E; ++I) { 12559af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (!*I) 12569af37a3de8c8688adae383471379f0216287ce28Tanya Lattner continue; 12579af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12589af37a3de8c8688adae383471379f0216287ce28Tanya Lattner Function *SF = *I; 12599af37a3de8c8688adae383471379f0216287ce28Tanya Lattner Function *DF = cast<Function>(ValueMap[SF]); 12609af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12619af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (!DF->use_empty()) { 12629af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12639af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Materialize if necessary. 12649af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (SF->isDeclaration()) { 12659af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (!SF->isMaterializable()) 12669af37a3de8c8688adae383471379f0216287ce28Tanya Lattner continue; 12679af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (SF->Materialize(&ErrorMsg)) 12689af37a3de8c8688adae383471379f0216287ce28Tanya Lattner return true; 12699af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } 12709af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12719af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Link in function body. 12729af37a3de8c8688adae383471379f0216287ce28Tanya Lattner linkFunctionBody(DF, SF); 12739af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12749af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // "Remove" from vector by setting the element to 0. 12759af37a3de8c8688adae383471379f0216287ce28Tanya Lattner *I = 0; 12769af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12779af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Set flag to indicate we may have more functions to lazily link in 12789af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // since we linked in a function. 12799af37a3de8c8688adae383471379f0216287ce28Tanya Lattner LinkedInAnyFunctions = true; 12809af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } 12819af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } 12829af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } while (LinkedInAnyFunctions); 12839af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12849af37a3de8c8688adae383471379f0216287ce28Tanya Lattner // Remove any prototypes of functions that were not actually linked in. 12859af37a3de8c8688adae383471379f0216287ce28Tanya Lattner for(std::vector<Function*>::iterator I = LazilyLinkFunctions.begin(), 12869af37a3de8c8688adae383471379f0216287ce28Tanya Lattner E = LazilyLinkFunctions.end(); I != E; ++I) { 12879af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (!*I) 12889af37a3de8c8688adae383471379f0216287ce28Tanya Lattner continue; 12899af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12909af37a3de8c8688adae383471379f0216287ce28Tanya Lattner Function *SF = *I; 12919af37a3de8c8688adae383471379f0216287ce28Tanya Lattner Function *DF = cast<Function>(ValueMap[SF]); 12929af37a3de8c8688adae383471379f0216287ce28Tanya Lattner if (DF->use_empty()) 12939af37a3de8c8688adae383471379f0216287ce28Tanya Lattner DF->eraseFromParent(); 12949af37a3de8c8688adae383471379f0216287ce28Tanya Lattner } 12959af37a3de8c8688adae383471379f0216287ce28Tanya Lattner 12961afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // Now that all of the types from the source are used, resolve any structs 12971afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner // copied over to the dest that didn't exist there. 12981afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner TypeMap.linkDefinedTypeBodies(); 12991afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 130052f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner return false; 130152f7e908cb634f9b9b539d5c6670b8a065478915Chris Lattner} 13029466f5113ba859677a28887c3c7143065e702019Vikram S. Adve 13031afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 13041afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner// LinkModules entrypoint. 13051afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner//===----------------------------------------------------------------------===// 13061afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 1307cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// LinkModules - This function links two modules together, with the resulting 1308cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// left module modified to be the composite of the two input modules. If an 1309cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// error occurs, true is returned and ErrorMsg (if not null) is set to indicate 1310cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// the problem. Upon failure, the Dest module could be in a modified state, 1311cd7193fbce32e8ed3a63e8b76672cdf9956891caBill Wendling/// and shouldn't be relied on to be consistent. 1312f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattnerbool Linker::LinkModules(Module *Dest, Module *Src, unsigned Mode, 1313f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner std::string *ErrorMsg) { 1314f1f1a4f16128ffa2910f0b1d5c7052b3697f9fcdTanya Lattner ModuleLinker TheLinker(Dest, Src, Mode); 13151afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (TheLinker.run()) { 13161afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner if (ErrorMsg) *ErrorMsg = TheLinker.ErrorMsg; 13171afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return true; 13181afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner } 13191afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner 13201afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner return false; 13211afcace3a3a138b1b18e5c6270caa8dae2261ae2Chris Lattner} 1322