Essentially takes the lld/Common/Threads.h wrappers and moves them to
the llvm/Support/Paralle.h algorithm header.
The changes are:
- Add range overloads
- Use the sequential algorithm directly when 1 thread is requested (skips task grouping)
- Fix the index type of for_each_n to size_t. Nobody in LLVM was using any other parameter, and it made overload resolution hard for for_each_n(par, 0, foo.size(), ...) because 0 is int, not size_t.
Remove Threads.h and update LLD for that.
This is a prerequisite for parallel public symbol processing in the PDB
library, which is in LLVM.
Isn't parallel::par redundant? Can we just use
parallel::for_each_n((size_t)0, syms.size(), [&](size_t i) { ... }) ?