xref: /llvm-project-15.0.7/llvm/lib/LTO/LTO.cpp (revision e6b7c28d)
1 //===-LTO.cpp - LLVM Link Time Optimizer ----------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements functions and classes used to support LTO.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "llvm/LTO/LTO.h"
15 #include "llvm/Analysis/TargetLibraryInfo.h"
16 #include "llvm/Analysis/TargetTransformInfo.h"
17 #include "llvm/Bitcode/BitcodeReader.h"
18 #include "llvm/Bitcode/BitcodeWriter.h"
19 #include "llvm/CodeGen/Analysis.h"
20 #include "llvm/IR/AutoUpgrade.h"
21 #include "llvm/IR/DiagnosticPrinter.h"
22 #include "llvm/IR/LegacyPassManager.h"
23 #include "llvm/IR/Mangler.h"
24 #include "llvm/IR/Metadata.h"
25 #include "llvm/LTO/LTOBackend.h"
26 #include "llvm/Linker/IRMover.h"
27 #include "llvm/Object/IRObjectFile.h"
28 #include "llvm/Object/ModuleSummaryIndexObjectFile.h"
29 #include "llvm/Support/Error.h"
30 #include "llvm/Support/ManagedStatic.h"
31 #include "llvm/Support/MemoryBuffer.h"
32 #include "llvm/Support/Path.h"
33 #include "llvm/Support/SHA1.h"
34 #include "llvm/Support/SourceMgr.h"
35 #include "llvm/Support/TargetRegistry.h"
36 #include "llvm/Support/ThreadPool.h"
37 #include "llvm/Support/Threading.h"
38 #include "llvm/Support/raw_ostream.h"
39 #include "llvm/Target/TargetMachine.h"
40 #include "llvm/Target/TargetOptions.h"
41 #include "llvm/Transforms/IPO.h"
42 #include "llvm/Transforms/IPO/PassManagerBuilder.h"
43 #include "llvm/Transforms/Utils/SplitModule.h"
44 
45 #include <set>
46 
47 using namespace llvm;
48 using namespace lto;
49 using namespace object;
50 
51 #define DEBUG_TYPE "lto"
52 
53 // The values are (type identifier, summary) pairs.
54 typedef DenseMap<
55     GlobalValue::GUID,
56     TinyPtrVector<const std::pair<const std::string, TypeIdSummary> *>>
57     TypeIdSummariesByGuidTy;
58 
59 // Returns a unique hash for the Module considering the current list of
60 // export/import and other global analysis results.
61 // The hash is produced in \p Key.
62 static void computeCacheKey(
63     SmallString<40> &Key, const Config &Conf, const ModuleSummaryIndex &Index,
64     StringRef ModuleID, const FunctionImporter::ImportMapTy &ImportList,
65     const FunctionImporter::ExportSetTy &ExportList,
66     const std::map<GlobalValue::GUID, GlobalValue::LinkageTypes> &ResolvedODR,
67     const GVSummaryMapTy &DefinedGlobals,
68     const TypeIdSummariesByGuidTy &TypeIdSummariesByGuid) {
69   // Compute the unique hash for this entry.
70   // This is based on the current compiler version, the module itself, the
71   // export list, the hash for every single module in the import list, the
72   // list of ResolvedODR for the module, and the list of preserved symbols.
73   SHA1 Hasher;
74 
75   // Start with the compiler revision
76   Hasher.update(LLVM_VERSION_STRING);
77 #ifdef HAVE_LLVM_REVISION
78   Hasher.update(LLVM_REVISION);
79 #endif
80 
81   // Include the parts of the LTO configuration that affect code generation.
82   auto AddString = [&](StringRef Str) {
83     Hasher.update(Str);
84     Hasher.update(ArrayRef<uint8_t>{0});
85   };
86   auto AddUnsigned = [&](unsigned I) {
87     uint8_t Data[4];
88     Data[0] = I;
89     Data[1] = I >> 8;
90     Data[2] = I >> 16;
91     Data[3] = I >> 24;
92     Hasher.update(ArrayRef<uint8_t>{Data, 4});
93   };
94   auto AddUint64 = [&](uint64_t I) {
95     uint8_t Data[8];
96     Data[0] = I;
97     Data[1] = I >> 8;
98     Data[2] = I >> 16;
99     Data[3] = I >> 24;
100     Data[4] = I >> 32;
101     Data[5] = I >> 40;
102     Data[6] = I >> 48;
103     Data[7] = I >> 56;
104     Hasher.update(ArrayRef<uint8_t>{Data, 8});
105   };
106   AddString(Conf.CPU);
107   // FIXME: Hash more of Options. For now all clients initialize Options from
108   // command-line flags (which is unsupported in production), but may set
109   // RelaxELFRelocations. The clang driver can also pass FunctionSections,
110   // DataSections and DebuggerTuning via command line flags.
111   AddUnsigned(Conf.Options.RelaxELFRelocations);
112   AddUnsigned(Conf.Options.FunctionSections);
113   AddUnsigned(Conf.Options.DataSections);
114   AddUnsigned((unsigned)Conf.Options.DebuggerTuning);
115   for (auto &A : Conf.MAttrs)
116     AddString(A);
117   AddUnsigned(Conf.RelocModel);
118   AddUnsigned(Conf.CodeModel);
119   AddUnsigned(Conf.CGOptLevel);
120   AddUnsigned(Conf.CGFileType);
121   AddUnsigned(Conf.OptLevel);
122   AddString(Conf.OptPipeline);
123   AddString(Conf.AAPipeline);
124   AddString(Conf.OverrideTriple);
125   AddString(Conf.DefaultTriple);
126 
127   // Include the hash for the current module
128   auto ModHash = Index.getModuleHash(ModuleID);
129   Hasher.update(ArrayRef<uint8_t>((uint8_t *)&ModHash[0], sizeof(ModHash)));
130   for (auto F : ExportList)
131     // The export list can impact the internalization, be conservative here
132     Hasher.update(ArrayRef<uint8_t>((uint8_t *)&F, sizeof(F)));
133 
134   // Include the hash for every module we import functions from. The set of
135   // imported symbols for each module may affect code generation and is
136   // sensitive to link order, so include that as well.
137   for (auto &Entry : ImportList) {
138     auto ModHash = Index.getModuleHash(Entry.first());
139     Hasher.update(ArrayRef<uint8_t>((uint8_t *)&ModHash[0], sizeof(ModHash)));
140 
141     AddUint64(Entry.second.size());
142     for (auto &Fn : Entry.second)
143       AddUint64(Fn.first);
144   }
145 
146   // Include the hash for the resolved ODR.
147   for (auto &Entry : ResolvedODR) {
148     Hasher.update(ArrayRef<uint8_t>((const uint8_t *)&Entry.first,
149                                     sizeof(GlobalValue::GUID)));
150     Hasher.update(ArrayRef<uint8_t>((const uint8_t *)&Entry.second,
151                                     sizeof(GlobalValue::LinkageTypes)));
152   }
153 
154   std::set<GlobalValue::GUID> UsedTypeIds;
155 
156   auto AddUsedTypeIds = [&](GlobalValueSummary *GS) {
157     auto *FS = dyn_cast_or_null<FunctionSummary>(GS);
158     if (!FS)
159       return;
160     for (auto &TT : FS->type_tests())
161       UsedTypeIds.insert(TT);
162     for (auto &TT : FS->type_test_assume_vcalls())
163       UsedTypeIds.insert(TT.GUID);
164     for (auto &TT : FS->type_checked_load_vcalls())
165       UsedTypeIds.insert(TT.GUID);
166     for (auto &TT : FS->type_test_assume_const_vcalls())
167       UsedTypeIds.insert(TT.VFunc.GUID);
168     for (auto &TT : FS->type_checked_load_const_vcalls())
169       UsedTypeIds.insert(TT.VFunc.GUID);
170   };
171 
172   // Include the hash for the linkage type to reflect internalization and weak
173   // resolution, and collect any used type identifier resolutions.
174   for (auto &GS : DefinedGlobals) {
175     GlobalValue::LinkageTypes Linkage = GS.second->linkage();
176     Hasher.update(
177         ArrayRef<uint8_t>((const uint8_t *)&Linkage, sizeof(Linkage)));
178     AddUsedTypeIds(GS.second);
179   }
180 
181   // Imported functions may introduce new uses of type identifier resolutions,
182   // so we need to collect their used resolutions as well.
183   for (auto &ImpM : ImportList)
184     for (auto &ImpF : ImpM.second)
185       AddUsedTypeIds(Index.findSummaryInModule(ImpF.first, ImpM.first()));
186 
187   auto AddTypeIdSummary = [&](StringRef TId, const TypeIdSummary &S) {
188     AddString(TId);
189 
190     AddUnsigned(S.TTRes.TheKind);
191     AddUnsigned(S.TTRes.SizeM1BitWidth);
192 
193     AddUint64(S.WPDRes.size());
194     for (auto &WPD : S.WPDRes) {
195       AddUnsigned(WPD.first);
196       AddUnsigned(WPD.second.TheKind);
197       AddString(WPD.second.SingleImplName);
198 
199       AddUint64(WPD.second.ResByArg.size());
200       for (auto &ByArg : WPD.second.ResByArg) {
201         AddUint64(ByArg.first.size());
202         for (uint64_t Arg : ByArg.first)
203           AddUint64(Arg);
204         AddUnsigned(ByArg.second.TheKind);
205         AddUint64(ByArg.second.Info);
206       }
207     }
208   };
209 
210   // Include the hash for all type identifiers used by this module.
211   for (GlobalValue::GUID TId : UsedTypeIds) {
212     auto SummariesI = TypeIdSummariesByGuid.find(TId);
213     if (SummariesI != TypeIdSummariesByGuid.end())
214       for (auto *Summary : SummariesI->second)
215         AddTypeIdSummary(Summary->first, Summary->second);
216   }
217 
218   if (!Conf.SampleProfile.empty()) {
219     auto FileOrErr = MemoryBuffer::getFile(Conf.SampleProfile);
220     if (FileOrErr)
221       Hasher.update(FileOrErr.get()->getBuffer());
222   }
223 
224   Key = toHex(Hasher.result());
225 }
226 
227 static void thinLTOResolveWeakForLinkerGUID(
228     GlobalValueSummaryList &GVSummaryList, GlobalValue::GUID GUID,
229     DenseSet<GlobalValueSummary *> &GlobalInvolvedWithAlias,
230     function_ref<bool(GlobalValue::GUID, const GlobalValueSummary *)>
231         isPrevailing,
232     function_ref<void(StringRef, GlobalValue::GUID, GlobalValue::LinkageTypes)>
233         recordNewLinkage) {
234   for (auto &S : GVSummaryList) {
235     GlobalValue::LinkageTypes OriginalLinkage = S->linkage();
236     if (!GlobalValue::isWeakForLinker(OriginalLinkage))
237       continue;
238     // We need to emit only one of these. The prevailing module will keep it,
239     // but turned into a weak, while the others will drop it when possible.
240     // This is both a compile-time optimization and a correctness
241     // transformation. This is necessary for correctness when we have exported
242     // a reference - we need to convert the linkonce to weak to
243     // ensure a copy is kept to satisfy the exported reference.
244     // FIXME: We may want to split the compile time and correctness
245     // aspects into separate routines.
246     if (isPrevailing(GUID, S.get())) {
247       if (GlobalValue::isLinkOnceLinkage(OriginalLinkage))
248         S->setLinkage(GlobalValue::getWeakLinkage(
249             GlobalValue::isLinkOnceODRLinkage(OriginalLinkage)));
250     }
251     // Alias and aliasee can't be turned into available_externally.
252     else if (!isa<AliasSummary>(S.get()) &&
253              !GlobalInvolvedWithAlias.count(S.get()))
254       S->setLinkage(GlobalValue::AvailableExternallyLinkage);
255     if (S->linkage() != OriginalLinkage)
256       recordNewLinkage(S->modulePath(), GUID, S->linkage());
257   }
258 }
259 
260 // Resolve Weak and LinkOnce values in the \p Index.
261 //
262 // We'd like to drop these functions if they are no longer referenced in the
263 // current module. However there is a chance that another module is still
264 // referencing them because of the import. We make sure we always emit at least
265 // one copy.
266 void llvm::thinLTOResolveWeakForLinkerInIndex(
267     ModuleSummaryIndex &Index,
268     function_ref<bool(GlobalValue::GUID, const GlobalValueSummary *)>
269         isPrevailing,
270     function_ref<void(StringRef, GlobalValue::GUID, GlobalValue::LinkageTypes)>
271         recordNewLinkage) {
272   // We won't optimize the globals that are referenced by an alias for now
273   // Ideally we should turn the alias into a global and duplicate the definition
274   // when needed.
275   DenseSet<GlobalValueSummary *> GlobalInvolvedWithAlias;
276   for (auto &I : Index)
277     for (auto &S : I.second)
278       if (auto AS = dyn_cast<AliasSummary>(S.get()))
279         GlobalInvolvedWithAlias.insert(&AS->getAliasee());
280 
281   for (auto &I : Index)
282     thinLTOResolveWeakForLinkerGUID(I.second, I.first, GlobalInvolvedWithAlias,
283                                     isPrevailing, recordNewLinkage);
284 }
285 
286 static void thinLTOInternalizeAndPromoteGUID(
287     GlobalValueSummaryList &GVSummaryList, GlobalValue::GUID GUID,
288     function_ref<bool(StringRef, GlobalValue::GUID)> isExported) {
289   for (auto &S : GVSummaryList) {
290     if (isExported(S->modulePath(), GUID)) {
291       if (GlobalValue::isLocalLinkage(S->linkage()))
292         S->setLinkage(GlobalValue::ExternalLinkage);
293     } else if (!GlobalValue::isLocalLinkage(S->linkage()))
294       S->setLinkage(GlobalValue::InternalLinkage);
295   }
296 }
297 
298 // Update the linkages in the given \p Index to mark exported values
299 // as external and non-exported values as internal.
300 void llvm::thinLTOInternalizeAndPromoteInIndex(
301     ModuleSummaryIndex &Index,
302     function_ref<bool(StringRef, GlobalValue::GUID)> isExported) {
303   for (auto &I : Index)
304     thinLTOInternalizeAndPromoteGUID(I.second, I.first, isExported);
305 }
306 
307 // Requires a destructor for std::vector<InputModule>.
308 InputFile::~InputFile() = default;
309 
310 Expected<std::unique_ptr<InputFile>> InputFile::create(MemoryBufferRef Object) {
311   std::unique_ptr<InputFile> File(new InputFile);
312 
313   ErrorOr<MemoryBufferRef> BCOrErr =
314       IRObjectFile::findBitcodeInMemBuffer(Object);
315   if (!BCOrErr)
316     return errorCodeToError(BCOrErr.getError());
317 
318   Expected<std::vector<BitcodeModule>> BMsOrErr =
319       getBitcodeModuleList(*BCOrErr);
320   if (!BMsOrErr)
321     return BMsOrErr.takeError();
322 
323   if (BMsOrErr->empty())
324     return make_error<StringError>("Bitcode file does not contain any modules",
325                                    inconvertibleErrorCode());
326 
327   File->Mods = *BMsOrErr;
328 
329   LLVMContext Ctx;
330   std::vector<Module *> Mods;
331   std::vector<std::unique_ptr<Module>> OwnedMods;
332   for (auto BM : *BMsOrErr) {
333     Expected<std::unique_ptr<Module>> MOrErr =
334         BM.getLazyModule(Ctx, /*ShouldLazyLoadMetadata*/ true,
335                          /*IsImporting*/ false);
336     if (!MOrErr)
337       return MOrErr.takeError();
338 
339     if ((*MOrErr)->getDataLayoutStr().empty())
340       return make_error<StringError>("input module has no datalayout",
341                                      inconvertibleErrorCode());
342 
343     Mods.push_back(MOrErr->get());
344     OwnedMods.push_back(std::move(*MOrErr));
345   }
346 
347   SmallVector<char, 0> Symtab;
348   if (Error E = irsymtab::build(Mods, Symtab, File->Strtab))
349     return std::move(E);
350 
351   irsymtab::Reader R({Symtab.data(), Symtab.size()},
352                      {File->Strtab.data(), File->Strtab.size()});
353   File->SourceFileName = R.getSourceFileName();
354   File->COFFLinkerOpts = R.getCOFFLinkerOpts();
355   File->ComdatTable = R.getComdatTable();
356 
357   for (unsigned I = 0; I != Mods.size(); ++I) {
358     size_t Begin = File->Symbols.size();
359     for (const irsymtab::Reader::SymbolRef &Sym : R.module_symbols(I))
360       // Skip symbols that are irrelevant to LTO. Note that this condition needs
361       // to match the one in Skip() in LTO::addRegularLTO().
362       if (Sym.isGlobal() && !Sym.isFormatSpecific())
363         File->Symbols.push_back(Sym);
364     File->ModuleSymIndices.push_back({Begin, File->Symbols.size()});
365   }
366 
367   return std::move(File);
368 }
369 
370 StringRef InputFile::getName() const {
371   return Mods[0].getModuleIdentifier();
372 }
373 
374 LTO::RegularLTOState::RegularLTOState(unsigned ParallelCodeGenParallelismLevel,
375                                       Config &Conf)
376     : ParallelCodeGenParallelismLevel(ParallelCodeGenParallelismLevel),
377       Ctx(Conf) {}
378 
379 LTO::ThinLTOState::ThinLTOState(ThinBackend Backend) : Backend(Backend) {
380   if (!Backend)
381     this->Backend =
382         createInProcessThinBackend(llvm::heavyweight_hardware_concurrency());
383 }
384 
385 LTO::LTO(Config Conf, ThinBackend Backend,
386          unsigned ParallelCodeGenParallelismLevel)
387     : Conf(std::move(Conf)),
388       RegularLTO(ParallelCodeGenParallelismLevel, this->Conf),
389       ThinLTO(std::move(Backend)) {}
390 
391 // Requires a destructor for MapVector<BitcodeModule>.
392 LTO::~LTO() = default;
393 
394 // Add the given symbol to the GlobalResolutions map, and resolve its partition.
395 void LTO::addSymbolToGlobalRes(const InputFile::Symbol &Sym,
396                                SymbolResolution Res, unsigned Partition) {
397   auto &GlobalRes = GlobalResolutions[Sym.getName()];
398   GlobalRes.UnnamedAddr &= Sym.isUnnamedAddr();
399   if (Res.Prevailing)
400     GlobalRes.IRName = Sym.getIRName();
401 
402   // Set the partition to external if we know it is used elsewhere, e.g.
403   // it is visible to a regular object, is referenced from llvm.compiler_used,
404   // or was already recorded as being referenced from a different partition.
405   if (Res.VisibleToRegularObj || Sym.isUsed() ||
406       (GlobalRes.Partition != GlobalResolution::Unknown &&
407        GlobalRes.Partition != Partition)) {
408     GlobalRes.Partition = GlobalResolution::External;
409   } else
410     // First recorded reference, save the current partition.
411     GlobalRes.Partition = Partition;
412 
413   // Flag as visible outside of ThinLTO if visible from a regular object or
414   // if this is a reference in the regular LTO partition.
415   GlobalRes.VisibleOutsideThinLTO |=
416       (Res.VisibleToRegularObj || (Partition == GlobalResolution::RegularLTO));
417 }
418 
419 static void writeToResolutionFile(raw_ostream &OS, InputFile *Input,
420                                   ArrayRef<SymbolResolution> Res) {
421   StringRef Path = Input->getName();
422   OS << Path << '\n';
423   auto ResI = Res.begin();
424   for (const InputFile::Symbol &Sym : Input->symbols()) {
425     assert(ResI != Res.end());
426     SymbolResolution Res = *ResI++;
427 
428     OS << "-r=" << Path << ',' << Sym.getName() << ',';
429     if (Res.Prevailing)
430       OS << 'p';
431     if (Res.FinalDefinitionInLinkageUnit)
432       OS << 'l';
433     if (Res.VisibleToRegularObj)
434       OS << 'x';
435     OS << '\n';
436   }
437   OS.flush();
438   assert(ResI == Res.end());
439 }
440 
441 Error LTO::add(std::unique_ptr<InputFile> Input,
442                ArrayRef<SymbolResolution> Res) {
443   assert(!CalledGetMaxTasks);
444 
445   if (Conf.ResolutionFile)
446     writeToResolutionFile(*Conf.ResolutionFile, Input.get(), Res);
447 
448   const SymbolResolution *ResI = Res.begin();
449   for (unsigned I = 0; I != Input->Mods.size(); ++I)
450     if (Error Err = addModule(*Input, I, ResI, Res.end()))
451       return Err;
452 
453   assert(ResI == Res.end());
454   return Error::success();
455 }
456 
457 Error LTO::addModule(InputFile &Input, unsigned ModI,
458                      const SymbolResolution *&ResI,
459                      const SymbolResolution *ResE) {
460   Expected<bool> HasThinLTOSummary = Input.Mods[ModI].hasSummary();
461   if (!HasThinLTOSummary)
462     return HasThinLTOSummary.takeError();
463 
464   auto ModSyms = Input.module_symbols(ModI);
465   if (*HasThinLTOSummary)
466     return addThinLTO(Input.Mods[ModI], ModSyms, ResI, ResE);
467   else
468     return addRegularLTO(Input.Mods[ModI], ModSyms, ResI, ResE);
469 }
470 
471 // Add a regular LTO object to the link.
472 Error LTO::addRegularLTO(BitcodeModule BM,
473                          ArrayRef<InputFile::Symbol> Syms,
474                          const SymbolResolution *&ResI,
475                          const SymbolResolution *ResE) {
476   if (!RegularLTO.CombinedModule) {
477     RegularLTO.CombinedModule =
478         llvm::make_unique<Module>("ld-temp.o", RegularLTO.Ctx);
479     RegularLTO.Mover = llvm::make_unique<IRMover>(*RegularLTO.CombinedModule);
480   }
481   Expected<std::unique_ptr<Module>> MOrErr =
482       BM.getLazyModule(RegularLTO.Ctx, /*ShouldLazyLoadMetadata*/ true,
483                        /*IsImporting*/ false);
484   if (!MOrErr)
485     return MOrErr.takeError();
486 
487   Module &M = **MOrErr;
488   if (Error Err = M.materializeMetadata())
489     return Err;
490   UpgradeDebugInfo(M);
491 
492   ModuleSymbolTable SymTab;
493   SymTab.addModule(&M);
494 
495   std::vector<GlobalValue *> Keep;
496 
497   for (GlobalVariable &GV : M.globals())
498     if (GV.hasAppendingLinkage())
499       Keep.push_back(&GV);
500 
501   DenseSet<GlobalObject *> AliasedGlobals;
502   for (auto &GA : M.aliases())
503     if (GlobalObject *GO = GA.getBaseObject())
504       AliasedGlobals.insert(GO);
505 
506   // In this function we need IR GlobalValues matching the symbols in Syms
507   // (which is not backed by a module), so we need to enumerate them in the same
508   // order. The symbol enumeration order of a ModuleSymbolTable intentionally
509   // matches the order of an irsymtab, but when we read the irsymtab in
510   // InputFile::create we omit some symbols that are irrelevant to LTO. The
511   // Skip() function skips the same symbols from the module as InputFile does
512   // from the symbol table.
513   auto MsymI = SymTab.symbols().begin(), MsymE = SymTab.symbols().end();
514   auto Skip = [&]() {
515     while (MsymI != MsymE) {
516       auto Flags = SymTab.getSymbolFlags(*MsymI);
517       if ((Flags & object::BasicSymbolRef::SF_Global) &&
518           !(Flags & object::BasicSymbolRef::SF_FormatSpecific))
519         return;
520       ++MsymI;
521     }
522   };
523   Skip();
524 
525   for (const InputFile::Symbol &Sym : Syms) {
526     assert(ResI != ResE);
527     SymbolResolution Res = *ResI++;
528     addSymbolToGlobalRes(Sym, Res, 0);
529 
530     assert(MsymI != MsymE);
531     ModuleSymbolTable::Symbol Msym = *MsymI++;
532     Skip();
533 
534     if (GlobalValue *GV = Msym.dyn_cast<GlobalValue *>()) {
535       if (Res.Prevailing) {
536         if (Sym.isUndefined())
537           continue;
538         Keep.push_back(GV);
539         switch (GV->getLinkage()) {
540         default:
541           break;
542         case GlobalValue::LinkOnceAnyLinkage:
543           GV->setLinkage(GlobalValue::WeakAnyLinkage);
544           break;
545         case GlobalValue::LinkOnceODRLinkage:
546           GV->setLinkage(GlobalValue::WeakODRLinkage);
547           break;
548         }
549       } else if (isa<GlobalObject>(GV) &&
550                  (GV->hasLinkOnceODRLinkage() || GV->hasWeakODRLinkage() ||
551                   GV->hasAvailableExternallyLinkage()) &&
552                  !AliasedGlobals.count(cast<GlobalObject>(GV))) {
553         // Either of the above three types of linkage indicates that the
554         // chosen prevailing symbol will have the same semantics as this copy of
555         // the symbol, so we can link it with available_externally linkage. We
556         // only need to do this if the symbol is undefined.
557         GlobalValue *CombinedGV =
558             RegularLTO.CombinedModule->getNamedValue(GV->getName());
559         if (!CombinedGV || CombinedGV->isDeclaration()) {
560           Keep.push_back(GV);
561           GV->setLinkage(GlobalValue::AvailableExternallyLinkage);
562           cast<GlobalObject>(GV)->setComdat(nullptr);
563         }
564       }
565     }
566     // Common resolution: collect the maximum size/alignment over all commons.
567     // We also record if we see an instance of a common as prevailing, so that
568     // if none is prevailing we can ignore it later.
569     if (Sym.isCommon()) {
570       // FIXME: We should figure out what to do about commons defined by asm.
571       // For now they aren't reported correctly by ModuleSymbolTable.
572       auto &CommonRes = RegularLTO.Commons[Sym.getIRName()];
573       CommonRes.Size = std::max(CommonRes.Size, Sym.getCommonSize());
574       CommonRes.Align = std::max(CommonRes.Align, Sym.getCommonAlignment());
575       CommonRes.Prevailing |= Res.Prevailing;
576     }
577 
578     // FIXME: use proposed local attribute for FinalDefinitionInLinkageUnit.
579   }
580   assert(MsymI == MsymE);
581 
582   return RegularLTO.Mover->move(std::move(*MOrErr), Keep,
583                                 [](GlobalValue &, IRMover::ValueAdder) {},
584                                 /* IsPerformingImport */ false);
585 }
586 
587 // Add a ThinLTO object to the link.
588 Error LTO::addThinLTO(BitcodeModule BM,
589                       ArrayRef<InputFile::Symbol> Syms,
590                       const SymbolResolution *&ResI,
591                       const SymbolResolution *ResE) {
592   Expected<std::unique_ptr<ModuleSummaryIndex>> SummaryOrErr = BM.getSummary();
593   if (!SummaryOrErr)
594     return SummaryOrErr.takeError();
595   ThinLTO.CombinedIndex.mergeFrom(std::move(*SummaryOrErr),
596                                   ThinLTO.ModuleMap.size());
597 
598   for (const InputFile::Symbol &Sym : Syms) {
599     assert(ResI != ResE);
600     SymbolResolution Res = *ResI++;
601     addSymbolToGlobalRes(Sym, Res, ThinLTO.ModuleMap.size() + 1);
602 
603     if (Res.Prevailing) {
604       if (!Sym.getIRName().empty()) {
605         auto GUID = GlobalValue::getGUID(GlobalValue::getGlobalIdentifier(
606             Sym.getIRName(), GlobalValue::ExternalLinkage, ""));
607         ThinLTO.PrevailingModuleForGUID[GUID] = BM.getModuleIdentifier();
608       }
609     }
610   }
611 
612   if (!ThinLTO.ModuleMap.insert({BM.getModuleIdentifier(), BM}).second)
613     return make_error<StringError>(
614         "Expected at most one ThinLTO module per bitcode file",
615         inconvertibleErrorCode());
616 
617   return Error::success();
618 }
619 
620 unsigned LTO::getMaxTasks() const {
621   CalledGetMaxTasks = true;
622   return RegularLTO.ParallelCodeGenParallelismLevel + ThinLTO.ModuleMap.size();
623 }
624 
625 Error LTO::run(AddStreamFn AddStream, NativeObjectCache Cache) {
626   // Save the status of having a regularLTO combined module, as
627   // this is needed for generating the ThinLTO Task ID, and
628   // the CombinedModule will be moved at the end of runRegularLTO.
629   bool HasRegularLTO = RegularLTO.CombinedModule != nullptr;
630   // Invoke regular LTO if there was a regular LTO module to start with.
631   if (HasRegularLTO)
632     if (auto E = runRegularLTO(AddStream))
633       return E;
634   return runThinLTO(AddStream, Cache, HasRegularLTO);
635 }
636 
637 Error LTO::runRegularLTO(AddStreamFn AddStream) {
638   // Make sure commons have the right size/alignment: we kept the largest from
639   // all the prevailing when adding the inputs, and we apply it here.
640   const DataLayout &DL = RegularLTO.CombinedModule->getDataLayout();
641   for (auto &I : RegularLTO.Commons) {
642     if (!I.second.Prevailing)
643       // Don't do anything if no instance of this common was prevailing.
644       continue;
645     GlobalVariable *OldGV = RegularLTO.CombinedModule->getNamedGlobal(I.first);
646     if (OldGV && DL.getTypeAllocSize(OldGV->getValueType()) == I.second.Size) {
647       // Don't create a new global if the type is already correct, just make
648       // sure the alignment is correct.
649       OldGV->setAlignment(I.second.Align);
650       continue;
651     }
652     ArrayType *Ty =
653         ArrayType::get(Type::getInt8Ty(RegularLTO.Ctx), I.second.Size);
654     auto *GV = new GlobalVariable(*RegularLTO.CombinedModule, Ty, false,
655                                   GlobalValue::CommonLinkage,
656                                   ConstantAggregateZero::get(Ty), "");
657     GV->setAlignment(I.second.Align);
658     if (OldGV) {
659       OldGV->replaceAllUsesWith(ConstantExpr::getBitCast(GV, OldGV->getType()));
660       GV->takeName(OldGV);
661       OldGV->eraseFromParent();
662     } else {
663       GV->setName(I.first);
664     }
665   }
666 
667   if (Conf.PreOptModuleHook &&
668       !Conf.PreOptModuleHook(0, *RegularLTO.CombinedModule))
669     return Error::success();
670 
671   if (!Conf.CodeGenOnly) {
672     for (const auto &R : GlobalResolutions) {
673       if (R.second.IRName.empty())
674         continue;
675       if (R.second.Partition != 0 &&
676           R.second.Partition != GlobalResolution::External)
677         continue;
678 
679       GlobalValue *GV =
680           RegularLTO.CombinedModule->getNamedValue(R.second.IRName);
681       // Ignore symbols defined in other partitions.
682       if (!GV || GV->hasLocalLinkage())
683         continue;
684       GV->setUnnamedAddr(R.second.UnnamedAddr ? GlobalValue::UnnamedAddr::Global
685                                               : GlobalValue::UnnamedAddr::None);
686       if (R.second.Partition == 0)
687         GV->setLinkage(GlobalValue::InternalLinkage);
688     }
689 
690     if (Conf.PostInternalizeModuleHook &&
691         !Conf.PostInternalizeModuleHook(0, *RegularLTO.CombinedModule))
692       return Error::success();
693   }
694   return backend(Conf, AddStream, RegularLTO.ParallelCodeGenParallelismLevel,
695                  std::move(RegularLTO.CombinedModule), ThinLTO.CombinedIndex);
696 }
697 
698 /// This class defines the interface to the ThinLTO backend.
699 class lto::ThinBackendProc {
700 protected:
701   Config &Conf;
702   ModuleSummaryIndex &CombinedIndex;
703   const StringMap<GVSummaryMapTy> &ModuleToDefinedGVSummaries;
704 
705 public:
706   ThinBackendProc(Config &Conf, ModuleSummaryIndex &CombinedIndex,
707                   const StringMap<GVSummaryMapTy> &ModuleToDefinedGVSummaries)
708       : Conf(Conf), CombinedIndex(CombinedIndex),
709         ModuleToDefinedGVSummaries(ModuleToDefinedGVSummaries) {}
710 
711   virtual ~ThinBackendProc() {}
712   virtual Error start(
713       unsigned Task, BitcodeModule BM,
714       const FunctionImporter::ImportMapTy &ImportList,
715       const FunctionImporter::ExportSetTy &ExportList,
716       const std::map<GlobalValue::GUID, GlobalValue::LinkageTypes> &ResolvedODR,
717       MapVector<StringRef, BitcodeModule> &ModuleMap) = 0;
718   virtual Error wait() = 0;
719 };
720 
721 namespace {
722 class InProcessThinBackend : public ThinBackendProc {
723   ThreadPool BackendThreadPool;
724   AddStreamFn AddStream;
725   NativeObjectCache Cache;
726   TypeIdSummariesByGuidTy TypeIdSummariesByGuid;
727 
728   Optional<Error> Err;
729   std::mutex ErrMu;
730 
731 public:
732   InProcessThinBackend(
733       Config &Conf, ModuleSummaryIndex &CombinedIndex,
734       unsigned ThinLTOParallelismLevel,
735       const StringMap<GVSummaryMapTy> &ModuleToDefinedGVSummaries,
736       AddStreamFn AddStream, NativeObjectCache Cache)
737       : ThinBackendProc(Conf, CombinedIndex, ModuleToDefinedGVSummaries),
738         BackendThreadPool(ThinLTOParallelismLevel),
739         AddStream(std::move(AddStream)), Cache(std::move(Cache)) {
740     // Create a mapping from type identifier GUIDs to type identifier summaries.
741     // This allows backends to use the type identifier GUIDs stored in the
742     // function summaries to determine which type identifier summaries affect
743     // each function without needing to compute GUIDs in each backend.
744     for (auto &TId : CombinedIndex.typeIds())
745       TypeIdSummariesByGuid[GlobalValue::getGUID(TId.first)].push_back(&TId);
746   }
747 
748   Error runThinLTOBackendThread(
749       AddStreamFn AddStream, NativeObjectCache Cache, unsigned Task,
750       BitcodeModule BM, ModuleSummaryIndex &CombinedIndex,
751       const FunctionImporter::ImportMapTy &ImportList,
752       const FunctionImporter::ExportSetTy &ExportList,
753       const std::map<GlobalValue::GUID, GlobalValue::LinkageTypes> &ResolvedODR,
754       const GVSummaryMapTy &DefinedGlobals,
755       MapVector<StringRef, BitcodeModule> &ModuleMap,
756       const TypeIdSummariesByGuidTy &TypeIdSummariesByGuid) {
757     auto RunThinBackend = [&](AddStreamFn AddStream) {
758       LTOLLVMContext BackendContext(Conf);
759       Expected<std::unique_ptr<Module>> MOrErr = BM.parseModule(BackendContext);
760       if (!MOrErr)
761         return MOrErr.takeError();
762 
763       return thinBackend(Conf, Task, AddStream, **MOrErr, CombinedIndex,
764                          ImportList, DefinedGlobals, ModuleMap);
765     };
766 
767     auto ModuleID = BM.getModuleIdentifier();
768 
769     if (!Cache || !CombinedIndex.modulePaths().count(ModuleID) ||
770         all_of(CombinedIndex.getModuleHash(ModuleID),
771                [](uint32_t V) { return V == 0; }))
772       // Cache disabled or no entry for this module in the combined index or
773       // no module hash.
774       return RunThinBackend(AddStream);
775 
776     SmallString<40> Key;
777     // The module may be cached, this helps handling it.
778     computeCacheKey(Key, Conf, CombinedIndex, ModuleID, ImportList, ExportList,
779                     ResolvedODR, DefinedGlobals, TypeIdSummariesByGuid);
780     if (AddStreamFn CacheAddStream = Cache(Task, Key))
781       return RunThinBackend(CacheAddStream);
782 
783     return Error::success();
784   }
785 
786   Error start(
787       unsigned Task, BitcodeModule BM,
788       const FunctionImporter::ImportMapTy &ImportList,
789       const FunctionImporter::ExportSetTy &ExportList,
790       const std::map<GlobalValue::GUID, GlobalValue::LinkageTypes> &ResolvedODR,
791       MapVector<StringRef, BitcodeModule> &ModuleMap) override {
792     StringRef ModulePath = BM.getModuleIdentifier();
793     assert(ModuleToDefinedGVSummaries.count(ModulePath));
794     const GVSummaryMapTy &DefinedGlobals =
795         ModuleToDefinedGVSummaries.find(ModulePath)->second;
796     BackendThreadPool.async(
797         [=](BitcodeModule BM, ModuleSummaryIndex &CombinedIndex,
798             const FunctionImporter::ImportMapTy &ImportList,
799             const FunctionImporter::ExportSetTy &ExportList,
800             const std::map<GlobalValue::GUID, GlobalValue::LinkageTypes>
801                 &ResolvedODR,
802             const GVSummaryMapTy &DefinedGlobals,
803             MapVector<StringRef, BitcodeModule> &ModuleMap,
804             const TypeIdSummariesByGuidTy &TypeIdSummariesByGuid) {
805           Error E = runThinLTOBackendThread(
806               AddStream, Cache, Task, BM, CombinedIndex, ImportList, ExportList,
807               ResolvedODR, DefinedGlobals, ModuleMap, TypeIdSummariesByGuid);
808           if (E) {
809             std::unique_lock<std::mutex> L(ErrMu);
810             if (Err)
811               Err = joinErrors(std::move(*Err), std::move(E));
812             else
813               Err = std::move(E);
814           }
815         },
816         BM, std::ref(CombinedIndex), std::ref(ImportList), std::ref(ExportList),
817         std::ref(ResolvedODR), std::ref(DefinedGlobals), std::ref(ModuleMap),
818         std::ref(TypeIdSummariesByGuid));
819     return Error::success();
820   }
821 
822   Error wait() override {
823     BackendThreadPool.wait();
824     if (Err)
825       return std::move(*Err);
826     else
827       return Error::success();
828   }
829 };
830 } // end anonymous namespace
831 
832 ThinBackend lto::createInProcessThinBackend(unsigned ParallelismLevel) {
833   return [=](Config &Conf, ModuleSummaryIndex &CombinedIndex,
834              const StringMap<GVSummaryMapTy> &ModuleToDefinedGVSummaries,
835              AddStreamFn AddStream, NativeObjectCache Cache) {
836     return llvm::make_unique<InProcessThinBackend>(
837         Conf, CombinedIndex, ParallelismLevel, ModuleToDefinedGVSummaries,
838         AddStream, Cache);
839   };
840 }
841 
842 // Given the original \p Path to an output file, replace any path
843 // prefix matching \p OldPrefix with \p NewPrefix. Also, create the
844 // resulting directory if it does not yet exist.
845 std::string lto::getThinLTOOutputFile(const std::string &Path,
846                                       const std::string &OldPrefix,
847                                       const std::string &NewPrefix) {
848   if (OldPrefix.empty() && NewPrefix.empty())
849     return Path;
850   SmallString<128> NewPath(Path);
851   llvm::sys::path::replace_path_prefix(NewPath, OldPrefix, NewPrefix);
852   StringRef ParentPath = llvm::sys::path::parent_path(NewPath.str());
853   if (!ParentPath.empty()) {
854     // Make sure the new directory exists, creating it if necessary.
855     if (std::error_code EC = llvm::sys::fs::create_directories(ParentPath))
856       llvm::errs() << "warning: could not create directory '" << ParentPath
857                    << "': " << EC.message() << '\n';
858   }
859   return NewPath.str();
860 }
861 
862 namespace {
863 class WriteIndexesThinBackend : public ThinBackendProc {
864   std::string OldPrefix, NewPrefix;
865   bool ShouldEmitImportsFiles;
866 
867   std::string LinkedObjectsFileName;
868   std::unique_ptr<llvm::raw_fd_ostream> LinkedObjectsFile;
869 
870 public:
871   WriteIndexesThinBackend(
872       Config &Conf, ModuleSummaryIndex &CombinedIndex,
873       const StringMap<GVSummaryMapTy> &ModuleToDefinedGVSummaries,
874       std::string OldPrefix, std::string NewPrefix, bool ShouldEmitImportsFiles,
875       std::string LinkedObjectsFileName)
876       : ThinBackendProc(Conf, CombinedIndex, ModuleToDefinedGVSummaries),
877         OldPrefix(OldPrefix), NewPrefix(NewPrefix),
878         ShouldEmitImportsFiles(ShouldEmitImportsFiles),
879         LinkedObjectsFileName(LinkedObjectsFileName) {}
880 
881   Error start(
882       unsigned Task, BitcodeModule BM,
883       const FunctionImporter::ImportMapTy &ImportList,
884       const FunctionImporter::ExportSetTy &ExportList,
885       const std::map<GlobalValue::GUID, GlobalValue::LinkageTypes> &ResolvedODR,
886       MapVector<StringRef, BitcodeModule> &ModuleMap) override {
887     StringRef ModulePath = BM.getModuleIdentifier();
888     std::string NewModulePath =
889         getThinLTOOutputFile(ModulePath, OldPrefix, NewPrefix);
890 
891     std::error_code EC;
892     if (!LinkedObjectsFileName.empty()) {
893       if (!LinkedObjectsFile) {
894         LinkedObjectsFile = llvm::make_unique<raw_fd_ostream>(
895             LinkedObjectsFileName, EC, sys::fs::OpenFlags::F_None);
896         if (EC)
897           return errorCodeToError(EC);
898       }
899       *LinkedObjectsFile << NewModulePath << '\n';
900     }
901 
902     std::map<std::string, GVSummaryMapTy> ModuleToSummariesForIndex;
903     gatherImportedSummariesForModule(ModulePath, ModuleToDefinedGVSummaries,
904                                      ImportList, ModuleToSummariesForIndex);
905 
906     raw_fd_ostream OS(NewModulePath + ".thinlto.bc", EC,
907                       sys::fs::OpenFlags::F_None);
908     if (EC)
909       return errorCodeToError(EC);
910     WriteIndexToFile(CombinedIndex, OS, &ModuleToSummariesForIndex);
911 
912     if (ShouldEmitImportsFiles)
913       return errorCodeToError(
914           EmitImportsFiles(ModulePath, NewModulePath + ".imports", ImportList));
915     return Error::success();
916   }
917 
918   Error wait() override { return Error::success(); }
919 };
920 } // end anonymous namespace
921 
922 ThinBackend lto::createWriteIndexesThinBackend(std::string OldPrefix,
923                                                std::string NewPrefix,
924                                                bool ShouldEmitImportsFiles,
925                                                std::string LinkedObjectsFile) {
926   return [=](Config &Conf, ModuleSummaryIndex &CombinedIndex,
927              const StringMap<GVSummaryMapTy> &ModuleToDefinedGVSummaries,
928              AddStreamFn AddStream, NativeObjectCache Cache) {
929     return llvm::make_unique<WriteIndexesThinBackend>(
930         Conf, CombinedIndex, ModuleToDefinedGVSummaries, OldPrefix, NewPrefix,
931         ShouldEmitImportsFiles, LinkedObjectsFile);
932   };
933 }
934 
935 Error LTO::runThinLTO(AddStreamFn AddStream, NativeObjectCache Cache,
936                       bool HasRegularLTO) {
937   if (ThinLTO.ModuleMap.empty())
938     return Error::success();
939 
940   if (Conf.CombinedIndexHook && !Conf.CombinedIndexHook(ThinLTO.CombinedIndex))
941     return Error::success();
942 
943   // Collect for each module the list of function it defines (GUID ->
944   // Summary).
945   StringMap<std::map<GlobalValue::GUID, GlobalValueSummary *>>
946       ModuleToDefinedGVSummaries(ThinLTO.ModuleMap.size());
947   ThinLTO.CombinedIndex.collectDefinedGVSummariesPerModule(
948       ModuleToDefinedGVSummaries);
949   // Create entries for any modules that didn't have any GV summaries
950   // (either they didn't have any GVs to start with, or we suppressed
951   // generation of the summaries because they e.g. had inline assembly
952   // uses that couldn't be promoted/renamed on export). This is so
953   // InProcessThinBackend::start can still launch a backend thread, which
954   // is passed the map of summaries for the module, without any special
955   // handling for this case.
956   for (auto &Mod : ThinLTO.ModuleMap)
957     if (!ModuleToDefinedGVSummaries.count(Mod.first))
958       ModuleToDefinedGVSummaries.try_emplace(Mod.first);
959 
960   StringMap<FunctionImporter::ImportMapTy> ImportLists(
961       ThinLTO.ModuleMap.size());
962   StringMap<FunctionImporter::ExportSetTy> ExportLists(
963       ThinLTO.ModuleMap.size());
964   StringMap<std::map<GlobalValue::GUID, GlobalValue::LinkageTypes>> ResolvedODR;
965 
966   if (Conf.OptLevel > 0) {
967     // Compute "dead" symbols, we don't want to import/export these!
968     DenseSet<GlobalValue::GUID> GUIDPreservedSymbols;
969     for (auto &Res : GlobalResolutions) {
970       if (Res.second.VisibleOutsideThinLTO &&
971           // IRName will be defined if we have seen the prevailing copy of
972           // this value. If not, no need to preserve any ThinLTO copies.
973           !Res.second.IRName.empty())
974         GUIDPreservedSymbols.insert(GlobalValue::getGUID(
975             GlobalValue::getRealLinkageName(Res.second.IRName)));
976     }
977 
978     auto DeadSymbols =
979         computeDeadSymbols(ThinLTO.CombinedIndex, GUIDPreservedSymbols);
980 
981     ComputeCrossModuleImport(ThinLTO.CombinedIndex, ModuleToDefinedGVSummaries,
982                              ImportLists, ExportLists, &DeadSymbols);
983 
984     std::set<GlobalValue::GUID> ExportedGUIDs;
985     for (auto &Res : GlobalResolutions) {
986       // First check if the symbol was flagged as having external references.
987       if (Res.second.Partition != GlobalResolution::External)
988         continue;
989       // IRName will be defined if we have seen the prevailing copy of
990       // this value. If not, no need to mark as exported from a ThinLTO
991       // partition (and we can't get the GUID).
992       if (Res.second.IRName.empty())
993         continue;
994       auto GUID = GlobalValue::getGUID(
995           GlobalValue::getRealLinkageName(Res.second.IRName));
996       // Mark exported unless index-based analysis determined it to be dead.
997       if (!DeadSymbols.count(GUID))
998         ExportedGUIDs.insert(GUID);
999     }
1000 
1001     auto isPrevailing = [&](GlobalValue::GUID GUID,
1002                             const GlobalValueSummary *S) {
1003       return ThinLTO.PrevailingModuleForGUID[GUID] == S->modulePath();
1004     };
1005     auto isExported = [&](StringRef ModuleIdentifier, GlobalValue::GUID GUID) {
1006       const auto &ExportList = ExportLists.find(ModuleIdentifier);
1007       return (ExportList != ExportLists.end() &&
1008               ExportList->second.count(GUID)) ||
1009              ExportedGUIDs.count(GUID);
1010     };
1011     thinLTOInternalizeAndPromoteInIndex(ThinLTO.CombinedIndex, isExported);
1012 
1013     auto recordNewLinkage = [&](StringRef ModuleIdentifier,
1014                                 GlobalValue::GUID GUID,
1015                                 GlobalValue::LinkageTypes NewLinkage) {
1016       ResolvedODR[ModuleIdentifier][GUID] = NewLinkage;
1017     };
1018 
1019     thinLTOResolveWeakForLinkerInIndex(ThinLTO.CombinedIndex, isPrevailing,
1020                                        recordNewLinkage);
1021   }
1022 
1023   std::unique_ptr<ThinBackendProc> BackendProc =
1024       ThinLTO.Backend(Conf, ThinLTO.CombinedIndex, ModuleToDefinedGVSummaries,
1025                       AddStream, Cache);
1026 
1027   // Task numbers start at ParallelCodeGenParallelismLevel if an LTO
1028   // module is present, as tasks 0 through ParallelCodeGenParallelismLevel-1
1029   // are reserved for parallel code generation partitions.
1030   unsigned Task =
1031       HasRegularLTO ? RegularLTO.ParallelCodeGenParallelismLevel : 0;
1032   for (auto &Mod : ThinLTO.ModuleMap) {
1033     if (Error E = BackendProc->start(Task, Mod.second, ImportLists[Mod.first],
1034                                      ExportLists[Mod.first],
1035                                      ResolvedODR[Mod.first], ThinLTO.ModuleMap))
1036       return E;
1037     ++Task;
1038   }
1039 
1040   return BackendProc->wait();
1041 }
1042 
1043 Expected<std::unique_ptr<tool_output_file>>
1044 lto::setupOptimizationRemarks(LLVMContext &Context,
1045                               StringRef LTORemarksFilename,
1046                               bool LTOPassRemarksWithHotness, int Count) {
1047   if (LTORemarksFilename.empty())
1048     return nullptr;
1049 
1050   std::string Filename = LTORemarksFilename;
1051   if (Count != -1)
1052     Filename += ".thin." + llvm::utostr(Count) + ".yaml";
1053 
1054   std::error_code EC;
1055   auto DiagnosticFile =
1056       llvm::make_unique<tool_output_file>(Filename, EC, sys::fs::F_None);
1057   if (EC)
1058     return errorCodeToError(EC);
1059   Context.setDiagnosticsOutputFile(
1060       llvm::make_unique<yaml::Output>(DiagnosticFile->os()));
1061   if (LTOPassRemarksWithHotness)
1062     Context.setDiagnosticHotnessRequested(true);
1063   DiagnosticFile->keep();
1064   return std::move(DiagnosticFile);
1065 }
1066