@@ -1172,7 +1172,7 @@ Error LTO::checkPartiallySplit() {
1172
1172
return Error::success ();
1173
1173
}
1174
1174
1175
- Error LTO::run (AddStreamFn AddStream, FileCache Cache) {
1175
+ Error LTO::run (AddStreamFn AddStream, FileCache Cache, AddBufferFn AddBuffer ) {
1176
1176
// Compute "dead" symbols, we don't want to import/export these!
1177
1177
DenseSet<GlobalValue::GUID> GUIDPreservedSymbols;
1178
1178
DenseMap<GlobalValue::GUID, PrevailingType> GUIDPrevailingResolutions;
@@ -1222,7 +1222,7 @@ Error LTO::run(AddStreamFn AddStream, FileCache Cache) {
1222
1222
if (!Result)
1223
1223
// This will reset the GlobalResolutions optional once done with it to
1224
1224
// reduce peak memory before importing.
1225
- Result = runThinLTO (AddStream, Cache, GUIDPreservedSymbols);
1225
+ Result = runThinLTO (AddStream, AddBuffer, Cache, GUIDPreservedSymbols);
1226
1226
1227
1227
if (StatsFile)
1228
1228
PrintStatisticsJSON (StatsFile->os ());
@@ -1448,7 +1448,6 @@ Error ThinBackendProc::emitFiles(
1448
1448
namespace {
1449
1449
class CGThinBackend : public ThinBackendProc {
1450
1450
protected:
1451
- AddStreamFn AddStream;
1452
1451
DenseSet<GlobalValue::GUID> CfiFunctionDefs;
1453
1452
DenseSet<GlobalValue::GUID> CfiFunctionDecls;
1454
1453
bool ShouldEmitIndexFiles;
@@ -1457,12 +1456,10 @@ class CGThinBackend : public ThinBackendProc {
1457
1456
CGThinBackend (
1458
1457
const Config &Conf, ModuleSummaryIndex &CombinedIndex,
1459
1458
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)
1463
1461
: ThinBackendProc(Conf, CombinedIndex, ModuleToDefinedGVSummaries,
1464
1462
OnWrite, ShouldEmitImportsFiles, ThinLTOParallelism),
1465
- AddStream (std::move(AddStream)),
1466
1463
ShouldEmitIndexFiles (ShouldEmitIndexFiles) {
1467
1464
for (auto &Name : CombinedIndex.cfiFunctionDefs ())
1468
1465
CfiFunctionDefs.insert (
@@ -1475,6 +1472,7 @@ class CGThinBackend : public ThinBackendProc {
1475
1472
1476
1473
class InProcessThinBackend : public CGThinBackend {
1477
1474
protected:
1475
+ AddStreamFn AddStream;
1478
1476
FileCache Cache;
1479
1477
1480
1478
public:
@@ -1484,10 +1482,10 @@ class InProcessThinBackend : public CGThinBackend {
1484
1482
const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1485
1483
AddStreamFn AddStream, FileCache Cache, lto::IndexWriteCallback OnWrite,
1486
1484
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)) {}
1491
1489
1492
1490
virtual Error runThinLTOBackendThread (
1493
1491
AddStreamFn AddStream, FileCache Cache, unsigned Task, BitcodeModule BM,
@@ -1755,7 +1753,7 @@ ThinBackend lto::createInProcessThinBackend(ThreadPoolStrategy Parallelism,
1755
1753
auto Func =
1756
1754
[=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
1757
1755
const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1758
- AddStreamFn AddStream, FileCache Cache) {
1756
+ AddStreamFn AddStream, AddBufferFn /* AddBuffer */ , FileCache Cache) {
1759
1757
return std::make_unique<InProcessThinBackend>(
1760
1758
Conf, CombinedIndex, Parallelism, ModuleToDefinedGVSummaries,
1761
1759
AddStream, Cache, OnWrite, ShouldEmitIndexFiles,
@@ -1877,7 +1875,7 @@ ThinBackend lto::createWriteIndexesThinBackend(
1877
1875
auto Func =
1878
1876
[=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
1879
1877
const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
1880
- AddStreamFn AddStream, FileCache Cache) {
1878
+ AddStreamFn AddStream, AddBufferFn AddBuffer, FileCache Cache) {
1881
1879
return std::make_unique<WriteIndexesThinBackend>(
1882
1880
Conf, CombinedIndex, Parallelism, ModuleToDefinedGVSummaries,
1883
1881
OldPrefix, NewPrefix, NativeObjectPrefix, ShouldEmitImportsFiles,
@@ -1886,7 +1884,8 @@ ThinBackend lto::createWriteIndexesThinBackend(
1886
1884
return ThinBackend (Func, Parallelism);
1887
1885
}
1888
1886
1889
- Error LTO::runThinLTO (AddStreamFn AddStream, FileCache Cache,
1887
+ Error LTO::runThinLTO (AddStreamFn AddStream, AddBufferFn AddBuffer,
1888
+ FileCache Cache,
1890
1889
const DenseSet<GlobalValue::GUID> &GUIDPreservedSymbols) {
1891
1890
LLVM_DEBUG (dbgs () << " Running ThinLTO\n " );
1892
1891
ThinLTO.CombinedIndex .releaseTemporaryMemory ();
@@ -2094,7 +2093,7 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
2094
2093
if (!CodeGenDataThinLTOTwoRounds) {
2095
2094
std::unique_ptr<ThinBackendProc> BackendProc =
2096
2095
ThinLTO.Backend (Conf, ThinLTO.CombinedIndex , ModuleToDefinedGVSummaries,
2097
- AddStream, Cache);
2096
+ AddStream, AddBuffer, Cache);
2098
2097
return RunBackends (BackendProc.get ());
2099
2098
}
2100
2099
@@ -2201,6 +2200,8 @@ namespace {
2201
2200
class OutOfProcessThinBackend : public CGThinBackend {
2202
2201
using SString = SmallString<128 >;
2203
2202
2203
+ AddBufferFn AddBuffer;
2204
+
2204
2205
BumpPtrAllocator Alloc;
2205
2206
StringSaver Saver{Alloc};
2206
2207
@@ -2232,15 +2233,16 @@ class OutOfProcessThinBackend : public CGThinBackend {
2232
2233
const Config &Conf, ModuleSummaryIndex &CombinedIndex,
2233
2234
ThreadPoolStrategy ThinLTOParallelism,
2234
2235
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) {}
2244
2246
2245
2247
virtual void setup (unsigned MaxTasks) override {
2246
2248
UID = itostr (sys::Process::getProcessId ());
@@ -2484,13 +2486,7 @@ class OutOfProcessThinBackend : public CGThinBackend {
2484
2486
BCError + " cannot open native object file: " +
2485
2487
Job.NativeObjectPath + " : " + ec.message (),
2486
2488
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 ()));
2494
2490
}
2495
2491
2496
2492
return Error::success ();
@@ -2506,11 +2502,12 @@ ThinBackend lto::createOutOfProcessThinBackend(
2506
2502
auto Func =
2507
2503
[=](const Config &Conf, ModuleSummaryIndex &CombinedIndex,
2508
2504
const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
2509
- AddStreamFn AddStream, FileCache /* Cache*/ ) {
2505
+ AddStreamFn AddStream, AddBufferFn AddBuffer, FileCache /* Cache*/ ) {
2510
2506
return std::make_unique<OutOfProcessThinBackend>(
2511
2507
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);
2514
2511
};
2515
2512
return ThinBackend (Func, Parallelism);
2516
2513
}
0 commit comments