@@ -1172,7 +1172,7 @@ Error LTO::checkPartiallySplit() {
11721172 return Error::success ();
11731173}
11741174
1175- Error LTO::run (AddStreamFn AddStream, FileCache Cache) {
1175+ Error LTO::run (AddStreamFn AddStream, FileCache Cache, AddBufferFn AddBuffer ) {
11761176 // Compute "dead" symbols, we don't want to import/export these!
11771177 DenseSet<GlobalValue::GUID> GUIDPreservedSymbols;
11781178 DenseMap<GlobalValue::GUID, PrevailingType> GUIDPrevailingResolutions;
@@ -1222,7 +1222,7 @@ Error LTO::run(AddStreamFn AddStream, FileCache Cache) {
12221222 if (!Result)
12231223 // This will reset the GlobalResolutions optional once done with it to
12241224 // reduce peak memory before importing.
1225- Result = runThinLTO (AddStream, Cache, GUIDPreservedSymbols);
1225+ Result = runThinLTO (AddStream, AddBuffer, Cache, GUIDPreservedSymbols);
12261226
12271227 if (StatsFile)
12281228 PrintStatisticsJSON (StatsFile->os ());
@@ -1448,7 +1448,6 @@ Error ThinBackendProc::emitFiles(
14481448namespace {
14491449class CGThinBackend : public ThinBackendProc {
14501450protected:
1451- AddStreamFn AddStream;
14521451 DenseSet<GlobalValue::GUID> CfiFunctionDefs;
14531452 DenseSet<GlobalValue::GUID> CfiFunctionDecls;
14541453 bool ShouldEmitIndexFiles;
@@ -1457,12 +1456,10 @@ class CGThinBackend : public ThinBackendProc {
14571456 CGThinBackend (
14581457 const Config &Conf, ModuleSummaryIndex &CombinedIndex,
14591458 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1460- AddStreamFn AddStream, lto::IndexWriteCallback OnWrite,
1461- bool ShouldEmitIndexFiles, bool ShouldEmitImportsFiles,
1462- ThreadPoolStrategy ThinLTOParallelism)
1459+ lto::IndexWriteCallback OnWrite, bool ShouldEmitIndexFiles,
1460+ bool ShouldEmitImportsFiles, ThreadPoolStrategy ThinLTOParallelism)
14631461 : ThinBackendProc(Conf, CombinedIndex, ModuleToDefinedGVSummaries,
14641462 OnWrite, ShouldEmitImportsFiles, ThinLTOParallelism),
1465- AddStream (std::move(AddStream)),
14661463 ShouldEmitIndexFiles (ShouldEmitIndexFiles) {
14671464 for (auto &Name : CombinedIndex.cfiFunctionDefs ())
14681465 CfiFunctionDefs.insert (
@@ -1475,6 +1472,7 @@ class CGThinBackend : public ThinBackendProc {
14751472
14761473class InProcessThinBackend : public CGThinBackend {
14771474protected:
1475+ AddStreamFn AddStream;
14781476 FileCache Cache;
14791477
14801478public:
@@ -1484,10 +1482,10 @@ class InProcessThinBackend : public CGThinBackend {
14841482 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
14851483 AddStreamFn AddStream, FileCache Cache, lto::IndexWriteCallback OnWrite,
14861484 bool ShouldEmitIndexFiles, bool ShouldEmitImportsFiles)
1487- : CGThinBackend(Conf, CombinedIndex, ModuleToDefinedGVSummaries,
1488- AddStream, OnWrite, ShouldEmitIndexFiles ,
1489- ShouldEmitImportsFiles, ThinLTOParallelism),
1490- Cache (std::move(Cache)) {}
1485+ : CGThinBackend(Conf, CombinedIndex, ModuleToDefinedGVSummaries, OnWrite,
1486+ ShouldEmitIndexFiles, ShouldEmitImportsFiles ,
1487+ ThinLTOParallelism),
1488+ AddStream (std::move(AddStream)), Cache(std::move(Cache)) {}
14911489
14921490 virtual Error runThinLTOBackendThread (
14931491 AddStreamFn AddStream, FileCache Cache, unsigned Task, BitcodeModule BM,
@@ -1755,7 +1753,7 @@ ThinBackend lto::createInProcessThinBackend(ThreadPoolStrategy Parallelism,
17551753 auto Func =
17561754 [=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
17571755 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1758- AddStreamFn AddStream, FileCache Cache) {
1756+ AddStreamFn AddStream, AddBufferFn /* AddBuffer */ , FileCache Cache) {
17591757 return std::make_unique<InProcessThinBackend>(
17601758 Conf, CombinedIndex, Parallelism, ModuleToDefinedGVSummaries,
17611759 AddStream, Cache, OnWrite, ShouldEmitIndexFiles,
@@ -1877,7 +1875,7 @@ ThinBackend lto::createWriteIndexesThinBackend(
18771875 auto Func =
18781876 [=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
18791877 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1880- AddStreamFn AddStream, FileCache Cache) {
1878+ AddStreamFn AddStream, AddBufferFn AddBuffer, FileCache Cache) {
18811879 return std::make_unique<WriteIndexesThinBackend>(
18821880 Conf, CombinedIndex, Parallelism, ModuleToDefinedGVSummaries,
18831881 OldPrefix, NewPrefix, NativeObjectPrefix, ShouldEmitImportsFiles,
@@ -1886,7 +1884,8 @@ ThinBackend lto::createWriteIndexesThinBackend(
18861884 return ThinBackend (Func, Parallelism);
18871885}
18881886
1889- Error LTO::runThinLTO (AddStreamFn AddStream, FileCache Cache,
1887+ Error LTO::runThinLTO (AddStreamFn AddStream, AddBufferFn AddBuffer,
1888+ FileCache Cache,
18901889 const DenseSet<GlobalValue::GUID> &GUIDPreservedSymbols) {
18911890 LLVM_DEBUG (dbgs () << " Running ThinLTO\n " );
18921891 ThinLTO.CombinedIndex .releaseTemporaryMemory ();
@@ -2094,7 +2093,7 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
20942093 if (!CodeGenDataThinLTOTwoRounds) {
20952094 std::unique_ptr<ThinBackendProc> BackendProc =
20962095 ThinLTO.Backend (Conf, ThinLTO.CombinedIndex , ModuleToDefinedGVSummaries,
2097- AddStream, Cache);
2096+ AddStream, AddBuffer, Cache);
20982097 return RunBackends (BackendProc.get ());
20992098 }
21002099
@@ -2201,6 +2200,8 @@ namespace {
22012200class OutOfProcessThinBackend : public CGThinBackend {
22022201 using SString = SmallString<128 >;
22032202
2203+ AddBufferFn AddBuffer;
2204+
22042205 BumpPtrAllocator Alloc;
22052206 StringSaver Saver{Alloc};
22062207
@@ -2232,15 +2233,16 @@ class OutOfProcessThinBackend : public CGThinBackend {
22322233 const Config &Conf, ModuleSummaryIndex &CombinedIndex,
22332234 ThreadPoolStrategy ThinLTOParallelism,
22342235 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
2235- AddStreamFn AddStream, lto::IndexWriteCallback OnWrite,
2236- bool ShouldEmitIndexFiles, bool ShouldEmitImportsFiles,
2237- StringRef LinkerOutputFile, StringRef RemoteOptTool,
2238- StringRef Distributor, bool SaveTemps)
2239- : CGThinBackend(Conf, CombinedIndex, ModuleToDefinedGVSummaries,
2240- AddStream, OnWrite, ShouldEmitIndexFiles,
2241- ShouldEmitImportsFiles, ThinLTOParallelism),
2242- LinkerOutputFile (LinkerOutputFile), RemoteOptTool(RemoteOptTool),
2243- DistributorPath(Distributor), SaveTemps(SaveTemps) {}
2236+ AddStreamFn AddStream, AddBufferFn AddBuffer,
2237+ lto::IndexWriteCallback OnWrite, bool ShouldEmitIndexFiles,
2238+ bool ShouldEmitImportsFiles, StringRef LinkerOutputFile,
2239+ StringRef RemoteOptTool, StringRef Distributor, bool SaveTemps)
2240+ : CGThinBackend(Conf, CombinedIndex, ModuleToDefinedGVSummaries, OnWrite,
2241+ ShouldEmitIndexFiles, ShouldEmitImportsFiles,
2242+ ThinLTOParallelism),
2243+ AddBuffer (std::move(AddBuffer)), LinkerOutputFile(LinkerOutputFile),
2244+ RemoteOptTool(RemoteOptTool), DistributorPath(Distributor),
2245+ SaveTemps(SaveTemps) {}
22442246
22452247 virtual void setup (unsigned MaxTasks) override {
22462248 UID = itostr (sys::Process::getProcessId ());
@@ -2484,13 +2486,7 @@ class OutOfProcessThinBackend : public CGThinBackend {
24842486 BCError + " cannot open native object file: " +
24852487 Job.NativeObjectPath + " : " + ec.message (),
24862488 inconvertibleErrorCode ());
2487- std::unique_ptr<llvm::MemoryBuffer> umb = std::move (objFileMbOrErr.get ());
2488- Expected<std::unique_ptr<CachedFileStream>> StreamOrErr =
2489- AddStream (Job.Task , Job.ModuleID );
2490- if (Error Err = StreamOrErr.takeError ())
2491- report_fatal_error (std::move (Err));
2492- std::unique_ptr<CachedFileStream> Stream = std::move (*StreamOrErr);
2493- *Stream->OS << umb->getMemBufferRef ().getBuffer ();
2489+ AddBuffer (Job.Task , Job.ModuleID , std::move (objFileMbOrErr.get ()));
24942490 }
24952491
24962492 return Error::success ();
@@ -2506,11 +2502,12 @@ ThinBackend lto::createOutOfProcessThinBackend(
25062502 auto Func =
25072503 [=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
25082504 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
2509- AddStreamFn AddStream, FileCache /* Cache*/ ) {
2505+ AddStreamFn AddStream, AddBufferFn AddBuffer, FileCache /* Cache*/ ) {
25102506 return std::make_unique<OutOfProcessThinBackend>(
25112507 Conf, CombinedIndex, Parallelism, ModuleToDefinedGVSummaries,
2512- AddStream, OnWrite, ShouldEmitIndexFiles, ShouldEmitImportsFiles,
2513- LinkerOutputFile, RemoteOptTool, Distributor, SaveTemps);
2508+ AddStream, AddBuffer, OnWrite, ShouldEmitIndexFiles,
2509+ ShouldEmitImportsFiles, LinkerOutputFile, RemoteOptTool,
2510+ Distributor, SaveTemps);
25142511 };
25152512 return ThinBackend (Func, Parallelism);
25162513}
0 commit comments