summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShankar Easwaran <shankare@codeaurora.org>2015-03-16 21:27:32 +0000
committerShankar Easwaran <shankare@codeaurora.org>2015-03-16 21:27:32 +0000
commit9b7374b8216a0860fc0606e2db910a76cc729b20 (patch)
tree471c14b7eb0a6d155ee824cb1066426ee0866cac
parent7401b1e78007f6ce14dbb9f087e07025e0a9d140 (diff)
downloadbcm5719-llvm-9b7374b8216a0860fc0606e2db910a76cc729b20.tar.gz
bcm5719-llvm-9b7374b8216a0860fc0606e2db910a76cc729b20.zip
[Core] Add parallel_for_each
This adds a parallel_for_each similar to functionality in MSVC concurrency library. This was very patiently reviewed by Rui and credits go to him for this patch. Differential Revision: http://reviews.llvm.org/D8348 llvm-svn: 232419
-rw-r--r--lld/include/lld/Core/Parallel.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/lld/include/lld/Core/Parallel.h b/lld/include/lld/Core/Parallel.h
index 62da40c9ba8..65176ac2b04 100644
--- a/lld/include/lld/Core/Parallel.h
+++ b/lld/include/lld/Core/Parallel.h
@@ -295,7 +295,12 @@ void parallel_for_each(Iterator begin, Iterator end, Func func) {
#else
template <class Iterator, class Func>
void parallel_for_each(Iterator begin, Iterator end, Func func) {
- // TODO: Make this parallel.
+ TaskGroup tg;
+ ptrdiff_t taskSize = 1024;
+ while (taskSize <= std::distance(begin, end)) {
+ tg.spawn([=, &func] { std::for_each(begin, begin + taskSize, func); });
+ begin += taskSize;
+ }
std::for_each(begin, end, func);
}
#endif
OpenPOWER on IntegriCloud