Commit Graph

81 Commits

Author SHA1 Message Date
Louis Dionne 1b6d6e595b [pstl] Allow customizing whether per-TU insulation is provided
Like we do in libc++, PSTL needs the ability to constrain
ABI-unstable symbols to each translation unit. This is OFF by
default (like for libc++), because most people don't care about
this and there is a cost associated to enabling the option (code
bloat because templates are not deduped across TUs).

I'm using '#pragma clang attribute push' to avoid marking each
declaration with an attribute, which quickly becomes difficult
to maintain.

llvm-svn: 368684
2019-08-13 12:49:00 +00:00
Louis Dionne 5065e78173 [pstl] Rename PARALLELSTL_BACKEND to PSTL_PARALLEL_BACKEND
It makes more sense to name configuration options as PSTL_XXX.
Also, I'm naming it PSTL_PARALLEL_BACKEND because we might introduce
the ability to customize the vectorization backend, in which case
PSTL_BACKEND would become ambiguous.

llvm-svn: 368672
2019-08-13 11:50:26 +00:00
Louis Dionne 09a7a627af [NFC][pstl] Run clang-format
We really need to do that consistently when applying patches.

llvm-svn: 368312
2019-08-08 17:10:45 +00:00
Louis Dionne 2153607379 [pstl] Remove stray semicolon
llvm-svn: 368302
2019-08-08 14:49:28 +00:00
Louis Dionne a8a436ef95 [pstl] Error out when the backend is left unspecified
Instead of silently falling back to the serial backend, it's better if
we fail loudly when the parallel backend is left unspecified. Since we
have a __pstl_config_site header, a backend should always be specified.

llvm-svn: 368285
2019-08-08 12:43:13 +00:00
Louis Dionne bf4808439f [pstl] Add a __pstl_config_site header to record the CMake configuration
This commit adds a __pstl_config_site header that contains the value of
macros specified at CMake configuration time. It works similarly to
libc++'s __config_site header, except we always include it as a separate
file instead of concatenating it to the main configuration header.

It is necessary to thread the includes for that header into libc++'s
lit configuration, otherwise we'd be requiring an installation step
prior to running the test suite.

llvm-svn: 368284
2019-08-08 12:43:04 +00:00
Louis Dionne 762e662582 [pstl] Make sure we install all of PSTL's include/ directory
We want to install files directly in include/, not only in include/pstl.

llvm-svn: 368203
2019-08-07 20:29:04 +00:00
Louis Dionne 956892433f [pstl][libc++] Provide uglified header names for interface headers
For the few (currently four) headers that make up the PSTL's interface
to other Standard Libraries, provide a stable uglified header file that
can be included by those Standard Libraries.

We can then more easily change the internal organization of the PSTL
without having to change the integration with Standard Libraries.

llvm-svn: 368088
2019-08-06 21:11:24 +00:00
Louis Dionne 23f073100d [NFC][pstl] Remove stray semi-colon
llvm-svn: 367928
2019-08-05 21:20:42 +00:00
Louis Dionne 0a06eb911b [libc++] Take 2: Integrate the PSTL into libc++
Summary:
This commit allows specifying LIBCXX_ENABLE_PARALLEL_ALGORITHMS when
configuring libc++ in CMake. When that option is enabled, libc++ will
assume that the PSTL can be found somewhere on the CMake module path,
and it will provide the C++17 parallel algorithms based on the PSTL
(that is assumed to be available).

The commit also adds support for running the PSTL tests as part of
the libc++ test suite.

The first attempt to commit this failed because it exposed a bug in the
tests for modules. Now that this has been fixed, it should be safe to
commit this.

Reviewers: EricWF

Subscribers: mgorny, christof, jkorous, dexonsmith, libcxx-commits, mclow.lists, EricWF

Tags: #libc

Differential Revision: https://reviews.llvm.org/D60480

llvm-svn: 367903
2019-08-05 18:29:14 +00:00
Eric Fiselier 4ea8ed4135 [pstl] Fully qualify pstl names.
Previously the code used "using namespace __pstl;" at block
scope to introduce these names. This could cause conflicts with
names defined by the standard library. So we should fully qualify
them instead.

llvm-svn: 367468
2019-07-31 19:14:16 +00:00
Louis Dionne a3c83b7511 Revert "[libc++] Integrate the PSTL into libc++"
This reverts r366593, which caused unforeseen breakage on the build bots.
I'm reverting until the problems have been figured out and fixed.

llvm-svn: 366603
2019-07-19 18:52:46 +00:00
Louis Dionne 910323e667 [libc++] Integrate the PSTL into libc++
Summary:
This commit allows specifying LIBCXX_ENABLE_PARALLEL_ALGORITHMS when
configuring libc++ in CMake. When that option is enabled, libc++ will
assume that the PSTL can be found somewhere on the CMake module path,
and it will provide the C++17 parallel algorithms based on the PSTL
(that is assumed to be available).

The commit also adds support for running the PSTL tests as part of
the libc++ test suite.

Reviewers: rodgert, EricWF

Subscribers: mgorny, christof, jkorous, dexonsmith, libcxx-commits, mclow.lists, EricWF

Tags: #libc

Differential Revision: https://reviews.llvm.org/D60480

llvm-svn: 366593
2019-07-19 17:02:42 +00:00
Louis Dionne 01963cec9b [NFC][pstl] Run clang-format on the sources, including the tests
llvm-svn: 366492
2019-07-18 20:22:28 +00:00
Louis Dionne 96f4970813 [pstl] Fix test that checked the version number after version bump
llvm-svn: 366491
2019-07-18 20:21:59 +00:00
Louis Dionne 249c1c7407 [pstl] Declare main() as returning int, not int32_t
llvm-svn: 366490
2019-07-18 20:21:52 +00:00
Hans Wennborg 8f5b44aead Bump the trunk version to 10.0.0svn
and clear the release notes.

llvm-svn: 366427
2019-07-18 11:51:05 +00:00
Louis Dionne 3559fcd114 [pstl] Use std::transform_reduce instead of hand-rolled implementation
llvm-svn: 366233
2019-07-16 17:29:09 +00:00
Louis Dionne c26e27d802 [NFC] Fix -Wreorder warning in TBB backend
llvm-svn: 366232
2019-07-16 17:29:03 +00:00
Louis Dionne 58864fad39 [pstl] Fix compilation with TBB backend
Some types were not using the right namespace qualification.

llvm-svn: 366208
2019-07-16 13:45:10 +00:00
Louis Dionne c862ea27b7 [NFC][pstl] Remove unused utility code
llvm-svn: 365346
2019-07-08 16:35:49 +00:00
Louis Dionne b152f9f392 [pstl] Use a different namespace for each backend
Also, use a single point of customization to set what namespace __par_backend
"points to", which provides a better separation of concerns.

llvm-svn: 365337
2019-07-08 16:05:00 +00:00
Louis Dionne 766accd364 [pstl] Add missing includes
llvm-svn: 365218
2019-07-05 16:05:26 +00:00
Louis Dionne 989cad2476 [pstl] Use utilities from <functional> instead of reinventing the wheel
llvm-svn: 365158
2019-07-04 20:00:39 +00:00
Louis Dionne d9b7b2d5f7 [NFC][pstl] Do not name each header file in the leading comment
With the renaming that will happen, it's just a pain to maintain the
right names.

llvm-svn: 365156
2019-07-04 19:39:29 +00:00
Louis Dionne 0ca6d390ba [NFC][pstl] Run clang-format
llvm-svn: 365152
2019-07-04 19:04:28 +00:00
Louis Dionne 55227a7b4d [pstl] Make sure we include the pstl_config header in the glue headers
llvm-svn: 365150
2019-07-04 18:19:20 +00:00
Louis Dionne 04c5bc989a [pstl] Default to the serial backend when unspecified
This is a stopgap measure to make it easier to integrate the PSTL into
libc++. In the future, we should have a system similar to what libc++
does, where we specify settings at configuration time and generate a
__config_site header that is part of the PSTL.

llvm-svn: 363958
2019-06-20 17:56:51 +00:00
Louis Dionne 6ab35c9dc0 [pstl] Mark pstl tests as unsupported before C++17
This is required to run the tests in lit with libc++'s tests.

llvm-svn: 363942
2019-06-20 16:22:06 +00:00
Louis Dionne 3491119f9b [pstl] Remove warnings in tests and headers
Mostly unused parameter, unused local typedefs and shadowed declarations.
This massaging it necessary if we want to be able to run the tests under
the libc++ lit configuration.

llvm-svn: 363872
2019-06-19 20:15:50 +00:00
Louis Dionne 050b804b13 [pstl] Disable workarounds for broken ICC versions when using Clang
llvm-svn: 363726
2019-06-18 19:48:52 +00:00
Louis Dionne 9d54063c82 [pstl] Remove stray usage of pstl::execution instead of std::execution
llvm-svn: 363723
2019-06-18 19:34:04 +00:00
Mikhail Dvorskiy 36d1f2443b [pstl] The optimized parallel versions of sort, stable_sort algorithms, TBB parallel backend.
Summary: 
A modification of the parallel sorting algorithm, additionally optimized for a partially sorted array.

Reviewers: rodgert
           ldionne

Differential Revision: https://reviews.llvm.org/D59925

llvm-svn: 362678
2019-06-06 07:34:46 +00:00
Mikhail Dvorskiy 209adba440 A test commit from Mikhail Dvorskiy (blank line, to pstl/trunk) according 'Obtaining Commit Access' rules (https://llvm.org/docs/DeveloperPolicy.html#obtaining-commit-access)
llvm-svn: 362362
2019-06-03 08:23:30 +00:00
Louis Dionne e38a82405b [pstl] Use OpenMP pragmas with Clang, which supports them
Most importantly, Clang doesn't seem to support the non-OpenMP pragmas
that were being used previously.

llvm-svn: 362155
2019-05-30 21:09:19 +00:00
Louis Dionne 5c4c44310a [pstl] Remove various warnings in the pstl headers and tests
- unused parameter warnings
- don't use single-letter template parameter names, like we do in libc++
- sign-comparison warnings
- unused variables in the tests
- unused local typedefs in the tests
- the use of #include_next
- field reordering in the tests
- unused lambda captures

Note that the rationale for why the static_casts to unsigned are OK is
that last - first must always be non-negative, since [first, last) is
a valid range.

llvm-svn: 362148
2019-05-30 20:46:31 +00:00
Louis Dionne 65a422c81c [pstl] Make the default backend be the serial backend and always provide parallel policies
Summary:
Before this change, the default backend was TBB but one could disable
anything related to TBB by removing the parallel policies. This change
uses the serial backend by default and removes the ability to disable
parallel policies, which is not useful anymore.

Reviewers: rodgert, MikeDvorskiy

Subscribers: mgorny, jkorous, dexonsmith, jdoerfert, libcxx-commits

Differential Revision: https://reviews.llvm.org/D59792

llvm-svn: 359134
2019-04-24 20:12:36 +00:00
Louis Dionne dcf4b9aee0 [pstl] Add a serial backend for the PSTL
Summary:
The serial backend performs all tasks serially and does not require
threads. It does not have any dependencies beyond normal C++, but
it is not very efficient either.

Reviewers: rodgert, MikeDvorskiy

Subscribers: mgorny, jkorous, dexonsmith, jdoerfert, libcxx-commits

Differential Revision: https://reviews.llvm.org/D59791

llvm-svn: 358700
2019-04-18 18:20:19 +00:00
Louis Dionne 4d88b17b3f [pstl] Remove the stdlib headers from the PSTL and move them to the tests
Summary:
PSTL should not provide those headers since they belong to the standard
library. Instead, we define a dummy standard library in the tests that
provides those headers.

Reviewers: rodgert, MikeDvorskiy

Subscribers: mgorny, jkorous, dexonsmith, libcxx-commits

Tags: #libc

Differential Revision: https://reviews.llvm.org/D60535

llvm-svn: 358497
2019-04-16 14:38:08 +00:00
Louis Dionne 11bbb5831b [NFC] Add explicit return from main() in tests
llvm-svn: 358302
2019-04-12 18:38:58 +00:00
Louis Dionne e7f2cbe45a [pstl] Remove our custom FindTBB CMake file
Summary:
The TBBConfig file installed by TBB 2019 Update 5 works properly, so we
don't need this workaround anymore.

Reviewers: rodgert, MikeDvorskiy

Subscribers: mgorny, jkorous, dexonsmith, libcxx-commits

Tags: #libc

Differential Revision: https://reviews.llvm.org/D60467

llvm-svn: 358196
2019-04-11 17:23:18 +00:00
Louis Dionne ab38599bb1 [pstl] Setup the _PSTL_VERSION macro like _LIBCPP_VERSION, and add release notes
Reviewers: rodgert, MikeDvorskiy

Subscribers: mgorny, jkorous, dexonsmith, libcxx-commits

Tags: #libc

Differential Revision: https://reviews.llvm.org/D60464

llvm-svn: 358193
2019-04-11 17:08:55 +00:00
Louis Dionne 3dee12e4a5 [pstl] Move to single underscore-capital for macros and include guards
Summary: Per the LLVM convention.

Reviewers: rodgert

Subscribers: jkorous, dexonsmith, jdoerfert, libcxx-commits

Tags: #libc

Differential Revision: https://reviews.llvm.org/D60521

llvm-svn: 358131
2019-04-10 19:51:40 +00:00
Louis Dionne 0352f201dd [pstl] Fix incorrect forward declaration of __pattern_unique_copy
The forward declaration didn't take an execution policy, but the
definition does.

llvm-svn: 358130
2019-04-10 19:48:18 +00:00
Louis Dionne 6d6fbc86c8 [pstl] Add missing forward declarations for equal
We added the 4-iterator variants of std::equal in r357613, but we
forgot to add the corresponding forward declarations.

llvm-svn: 358129
2019-04-10 19:35:42 +00:00
Louis Dionne e3e24ad25f Fix header inclusion order failures
Summary: See https://bugs.llvm.org/show_bug.cgi?id=41432

Subscribers: libcxx-commits

Tags: #libc

Differential Revision: https://reviews.llvm.org/D60525

llvm-svn: 358121
2019-04-10 18:52:24 +00:00
Louis Dionne f7433f9623 [pstl][CMake] Install CMake export files
This allows other projects to depend on PSTL using the classic CMake
find_package protocol.

llvm-svn: 358028
2019-04-09 18:35:56 +00:00
Louis Dionne 2fb3225375 [pstl][NFC] Move the ParallelSTLConfig template to the cmake/ subdirectory
llvm-svn: 358018
2019-04-09 16:48:43 +00:00
Louis Dionne 8a497a958b [pstl] Improve the parallel version of std::equal
When an execution policy is provided, we attempt to run std::equal in
parallel instead of always doing it serially.

Thanks to Mikhail Dvorskiy for the patch.

Differential Revision: https://reviews.llvm.org/D59813

llvm-svn: 357613
2019-04-03 17:34:57 +00:00
Louis Dionne 540e18ded7 [pstl] Require C++17 when linking against pstl
llvm-svn: 357609
2019-04-03 17:17:40 +00:00