@@ -1517,11 +1517,14 @@ class InProcessThinBackend : public ThinBackendProc {
15171517 }
15181518};
15191519
1520- // / This Backend will run ThinBackend process but throw away all the output from
1521- // / the codegen. This class facilitates the first codegen round.
1522- class NoOutputThinBackend : public InProcessThinBackend {
1520+ // / This backend is utilized in the first round of a two-codegen round process.
1521+ // / It first saves optimized bitcode files to disk before the codegen process
1522+ // / begins. After codegen, it stores the resulting object files in a scratch
1523+ // / buffer. Note the codegen data stored in the scratch buffer will be extracted
1524+ // / and merged in the subsequent step.
1525+ class FirstRoundThinBackend : public InProcessThinBackend {
15231526public:
1524- NoOutputThinBackend (
1527+ FirstRoundThinBackend (
15251528 const Config &Conf, ModuleSummaryIndex &CombinedIndex,
15261529 ThreadPoolStrategy ThinLTOParallelism,
15271530 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
@@ -1533,25 +1536,31 @@ class NoOutputThinBackend : public InProcessThinBackend {
15331536 return std::make_unique<CachedFileStream>(
15341537 std::make_unique<raw_svector_ostream>((*Allocation)[Task]));
15351538 },
1536- FileCache (), nullptr , false , false ),
1539+ FileCache (), /* OnWrite=*/ nullptr , /* ShouldEmitIndexFiles=*/ false ,
1540+ /* ShouldEmitImportsFiles=*/ false ),
15371541 Scratch (std::move(Scratch)) {}
15381542
15391543 // / Scratch space for writing output during the codegen.
15401544 std::unique_ptr<std::vector<llvm::SmallString<0 >>> Scratch;
15411545};
15421546
1543- // / This Backend performs codegen on bitcode that was previously saved after
1544- // / going through optimization. This class facilitates the second codegen round.
1545- class OptimizedBitcodeThinBackend : public InProcessThinBackend {
1547+ // / This backend operates in the second round of a two-codegen round process.
1548+ // / It starts by reading the optimized bitcode files that were saved during the
1549+ // / first round. The backend then executes the codegen only to further optimize
1550+ // / the code, utilizing the codegen data merged from the first round. Finally,
1551+ // / it writes the resulting object files as usual.
1552+ class SecondRoundThinBackend : public InProcessThinBackend {
15461553public:
1547- OptimizedBitcodeThinBackend (
1554+ SecondRoundThinBackend (
15481555 const Config &Conf, ModuleSummaryIndex &CombinedIndex,
15491556 ThreadPoolStrategy ThinLTOParallelism,
15501557 const DenseMap<StringRef, GVSummaryMapTy> &ModuleToDefinedGVSummaries,
15511558 AddStreamFn AddStream)
15521559 : InProcessThinBackend(Conf, CombinedIndex, ThinLTOParallelism,
15531560 ModuleToDefinedGVSummaries, AddStream, FileCache(),
1554- nullptr , false , false ) {}
1561+ /* OnWrite=*/ nullptr ,
1562+ /* ShouldEmitIndexFiles=*/ false ,
1563+ /* ShouldEmitImportsFiles=*/ false ) {}
15551564
15561565 virtual Error runThinLTOBackendThread (
15571566 AddStreamFn AddStream, FileCache Cache, unsigned Task, BitcodeModule BM,
@@ -1932,7 +1941,7 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
19321941 // Create a scratch output to hold intermediate results.
19331942 auto Outputs =
19341943 std::make_unique<std::vector<llvm::SmallString<0 >>>(getMaxTasks ());
1935- auto FirstRoundLTO = std::make_unique<NoOutputThinBackend >(
1944+ auto FirstRoundLTO = std::make_unique<FirstRoundThinBackend >(
19361945 Conf, ThinLTO.CombinedIndex , llvm::heavyweight_hardware_concurrency (),
19371946 ModuleToDefinedGVSummaries, std::move (Outputs));
19381947 // First round: Run optimization and code generation with a scratch output.
@@ -1946,7 +1955,7 @@ Error LTO::runThinLTO(AddStreamFn AddStream, FileCache Cache,
19461955
19471956 // Second round: Run code generation by reading IRs.
19481957 std::unique_ptr<ThinBackendProc> SecondRoundLTO =
1949- std::make_unique<OptimizedBitcodeThinBackend >(
1958+ std::make_unique<SecondRoundThinBackend >(
19501959 Conf, ThinLTO.CombinedIndex , llvm::heavyweight_hardware_concurrency (),
19511960 ModuleToDefinedGVSummaries, AddStream);
19521961 Error E = RunBackends (SecondRoundLTO.get ());
0 commit comments