jansvoboda11 created this revision. jansvoboda11 added reviewers: Bigcheese, benlangmuir. Herald added a subscriber: ributzka. Herald added a project: All. jansvoboda11 requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
This patch simplifies the loop inside each worker by extracting index retrieval into a lambda function. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D145101 Files: clang/tools/clang-scan-deps/ClangScanDeps.cpp Index: clang/tools/clang-scan-deps/ClangScanDeps.cpp =================================================================== --- clang/tools/clang-scan-deps/ClangScanDeps.cpp +++ clang/tools/clang-scan-deps/ClangScanDeps.cpp @@ -784,32 +784,29 @@ std::atomic<bool> HadErrors(false); FullDeps FD; P1689Deps PD; + std::mutex Lock; size_t Index = 0; + auto GetNextInputIndex = [&]() -> std::optional<size_t> { + std::unique_lock<std::mutex> LockGuard(Lock); + if (Index < Inputs.size()) + return Index++; + return {}; + }; if (Verbose) { llvm::outs() << "Running clang-scan-deps on " << Inputs.size() << " files using " << Pool.getThreadCount() << " workers\n"; } for (unsigned I = 0; I < Pool.getThreadCount(); ++I) { - Pool.async([I, &Lock, &Index, &Inputs, &HadErrors, &FD, &PD, &WorkerTools, - &DependencyOS, &Errs]() { + Pool.async([&, I]() { llvm::StringSet<> AlreadySeenModules; - while (true) { - const tooling::CompileCommand *Input; - std::string Filename; - std::string CWD; - size_t LocalIndex; - // Take the next input. - { - std::unique_lock<std::mutex> LockGuard(Lock); - if (Index >= Inputs.size()) - return; - LocalIndex = Index; - Input = &Inputs[Index++]; - Filename = std::move(Input->Filename); - CWD = std::move(Input->Directory); - } + 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;
Index: clang/tools/clang-scan-deps/ClangScanDeps.cpp =================================================================== --- clang/tools/clang-scan-deps/ClangScanDeps.cpp +++ clang/tools/clang-scan-deps/ClangScanDeps.cpp @@ -784,32 +784,29 @@ std::atomic<bool> HadErrors(false); FullDeps FD; P1689Deps PD; + std::mutex Lock; size_t Index = 0; + auto GetNextInputIndex = [&]() -> std::optional<size_t> { + std::unique_lock<std::mutex> LockGuard(Lock); + if (Index < Inputs.size()) + return Index++; + return {}; + }; if (Verbose) { llvm::outs() << "Running clang-scan-deps on " << Inputs.size() << " files using " << Pool.getThreadCount() << " workers\n"; } for (unsigned I = 0; I < Pool.getThreadCount(); ++I) { - Pool.async([I, &Lock, &Index, &Inputs, &HadErrors, &FD, &PD, &WorkerTools, - &DependencyOS, &Errs]() { + Pool.async([&, I]() { llvm::StringSet<> AlreadySeenModules; - while (true) { - const tooling::CompileCommand *Input; - std::string Filename; - std::string CWD; - size_t LocalIndex; - // Take the next input. - { - std::unique_lock<std::mutex> LockGuard(Lock); - if (Index >= Inputs.size()) - return; - LocalIndex = Index; - Input = &Inputs[Index++]; - Filename = std::move(Input->Filename); - CWD = std::move(Input->Directory); - } + 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;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits