Add parallelTransformReduce and parallelForEachError
authorReid Kleckner <rnk@google.com>
Mon, 2 Nov 2020 18:15:34 +0000 (10:15 -0800)
committerReid Kleckner <rnk@google.com>
Tue, 3 Nov 2020 00:50:14 +0000 (16:50 -0800)
commitc0a922b3db2d39f36c0c01776cce90cc160a7d62
treeec67347325875c2312638812dc30fe84343149a3
parentca01a6b3aceb74134fed6a177165c040ee2703de
Add parallelTransformReduce and parallelForEachError

parallelTransformReduce is modelled on the C++17 pstl API of
std::transform_reduce, except our wrappers do not use execution policy
parameters.

parallelForEachError allows loops that contain potentially failing
operations to propagate errors out of the loop. This was one of the
major challenges I encountered while parallelizing PDB type merging in
LLD. Parallelizing a loop with parallelForEachError is not behavior
preserving: the loop will no longer stop on the first error, it will
continue working and report all errors it encounters in a list.

I plan to use this to propagate errors out of LLD's
coff::TpiSource::remapTpiWithGHashes, which currently stores errors an
error in the TpiSource object.

Differential Revision: https://reviews.llvm.org/D90639
llvm/include/llvm/Support/Parallel.h
llvm/unittests/Support/ParallelTest.cpp