diff options
author | Fangrui Song <maskray@google.com> | 2018-11-26 20:07:07 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2018-11-26 20:07:07 +0000 |
commit | 4ed350d6c4b9a7526ea16b23dd638dc7cf62c602 (patch) | |
tree | cf0e5f7ee461250990b304f732284af997a0e916 | |
parent | b0fd2db8fc35a91d9f8ae6683f0e9da0405f7172 (diff) | |
download | bcm5719-llvm-4ed350d6c4b9a7526ea16b23dd638dc7cf62c602.tar.gz bcm5719-llvm-4ed350d6c4b9a7526ea16b23dd638dc7cf62c602.zip |
[COFF] ICF: use parallelForEach{,N}
Summary: They have an additional `ThreadsEnabled` check, which does not matter much.
Reviewers: pcc, ruiu, rnk
Reviewed By: ruiu
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D54812
llvm-svn: 347587
-rw-r--r-- | lld/COFF/ICF.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lld/COFF/ICF.cpp b/lld/COFF/ICF.cpp index 0df534ccd3c..34ea360fa92 100644 --- a/lld/COFF/ICF.cpp +++ b/lld/COFF/ICF.cpp @@ -22,6 +22,7 @@ #include "Chunks.h" #include "Symbols.h" #include "lld/Common/ErrorHandler.h" +#include "lld/Common/Threads.h" #include "lld/Common/Timer.h" #include "llvm/ADT/Hashing.h" #include "llvm/Support/Debug.h" @@ -226,10 +227,10 @@ void ICF::forEachClass(std::function<void(size_t, size_t)> Fn) { size_t Boundaries[NumShards + 1]; Boundaries[0] = 0; Boundaries[NumShards] = Chunks.size(); - for_each_n(parallel::par, size_t(1), NumShards, [&](size_t I) { + parallelForEachN(1, NumShards, [&](size_t I) { Boundaries[I] = findBoundary((I - 1) * Step, Chunks.size()); }); - for_each_n(parallel::par, size_t(1), NumShards + 1, [&](size_t I) { + parallelForEachN(1, NumShards + 1, [&](size_t I) { if (Boundaries[I - 1] < Boundaries[I]) { forEachClassRange(Boundaries[I - 1], Boundaries[I], Fn); } @@ -261,13 +262,13 @@ void ICF::run(ArrayRef<Chunk *> Vec) { SC->Class[0] = NextId++; // Initially, we use hash values to partition sections. - for_each(parallel::par, Chunks.begin(), Chunks.end(), [&](SectionChunk *SC) { + parallelForEach(Chunks, [&](SectionChunk *SC) { SC->Class[1] = xxHash64(SC->getContents()); }); // Combine the hashes of the sections referenced by each section into its // hash. - for_each(parallel::par, Chunks.begin(), Chunks.end(), [&](SectionChunk *SC) { + parallelForEach(Chunks, [&](SectionChunk *SC) { uint32_t Hash = SC->Class[1]; for (Symbol *B : SC->symbols()) if (auto *Sym = dyn_cast_or_null<DefinedRegular>(B)) |