forked from OSchip/llvm-project
IRMover: Merge flags LinkModuleInlineAsm and IsPerformingImport.
Currently these flags are always the inverse of each other, so there is no need to keep them separate. Differential Revision: https://reviews.llvm.org/D29471 llvm-svn: 294016
This commit is contained in:
parent
7c70211653
commit
e6fd9ff96a
|
@ -71,15 +71,11 @@ public:
|
|||
/// not present in ValuesToLink. The GlobalValue and a ValueAdder callback
|
||||
/// are passed as an argument, and the callback is expected to be called
|
||||
/// if the GlobalValue needs to be added to the \p ValuesToLink and linked.
|
||||
/// - \p LinkModuleInlineAsm is true if the ModuleInlineAsm string in Src
|
||||
/// should be linked with (concatenated into) the ModuleInlineAsm string
|
||||
/// for the destination module. It should be true for full LTO, but not
|
||||
/// when importing for ThinLTO, otherwise we can have duplicate symbols.
|
||||
/// - \p IsPerformingImport is true when this IR link is to perform ThinLTO
|
||||
/// function importing from Src.
|
||||
Error move(std::unique_ptr<Module> Src, ArrayRef<GlobalValue *> ValuesToLink,
|
||||
std::function<void(GlobalValue &GV, ValueAdder Add)> AddLazyFor,
|
||||
bool LinkModuleInlineAsm, bool IsPerformingImport);
|
||||
bool IsPerformingImport);
|
||||
Module &getModule() { return Composite; }
|
||||
|
||||
private:
|
||||
|
|
|
@ -540,7 +540,6 @@ Error LTO::addRegularLTO(BitcodeModule BM, const SymbolResolution *&ResI,
|
|||
|
||||
return RegularLTO.Mover->move(std::move(*MOrErr), Keep,
|
||||
[](GlobalValue &, IRMover::ValueAdder) {},
|
||||
/* LinkModuleInlineAsm */ true,
|
||||
/* IsPerformingImport */ false);
|
||||
}
|
||||
|
||||
|
|
|
@ -395,11 +395,12 @@ class IRLinker {
|
|||
Worklist.push_back(GV);
|
||||
}
|
||||
|
||||
/// Flag whether the ModuleInlineAsm string in Src should be linked with
|
||||
/// (concatenated into) the ModuleInlineAsm string for the destination
|
||||
/// module. It should be true for full LTO, but not when importing for
|
||||
/// ThinLTO, otherwise we can have duplicate symbols.
|
||||
bool LinkModuleInlineAsm;
|
||||
/// Whether we are importing globals for ThinLTO, as opposed to linking the
|
||||
/// source module. If this flag is set, it means that we can rely on some
|
||||
/// other object file to define any non-GlobalValue entities defined by the
|
||||
/// source module. This currently causes us to not link retained types in
|
||||
/// debug info metadata and module inline asm.
|
||||
bool IsPerformingImport;
|
||||
|
||||
/// Set to true when all global value body linking is complete (including
|
||||
/// lazy linking). Used to prevent metadata linking from creating new
|
||||
|
@ -491,10 +492,10 @@ public:
|
|||
IRMover::IdentifiedStructTypeSet &Set, std::unique_ptr<Module> SrcM,
|
||||
ArrayRef<GlobalValue *> ValuesToLink,
|
||||
std::function<void(GlobalValue &, IRMover::ValueAdder)> AddLazyFor,
|
||||
bool LinkModuleInlineAsm, bool IsPerformingImport)
|
||||
bool IsPerformingImport)
|
||||
: DstM(DstM), SrcM(std::move(SrcM)), AddLazyFor(std::move(AddLazyFor)),
|
||||
TypeMap(Set), GValMaterializer(*this), LValMaterializer(*this),
|
||||
SharedMDs(SharedMDs), LinkModuleInlineAsm(LinkModuleInlineAsm),
|
||||
SharedMDs(SharedMDs), IsPerformingImport(IsPerformingImport),
|
||||
Mapper(ValueMap, RF_MoveDistinctMDs | RF_IgnoreMissingLocals, &TypeMap,
|
||||
&GValMaterializer),
|
||||
AliasMCID(Mapper.registerAlternateMappingContext(AliasValueMap,
|
||||
|
@ -1294,7 +1295,7 @@ Error IRLinker::run() {
|
|||
DstM.setTargetTriple(mergeTriples(SrcTriple, DstTriple));
|
||||
|
||||
// Append the module inline asm string.
|
||||
if (LinkModuleInlineAsm && !SrcM->getModuleInlineAsm().empty()) {
|
||||
if (!IsPerformingImport && !SrcM->getModuleInlineAsm().empty()) {
|
||||
if (DstM.getModuleInlineAsm().empty())
|
||||
DstM.setModuleInlineAsm(SrcM->getModuleInlineAsm());
|
||||
else
|
||||
|
@ -1433,10 +1434,10 @@ IRMover::IRMover(Module &M) : Composite(M) {
|
|||
Error IRMover::move(
|
||||
std::unique_ptr<Module> Src, ArrayRef<GlobalValue *> ValuesToLink,
|
||||
std::function<void(GlobalValue &, ValueAdder Add)> AddLazyFor,
|
||||
bool LinkModuleInlineAsm, bool IsPerformingImport) {
|
||||
bool IsPerformingImport) {
|
||||
IRLinker TheIRLinker(Composite, SharedMDs, IdentifiedStructTypes,
|
||||
std::move(Src), ValuesToLink, std::move(AddLazyFor),
|
||||
LinkModuleInlineAsm, IsPerformingImport);
|
||||
IsPerformingImport);
|
||||
Error E = TheIRLinker.run();
|
||||
Composite.dropTriviallyDeadConstantArrays();
|
||||
return E;
|
||||
|
|
|
@ -538,7 +538,6 @@ bool ModuleLinker::run() {
|
|||
[this](GlobalValue &GV, IRMover::ValueAdder Add) {
|
||||
addLazyFor(GV, Add);
|
||||
},
|
||||
/* LinkModuleInlineAsm */ true,
|
||||
/* IsPerformingImport */ false)) {
|
||||
handleAllErrors(std::move(E), [&](ErrorInfoBase &EIB) {
|
||||
DstM.getContext().diagnose(LinkDiagnosticInfo(DS_Error, EIB.message()));
|
||||
|
|
|
@ -774,7 +774,7 @@ Expected<bool> FunctionImporter::importFunctions(
|
|||
|
||||
if (Mover.move(std::move(SrcModule), GlobalsToImport.getArrayRef(),
|
||||
[](GlobalValue &, IRMover::ValueAdder) {},
|
||||
/*LinkModuleInlineAsm=*/false, /*IsPerformingImport=*/true))
|
||||
/*IsPerformingImport=*/true))
|
||||
report_fatal_error("Function Import: link error");
|
||||
|
||||
ImportedCount += GlobalsToImport.size();
|
||||
|
|
Loading…
Reference in New Issue