From ca17841fc4adee75968b3b5096c470bade697bf0 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Mon, 5 Dec 2016 02:07:29 +0000 Subject: [PATCH] Run the last iteration of parallel_for_loop using a threadpool. Remainders of tasks were ran in the main thread, so parallel_for_each could theoretically take 2x time than the ideal. llvm-svn: 288631 --- lld/include/lld/Core/Parallel.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lld/include/lld/Core/Parallel.h b/lld/include/lld/Core/Parallel.h index 6589f0dcd9fe..f241453a4d39 100644 --- a/lld/include/lld/Core/Parallel.h +++ b/lld/include/lld/Core/Parallel.h @@ -307,7 +307,7 @@ void parallel_for_each(IterTy Begin, IterTy End, FuncTy Fn) { Tg.spawn([=, &Fn] { std::for_each(Begin, Begin + TaskSize, Fn); }); Begin += TaskSize; } - std::for_each(Begin, End, Fn); + Tg.spawn([=, &Fn] { std::for_each(Begin, End, Fn); }); } template @@ -325,8 +325,10 @@ void parallel_for(IndexTy Begin, IndexTy End, FuncTy Fn) { }); Begin += TaskSize; } - for (; I < End; ++I) - Fn(I); + Tg.spawn([=, &Fn] { + for (IndexTy J = I; J < End; ++J) + Fn(J); + }); } #endif } // end namespace lld