Skip to content

Commit 56569a7

Browse files
committed
Address comments from NuriAmari
1 parent 873bc99 commit 56569a7

File tree

3 files changed

+24
-15
lines changed

3 files changed

+24
-15
lines changed

llvm/lib/CGData/CodeGenData.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ void saveModuleForTwoRounds(const Module &TheModule, unsigned Task) {
245245
if (EC)
246246
report_fatal_error(Twine("Failed to open ") + Path +
247247
" to save optimized bitcode: " + EC.message());
248-
WriteBitcodeToFile(TheModule, OS, /* ShouldPreserveUseListOrder */ true);
248+
WriteBitcodeToFile(TheModule, OS, /*ShouldPreserveUseListOrder=*/true);
249249
}
250250

251251
std::unique_ptr<Module> loadModuleForTwoRounds(BitcodeModule &OrigModule,
@@ -259,7 +259,7 @@ std::unique_ptr<Module> loadModuleForTwoRounds(BitcodeModule &OrigModule,
259259
" to load optimized bitcode: " + EC.message());
260260

261261
std::unique_ptr<MemoryBuffer> FileBuffer = std::move(*FileOrError);
262-
auto RestoredModule = llvm::parseBitcodeFile(*FileBuffer, Context);
262+
auto RestoredModule = parseBitcodeFile(*FileBuffer, Context);
263263
if (!RestoredModule)
264264
report_fatal_error(Twine("Failed to parse optimized bitcode loaded from ") +
265265
Path + "\n");

llvm/lib/LTO/LTO.cpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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 {
15231526
public:
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 {
15461553
public:
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());

llvm/lib/LTO/LTOBackend.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ Error lto::thinBackend(const Config &Conf, unsigned Task, AddStreamFn AddStream,
611611
// Save the current module before the first codegen round.
612612
// Note that the second codegen round runs only `codegen()` without
613613
// running `opt()`. We're not reaching here as it's bailed out earlier
614-
// with CodeGenOnly which has been set in `OptimizedBitcodeThinBackend`.
614+
// with `CodeGenOnly` which has been set in `SecondRoundThinBackend`.
615615
if (CodeGenDataThinLTOTwoRounds)
616616
cgdata::saveModuleForTwoRounds(Mod, Task);
617617

0 commit comments

Comments
 (0)