[clang] [NFC] [C++20] [Modules] [P1689] [Scanner] Don't use thread pool in P1689 per file mode (PR #84285)
Chuanqi Xu via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 7 18:50:50 PST 2024
================
@@ -893,102 +889,118 @@ int clang_scan_deps_main(int argc, char **argv, const llvm::ToolContext &) {
if (Format == ScanningOutputFormat::Full)
FD.emplace(ModuleName.empty() ? Inputs.size() : 0);
- if (Verbose) {
- llvm::outs() << "Running clang-scan-deps on " << Inputs.size()
- << " files using " << Pool.getMaxConcurrency() << " workers\n";
- }
-
- llvm::Timer T;
- T.startTimer();
-
- for (unsigned I = 0; I < Pool.getMaxConcurrency(); ++I) {
- Pool.async([&, I]() {
- llvm::DenseSet<ModuleID> AlreadySeenModules;
- while (auto MaybeInputIndex = GetNextInputIndex()) {
- size_t LocalIndex = *MaybeInputIndex;
- const tooling::CompileCommand *Input = &Inputs[LocalIndex];
- std::string Filename = std::move(Input->Filename);
- std::string CWD = std::move(Input->Directory);
-
- std::optional<StringRef> MaybeModuleName;
- if (!ModuleName.empty())
- MaybeModuleName = ModuleName;
-
- std::string OutputDir(ModuleFilesDir);
- if (OutputDir.empty())
- OutputDir = getModuleCachePath(Input->CommandLine);
- auto LookupOutput = [&](const ModuleID &MID, ModuleOutputKind MOK) {
- return ::lookupModuleOutput(MID, MOK, OutputDir);
- };
-
- // Run the tool on it.
- if (Format == ScanningOutputFormat::Make) {
- auto MaybeFile =
- WorkerTools[I]->getDependencyFile(Input->CommandLine, CWD);
- if (handleMakeDependencyToolResult(Filename, MaybeFile, DependencyOS,
- Errs))
- HadErrors = true;
- } else if (Format == ScanningOutputFormat::P1689) {
- // It is useful to generate the make-format dependency output during
- // the scanning for P1689. Otherwise the users need to scan again for
- // it. We will generate the make-format dependency output if we find
- // `-MF` in the command lines.
- std::string MakeformatOutputPath;
- std::string MakeformatOutput;
-
- auto MaybeRule = WorkerTools[I]->getP1689ModuleDependencyFile(
- *Input, CWD, MakeformatOutput, MakeformatOutputPath);
-
- if (handleP1689DependencyToolResult(Filename, MaybeRule, PD, Errs))
- HadErrors = true;
+ std::vector<std::unique_ptr<DependencyScanningTool>> WorkerTools;
----------------
ChuanqiXu9 wrote:
Done by moving this into the `ThreadPool` only branch and get rid of `std::unique_ptr`. It looks like we can't remove the vector entirely. Since the parameter type of `ScanningTask` is `DependencyScanningTool &` instead of `const DependencyScanningTool &`, so we may face lifetime issues if we construct DependencyScanningTool in place.
https://github.com/llvm/llvm-project/pull/84285
More information about the cfe-commits
mailing list