[libc++][PSTL] Integrate the headers and add a CI job
authorNikolas Klauser <nikolasklauser@berlin.de>
Fri, 21 Apr 2023 03:48:10 +0000 (05:48 +0200)
committerNikolas Klauser <n_klauser@apple.com>
Wed, 26 Apr 2023 20:11:25 +0000 (13:11 -0700)
Reviewed By: ldionne, #libc

Spies: libcxx-commits, arichardson

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

libcxx/CMakeLists.txt
libcxx/cmake/caches/With-pstl.cmake [new file with mode: 0644]
libcxx/include/CMakeLists.txt
libcxx/include/pstl/internal/algorithm_impl.h
libcxx/include/pstl/internal/pstl_config.h
libcxx/include/pstl/internal/utils.h
libcxx/test/libcxx/clang_tidy.sh.cpp
libcxx/utils/ci/buildkite-pipeline.yml
libcxx/utils/ci/run-buildbot
libcxx/utils/libcxx/test/features.py

index 2b6f998..cf572af 100644 (file)
@@ -68,6 +68,7 @@ endif()
 option(LIBCXX_ENABLE_FILESYSTEM "Build filesystem as part of the main libc++ library"
     ${ENABLE_FILESYSTEM_DEFAULT})
 option(LIBCXX_INCLUDE_TESTS "Build the libc++ tests." ${LLVM_INCLUDE_TESTS})
+option(LIBCXX_ENABLE_PARALLEL_ALGORITHMS "Enable the parallel algorithms library. This requires the PSTL to be available." OFF)
 option(LIBCXX_ENABLE_DEBUG_MODE
   "Whether to build libc++ with the debug mode enabled.
    By default, this is turned off. Turning it on results in a different ABI (additional
diff --git a/libcxx/cmake/caches/With-pstl.cmake b/libcxx/cmake/caches/With-pstl.cmake
new file mode 100644 (file)
index 0000000..82dd90f
--- /dev/null
@@ -0,0 +1,4 @@
+# TODO: Remove this cache file once the PSTL is under `-fexperimental-library`
+set(LIBCXX_TEST_PARAMS "std=c++17" CACHE STRING "")
+set(LIBCXXABI_TEST_PARAMS "${LIBCXX_TEST_PARAMS}" CACHE STRING "")
+set(LIBCXX_ENABLE_PARALLEL_ALGORITHMS ON CACHE BOOL "")
index a28f8c1..fa7ff67 100644 (file)
@@ -494,6 +494,10 @@ set(files
   __numeric/transform_exclusive_scan.h
   __numeric/transform_inclusive_scan.h
   __numeric/transform_reduce.h
+  __pstl_algorithm
+  __pstl_execution
+  __pstl_memory
+  __pstl_numeric
   __random/bernoulli_distribution.h
   __random/binomial_distribution.h
   __random/cauchy_distribution.h
@@ -862,6 +866,39 @@ set(files
   numeric
   optional
   ostream
+  pstl/internal/algorithm_fwd.h
+  pstl/internal/algorithm_impl.h
+  pstl/internal/execution_defs.h
+  pstl/internal/execution_impl.h
+  pstl/internal/glue_algorithm_defs.h
+  pstl/internal/glue_algorithm_impl.h
+  pstl/internal/glue_execution_defs.h
+  pstl/internal/glue_memory_defs.h
+  pstl/internal/glue_memory_impl.h
+  pstl/internal/glue_numeric_defs.h
+  pstl/internal/glue_numeric_impl.h
+  pstl/internal/memory_impl.h
+  pstl/internal/numeric_fwd.h
+  pstl/internal/numeric_impl.h
+  pstl/internal/omp/parallel_for.h
+  pstl/internal/omp/parallel_for_each.h
+  pstl/internal/omp/parallel_invoke.h
+  pstl/internal/omp/parallel_merge.h
+  pstl/internal/omp/parallel_scan.h
+  pstl/internal/omp/parallel_stable_partial_sort.h
+  pstl/internal/omp/parallel_stable_sort.h
+  pstl/internal/omp/parallel_transform_reduce.h
+  pstl/internal/omp/parallel_transform_scan.h
+  pstl/internal/omp/util.h
+  pstl/internal/parallel_backend.h
+  pstl/internal/parallel_backend_omp.h
+  pstl/internal/parallel_backend_serial.h
+  pstl/internal/parallel_backend_tbb.h
+  pstl/internal/parallel_backend_utils.h
+  pstl/internal/parallel_impl.h
+  pstl/internal/pstl_config.h
+  pstl/internal/unseq_backend_simd.h
+  pstl/internal/utils.h
   queue
   random
   ranges
index 2b505d9..3cc50c8 100644 (file)
@@ -536,7 +536,7 @@ __brick_find_if(_RandomAccessIterator __first, _RandomAccessIterator __last, _Pr
 
 template <class _Tag, class _ExecutionPolicy, class _ForwardIterator, class _Predicate>
 _ForwardIterator
-__pattern_find_if(_Tag __tag, _ExecutionPolicy&&, _ForwardIterator __first, _ForwardIterator __last,
+__pattern_find_if(_Tag, _ExecutionPolicy&&, _ForwardIterator __first, _ForwardIterator __last,
                   _Predicate __pred) noexcept
 {
     return __internal::__brick_find_if(__first, __last, __pred, typename _Tag::__is_vector{});
index de89e7b..fbc3aca 100644 (file)
@@ -10,7 +10,8 @@
 #ifndef _PSTL_CONFIG_H
 #define _PSTL_CONFIG_H
 
-#include <__pstl_config_site>
+// TODO: Make this a proper configuration option
+#define _PSTL_PAR_BACKEND_SERIAL
 
 // The version is XYYZ, where X is major, YY is minor, and Z is patch (i.e. X.YY.Z)
 #define _PSTL_VERSION 16000
index ec9d467..f52eb66 100644 (file)
@@ -12,6 +12,7 @@
 
 #include <new>
 #include <iterator>
+#include <utility>
 
 _PSTL_HIDE_FROM_ABI_PUSH
 
@@ -24,9 +25,12 @@ template <typename _Fp>
 auto
 __except_handler(_Fp __f) -> decltype(__f())
 {
+#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
     try
     {
+#endif // _LIBCPP_HAS_NO_EXCEPTIONS
         return __f();
+#ifndef _LIBCPP_HAS_NO_EXCEPTIONS
     }
     catch (const std::bad_alloc&)
     {
@@ -36,6 +40,7 @@ __except_handler(_Fp __f) -> decltype(__f())
     {
         std::terminate(); // Good bye according to the standard [algorithms.parallel.exceptions]
     }
+#endif // _LIBCPP_HAS_NO_EXCEPTIONS
 }
 
 template <typename _Fp>
index 74df7af..f04b6a5 100644 (file)
@@ -8,6 +8,9 @@
 
 // REQUIRES: has-clang-tidy
 
+// FIXME: This should pass with the PSTL enables
+// XFAIL: with-pstl
+
 // The GCC compiler flags are not always compatible with clang-tidy.
 // UNSUPPORTED: gcc
 
index 474138d..f489302 100644 (file)
@@ -463,6 +463,22 @@ steps:
           limit: 2
     timeout_in_minutes: 120
 
+  - label: "With PSTL support"
+    command: "libcxx/utils/ci/run-buildbot with-pstl"
+    artifact_paths:
+      - "**/test-results.xml"
+    env:
+      CC: "clang-${LLVM_HEAD_VERSION}"
+      CXX: "clang++-${LLVM_HEAD_VERSION}"
+    agents:
+      queue: "libcxx-builders"
+      os: "linux"
+    retry:
+      automatic:
+        - exit_status: -1  # Agent was lost
+          limit: 2
+    timeout_in_minutes: 120
+
   - label: "With LLVM's libunwind"
     command: "libcxx/utils/ci/run-buildbot generic-with_llvm_unwinder"
     artifact_paths:
index cd70d73..34e3792 100755 (executable)
@@ -448,6 +448,11 @@ generic-abi-unstable)
     generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/Generic-abi-unstable.cmake"
     check-runtimes
 ;;
+with-pstl)
+    clean
+    generate-cmake -C "${MONOREPO_ROOT}/libcxx/cmake/caches/With-pstl.cmake"
+    check-runtimes
+;;
 apple-system)
     clean
 
index dd5163f..49f5e70 100644 (file)
@@ -209,6 +209,7 @@ macros = {
   '_LIBCPP_HAS_NO_WIDE_CHARACTERS': 'no-wide-characters',
   '_LIBCPP_HAS_NO_UNICODE': 'libcpp-has-no-unicode',
   '_LIBCPP_ENABLE_DEBUG_MODE': 'libcpp-has-debug-mode',
+  '_LIBCPP_HAS_PARALLEL_ALGORITHMS': 'with-pstl',
 }
 for macro, feature in macros.items():
   DEFAULT_FEATURES.append(