diff options
Diffstat (limited to 'clang/docs/OpenMPSupport.rst')
| -rw-r--r-- | clang/docs/OpenMPSupport.rst | 1324 | 
1 files changed, 662 insertions, 662 deletions
| diff --git a/clang/docs/OpenMPSupport.rst b/clang/docs/OpenMPSupport.rst index 61b5bab..10a8d09 100644 --- a/clang/docs/OpenMPSupport.rst +++ b/clang/docs/OpenMPSupport.rst @@ -1,662 +1,662 @@ -.. raw:: html
 -
 -  <style type="text/css">
 -    .none { background-color: #FFCCCC }
 -    .part { background-color: #FFFF99 }
 -    .good { background-color: #CCFF99 }
 -  </style>
 -
 -.. role:: none
 -.. role:: part
 -.. role:: good
 -
 -.. contents::
 -   :local:
 -
 -==============
 -OpenMP Support
 -==============
 -
 -Clang fully supports OpenMP 4.5, almost all of 5.0 and most of 5.1/2.
 -Clang supports offloading to X86_64, AArch64, PPC64[LE], NVIDIA GPUs (all models) and AMD GPUs (all models).
 -
 -In addition, the LLVM OpenMP runtime `libomp` supports the OpenMP Tools
 -Interface (OMPT) on x86, x86_64, AArch64, and PPC64 on Linux, Windows, and macOS.
 -OMPT is also supported for NVIDIA and AMD GPUs.
 -
 -For the list of supported features from OpenMP 5.0 and 5.1
 -see `OpenMP implementation details`_ and `OpenMP 51 implementation details`_.
 -
 -General improvements
 -====================
 -- New collapse clause scheme to avoid expensive remainder operations.
 -  Compute loop index variables after collapsing a loop nest via the
 -  collapse clause by replacing the expensive remainder operation with
 -  multiplications and additions.
 -
 -- When using the collapse clause on a loop nest the default behavior
 -  is to automatically extend the representation of the loop counter to
 -  64 bits for the cases where the sizes of the collapsed loops are not
 -  known at compile time. To prevent this conservative choice and use
 -  at most 32 bits, compile your program with the
 -  `-fopenmp-optimistic-collapse`.
 -
 -
 -GPU devices support
 -===================
 -
 -Data-sharing modes
 -------------------
 -
 -Clang supports two data-sharing models for Cuda devices: `Generic` and `Cuda`
 -modes. The default mode is `Generic`. `Cuda` mode can give an additional
 -performance and can be activated using the `-fopenmp-cuda-mode` flag. In
 -`Generic` mode all local variables that can be shared in the parallel regions
 -are stored in the global memory. In `Cuda` mode local variables are not shared
 -between the threads and it is user responsibility to share the required data
 -between the threads in the parallel regions. Often, the optimizer is able to
 -reduce the cost of `Generic` mode to the level of `Cuda` mode, but the flag,
 -as well as other assumption flags, can be used for tuning.
 -
 -Features not supported or with limited support for Cuda devices
 ----------------------------------------------------------------
 -
 -- Cancellation constructs are not supported.
 -
 -- Doacross loop nest is not supported.
 -
 -- User-defined reductions are supported only for trivial types.
 -
 -- Nested parallelism: inner parallel regions are executed sequentially.
 -
 -- Debug information for OpenMP target regions is supported, but sometimes it may
 -  be required to manually specify the address class of the inspected variables.
 -  In some cases the local variables are actually allocated in the global memory,
 -  but the debug info may be not aware of it.
 -
 -
 -.. _OpenMP implementation details:
 -
 -OpenMP 5.0 Implementation Details
 -=================================
 -
 -The following table provides a quick overview over various OpenMP 5.0 features
 -and their implementation status. Please post on the
 -`Discourse forums (Runtimes - OpenMP category)`_ for more
 -information or if you want to help with the
 -implementation.
 -
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -|Category                      | Feature                                                      | Status                   | Reviews                                                               |
 -+==============================+==============================================================+==========================+=======================================================================+
 -| loop                         | support != in the canonical loop form                        | :good:`done`             | D54441                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| loop                         | #pragma omp loop (directive)                                 | :part:`partial`          | D145823 (combined forms)                                              |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| loop                         | #pragma omp loop bind                                        | :part:`worked on`        | D144634 (needs review)                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| loop                         | collapse imperfectly nested loop                             | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| loop                         | collapse non-rectangular nested loop                         | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| loop                         | C++ range-base for loop                                      | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| loop                         | clause: if for SIMD directives                               | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| loop                         | inclusive scan (matching C++17 PSTL)                         | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| memory management            | memory allocators                                            | :good:`done`             | r341687,r357929                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| memory management            | allocate directive and allocate clause                       | :good:`done`             | r355614,r335952                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| OMPD                         | OMPD interfaces                                              | :good:`done`             | https://reviews.llvm.org/D99914   (Supports only HOST(CPU) and Linux  |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| OMPT                         | OMPT interfaces (callback support)                           | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| thread affinity              | thread affinity                                              | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | taskloop reduction                                           | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | task affinity                                                | :part:`not upstream`     | https://github.com/jklinkenberg/openmp/tree/task-affinity             |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | clause: depend on the taskwait construct                     | :good:`done`             | D113540 (regular codegen only)                                        |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | depend objects and detachable tasks                          | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | mutexinoutset dependence-type for tasks                      | :good:`done`             | D53380,D57576                                                         |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | combined taskloop constructs                                 | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | master taskloop                                              | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | parallel master taskloop                                     | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | master taskloop simd                                         | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | parallel master taskloop simd                                | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| SIMD                         | atomic and simd constructs inside SIMD code                  | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| SIMD                         | SIMD nontemporal                                             | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | infer target functions from initializers                     | :part:`worked on`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | infer target variables from initializers                     | :good:`done`             | D146418                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | OMP_TARGET_OFFLOAD environment variable                      | :good:`done`             | D50522                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | support full 'defaultmap' functionality                      | :good:`done`             | D69204                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | device specific functions                                    | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | clause: device_type                                          | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | clause: extended device                                      | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | clause: uses_allocators clause                               | :good:`done`             | https://github.com/llvm/llvm-project/pull/157025                      |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | clause: in_reduction                                         | :part:`worked on`        | r308768                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | omp_get_device_num()                                         | :good:`done`             | D54342,D128347                                                        |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | structure mapping of references                              | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | nested target declare                                        | :good:`done`             | D51378                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | implicitly map 'this' (this[:1])                             | :good:`done`             | D55982                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | allow access to the reference count (omp_target_is_present)  | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | requires directive                                           | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | clause: unified_shared_memory                                | :good:`done`             | D52625,D52359                                                         |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | clause: unified_address                                      | :part:`partial`          |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | clause: reverse_offload                                      | :part:`partial`          | D52780,D155003                                                        |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | clause: atomic_default_mem_order                             | :good:`done`             | D53513                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | clause: dynamic_allocators                                   | :part:`unclaimed parts`  | D53079                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | user-defined mappers                                         | :good:`done`             | D56326,D58638,D58523,D58074,D60972,D59474                             |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | map array-section with implicit mapper                       | :good:`done`             |  https://github.com/llvm/llvm-project/pull/101101                     |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | mapping lambda expression                                    | :good:`done`             | D51107                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | clause: use_device_addr for target data                      | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | support close modifier on map clause                         | :good:`done`             | D55719,D55892                                                         |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | teams construct on the host device                           | :good:`done`             | r371553                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | support non-contiguous array sections for target update      | :good:`done`             | https://github.com/llvm/llvm-project/pull/144635                      |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | pointer attachment                                           | :part:`being repaired`   | @abhinavgaba (https://github.com/llvm/llvm-project/pull/153683)       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| atomic                       | hints for the atomic construct                               | :good:`done`             | D51233                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| base language                | C11 support                                                  | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| base language                | C++11/14/17 support                                          | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| base language                | lambda support                                               | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | array shaping                                                | :good:`done`             | D74144                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | library shutdown (omp_pause_resource[_all])                  | :good:`done`             | D55078                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | metadirectives                                               | :part:`mostly done`      | D91944, https://github.com/llvm/llvm-project/pull/128640              |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | conditional modifier for lastprivate clause                  | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | iterator and multidependences                                | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | depobj directive and depobj dependency kind                  | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | user-defined function variants                               | :good:`done`.            | D67294, D64095, D71847, D71830, D109635                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | pointer/reference to pointer based array reductions          | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | prevent new type definitions in clauses                      | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| memory model                 | memory model update (seq_cst, acq_rel, release, acquire,...) | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -
 -
 -.. _OpenMP 51 implementation details:
 -
 -OpenMP 5.1 Implementation Details
 -=================================
 -
 -The following table provides a quick overview over various OpenMP 5.1 features
 -and their implementation status.
 -Please post on the
 -`Discourse forums (Runtimes - OpenMP category)`_ for more
 -information or if you want to help with the
 -implementation.
 -
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -|Category                      | Feature                                                      | Status                   | Reviews                                                               |
 -+==============================+==============================================================+==========================+=======================================================================+
 -| atomic                       | 'compare' clause on atomic construct                         | :good:`done`             | D120290, D120007, D118632, D120200, D116261, D118547, D116637         |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| atomic                       | 'fail' clause on atomic construct                            | :part:`worked on`        | D123235 (in progress)                                                 |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| base language                | C++ attribute specifier syntax                               | :good:`done`             | D105648                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | 'present' map type modifier                                  | :good:`done`             | D83061, D83062, D84422                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | 'present' motion modifier                                    | :good:`done`             | D84711, D84712                                                        |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | 'present' in defaultmap clause                               | :good:`done`             | D92427                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | map clause reordering based on 'present' modifier            | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | device-specific environment variables                        | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | omp_target_is_accessible routine                             | :good:`done`             | https://github.com/llvm/llvm-project/pull/138294                      |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | omp_get_mapped_ptr routine                                   | :good:`done`             | D141545                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | new async target memory copy routines                        | :good:`done`             | D136103                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | thread_limit clause on target construct                      | :part:`partial`          | D141540 (offload), D152054 (host, in progress)                        |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | has_device_addr clause on target construct                   | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | iterators in map clause or motion clauses                    | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | indirect clause on declare target directive                  | :part:`In Progress`      |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | allow virtual functions calls for mapped object on device    | :part:`partial`          |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | interop construct                                            | :part:`partial`          | parsing/sema done: D98558, D98834, D98815                             |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| device                       | assorted routines for querying interoperable properties      | :part:`partial`          | D106674                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| loop                         | Loop tiling transformation                                   | :good:`done`             | D76342                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| loop                         | Loop unrolling transformation                                | :good:`done`             | D99459                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| loop                         | 'reproducible'/'unconstrained' modifiers in 'order' clause   | :part:`partial`          | D127855                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| memory management            | alignment for allocate directive and clause                  | :good:`done`             | D115683                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| memory management            | 'allocator' modifier for allocate clause                     | :good:`done`             | https://github.com/llvm/llvm-project/pull/114883                      |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| memory management            | 'align' modifier for allocate clause                         | :good:`done`             | https://github.com/llvm/llvm-project/pull/121814                      |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| memory management            | new memory management routines                               | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| memory management            | changes to omp_alloctrait_key enum                           | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| memory model                 | seq_cst clause on flush construct                            | :good:`done`             | https://github.com/llvm/llvm-project/pull/114072                      |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | 'omp_all_memory' keyword and use in 'depend' clause          | :good:`done`             | D125828, D126321                                                      |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | error directive                                              | :good:`done`             | D139166                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | scope construct                                              | :good:`done`             | D157933, https://github.com/llvm/llvm-project/pull/109197             |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | routines for controlling and querying team regions           | :part:`partial`          | D95003 (libomp only)                                                  |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | changes to ompt_scope_endpoint_t enum                        | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | omp_display_env routine                                      | :good:`done`             | D74956                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | extended OMP_PLACES syntax                                   | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | OMP_NUM_TEAMS and OMP_TEAMS_THREAD_LIMIT env vars            | :good:`done`             | D138769                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | 'target_device' selector in context specifier                | :none:`worked on`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | begin/end declare variant                                    | :good:`done`             | D71179                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | dispatch construct and function variant argument adjustment  | :part:`worked on`        | D99537, D99679                                                        |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | assumes directives                                           | :part:`worked on`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | assume directive                                             | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | nothing directive                                            | :good:`done`             | D123286                                                               |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | masked construct and related combined constructs             | :good:`done`             | D99995, D100514, PR-121741(parallel_masked_taskloop)                  |
 -|                              |                                                              |                          | PR-121746(parallel_masked_task_loop_simd),PR-121914(masked_taskloop)  |
 -|                              |                                                              |                          | PR-121916(masked_taskloop_simd)                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| misc                         | default(firstprivate) & default(private)                     | :good:`done`             | D75591 (firstprivate), D125912 (private)                              |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| other                        | deprecating master construct                                 | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| OMPT                         | new barrier types added to ompt_sync_region_t enum           | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| OMPT                         | async data transfers added to ompt_target_data_op_t enum     | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| OMPT                         | new barrier state values added to ompt_state_t enum          | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| OMPT                         | new 'emi' callbacks for external monitoring interfaces       | :good:`done`             |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| OMPT                         | device tracing interface                                     | :none:`in progress`      | jplehr                                                                |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | 'strict' modifier for taskloop construct                     | :none:`unclaimed`        |                                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | inoutset in depend clause                                    | :good:`done`             | D97085, D118383                                                       |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -| task                         | nowait clause on taskwait                                    | :part:`partial`          | parsing/sema done: D131830, D141531                                   |
 -+------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+
 -
 -
 -.. _OpenMP 5.2 implementation details:
 -
 -OpenMP 5.2 Implementation Details
 -=================================
 -
 -The following table provides a quick overview of various OpenMP 5.2 features
 -and their implementation status. Please post on the
 -`Discourse forums (Runtimes - OpenMP category)`_ for more
 -information or if you want to help with the
 -implementation.
 -
 -
 -
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -|Feature                                                      | C/C++ Status              |  Fortran Status           | Reviews                                                                  |
 -+=============================================================+===========================+===========================+==========================================================================+
 -| omp_in_explicit_task()                                      | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| semantics of explicit_task_var and implicit_task_var        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| ompx sentinel for C/C++ directive extensions                | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| ompx prefix for clause extensions                           | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| if clause on teams construct                                | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| step modifier added                                         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| declare mapper: Add iterator modifier on map clause         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| declare mapper: Add iterator modifier on map clause         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| memspace and traits modifiers to uses allocator         i   | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Add otherwise clause to metadirectives                      | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| doacross clause with support for omp_cur_iteration          | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| position of interop_type in init clause on iterop           | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| implicit map type for target enter/exit data                | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| work OMPT type for work-sharing loop constructs             | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| allocate and firstprivate on scope directive                | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Change loop consistency for order clause                    | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Add memspace and traits modifiers to uses_allocators        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Keep original base pointer on map w/o matched candidate     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Pure procedure support for certain directives               | :none:`N/A`               | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| ALLOCATE statement support for allocators                   | :none:`N/A`               | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| dispatch construct extension to support end directive       | :none:`N/A`               | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -
 -
 -
 -.. _OpenMP 5.2 Deprecations:
 -
 -OpenMP 5.2 Deprecations
 -=======================
 -
 -
 -
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -|                                                             | C/C++ Status              |  Fortran Status           | Reviews                                                                  |
 -+=============================================================+===========================+===========================+==========================================================================+
 -| Linear clause syntax                                        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| The minus operator                                          | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Map clause modifiers without commas                         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| The use of allocate directives with ALLOCATE statement      | :good:`N/A`               | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| uses_allocators list syntax                                 | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| The default clause on metadirectives                        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| The delimited form of the declare target directive          | :none:`unclaimed`         | :good:`N/A`               |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| The use of the to clause on the declare target directive    | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| The syntax of the destroy clause on the depobj construct    | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| keyword source and sink as task-dependence modifiers        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| interop types in any position on init clause of interop     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| ompd prefix usage for some ICVs                             | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -
 -.. _OpenMP 6.0 implementation details:
 -
 -OpenMP 6.0 Implementation Details
 -=================================
 -
 -The following table provides a quick overview of various OpenMP 6.0 features
 -and their implementation status. Please post on the
 -`Discourse forums (Runtimes - OpenMP category)`_ for more
 -information or if you want to help with the
 -implementation.
 -
 -
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -|Feature                                                      | C/C++ Status              |  Fortran Status           | Reviews                                                                  |
 -+=============================================================+===========================+===========================+==========================================================================+
 -| free-agent threads                                          | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| threadset clause                                            | :part:`in progress`       | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Recording of task graphs                                    | :part:`in progress`       | :part:`in progress`       | clang: jtb20, flang: kparzysz                                            |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Parallel inductions                                         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| init_complete for scan directive                            | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| loop interchange transformation                             | :good:`done`              | :none:`unclaimed`         | Clang (interchange): https://github.com/llvm/llvm-project/pull/93022     |
 -|                                                             |                           |                           | Clang (permutation): https://github.com/llvm/llvm-project/pull/92030     |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| loop reverse transformation                                 | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/92916                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| loop stripe transformation                                  | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/119891                         |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| loop fusion transformation                                  | :part:`in progress`       | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/139293                         |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| loop index set splitting transformation                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| loop transformation apply clause                            | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| loop fuse transformation                                    | :good:`done`              | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| workdistribute construct                                    |                           | :none:`in progress`       | @skc7, @mjklemm                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| task_iteration                                              | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| memscope clause for atomic and flush                        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| transparent clause (hull tasks)                             | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| rule-based compound directives                              | :part:`In Progress`       | :part:`In Progress`       | kparzysz                                                                 |
 -|                                                             |                           |                           | Testing for Fortran missing                                              |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| C23, C++23                                                  | :none:`unclaimed`         |                           |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Fortran 2023                                                |                           | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| decl attribute for declarative directives                   | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| C attribute syntax                                          | :none:`unclaimed`         |                           |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| pure directives in DO CONCURRENT                            |                           | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Optional argument for all clauses                           | :none:`partial`           | :none:`In Progress`       | Parse/Sema (nowait): https://github.com/llvm/llvm-project/pull/159628    |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Function references for locator list items                  | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| All clauses accept directive name modifier                  | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Extensions to depobj construct                              | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Extensions to atomic construct                              | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Private reductions                                          | :good:`mostly`            | :none:`unclaimed`         | Parse/Sema:https://github.com/llvm/llvm-project/pull/129938              |
 -|                                                             |                           |                           | Codegen: https://github.com/llvm/llvm-project/pull/134709                |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Self maps                                                   | :part:`partial`           | :none:`unclaimed`         | parsing/sema done: https://github.com/llvm/llvm-project/pull/129888      |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Release map type for declare mapper                         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Extensions to interop construct                             | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| no_openmp_constructs                                        | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/125933                         |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| safe_sync and progress with identifier and API              | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| OpenMP directives in concurrent loop regions                | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/125621                         |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| atomics constructs on concurrent loop regions               | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/125621                         |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Loop construct with DO CONCURRENT                           |                           | :part:`In Progress`       |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| device_type clause for target construct                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| nowait for ancestor target directives                       | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| New API for devices' num_teams/thread_limit                 | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Host and device environment variables                       | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| num_threads ICV and clause accepts list                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Numeric names for environment variables                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Increment between places for OMP_PLACES                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| OMP_AVAILABLE_DEVICES envirable                             | :none:`unclaimed`         | :none:`unclaimed`         | (should wait for "Traits for default device envirable" being done)       |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Traits for default device envirable                         | :part:`in progress`       | :none:`unclaimed`         | ro-i                                                                     |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Optionally omit array length expression                     | :good:`done`              | :none:`unclaimed`         | (Parse) https://github.com/llvm/llvm-project/pull/148048,                |
 -|                                                             |                           |                           | (Sema) https://github.com/llvm/llvm-project/pull/152786                  |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Canonical loop sequences                                    | :part:`in progress`       | :part:`in progress`       | Clang: https://github.com/llvm/llvm-project/pull/139293                  |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Clarifications to Fortran map semantics                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| default clause at target construct                          | :part:`In Progress`       | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| ref count update use_device_{ptr, addr}                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Clarifications to implicit reductions                       | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| ref modifier for map clauses                                | :part:`In Progress`       | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| map-type modifiers in arbitrary position                    | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/90499                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Lift nesting restriction on concurrent loop                 | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/125621                         |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| priority clause for target constructs                       | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| changes to target_data construct                            | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Non-const do_not_sync for nowait/nogroup                    | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| need_device_addr modifier for adjust_args clause            | :part:`partial`           | :none:`unclaimed`         | Parsing/Sema: https://github.com/llvm/llvm-project/pull/143442           |
 -|                                                             |                           |                           |               https://github.com/llvm/llvm-project/pull/149586           |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Prescriptive num_threads                                    | :good:`done`              | :none:`unclaimed`         |  https://github.com/llvm/llvm-project/pull/160659                        |
 -|                                                             |                           |                           |  https://github.com/llvm/llvm-project/pull/146403                        |
 -|                                                             |                           |                           |  https://github.com/llvm/llvm-project/pull/146404                        |
 -|                                                             |                           |                           |  https://github.com/llvm/llvm-project/pull/146405                        |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Message and severity clauses                                | :good:`done`              | :none:`unclaimed`         |  https://github.com/llvm/llvm-project/pull/146093                        |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Local clause on declare target                              | :part:`In Progress`       | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| groupprivate directive                                      | :part:`In Progress`       | :part:`partial`           | Flang: kparzysz, mjklemm                                                 |
 -|                                                             |                           |                           |                                                                          |
 -|                                                             |                           |                           | Flang parser: https://github.com/llvm/llvm-project/pull/153807           |
 -|                                                             |                           |                           | Flang sema: https://github.com/llvm/llvm-project/pull/154779             |
 -|                                                             |                           |                           | Clang parse/sema: https://github.com/llvm/llvm-project/pull/158134       |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| variable-category on default clause                         | :good:`done`              | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| Changes to omp_target_is_accessible                         | :part:`In Progress`       | :part:`In Progress`       |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| defaultmap implicit-behavior 'storage'                      | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/158336                         |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| defaultmap implicit-behavior 'private'                      | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/158712                         |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -
 -.. _OpenMP 6.1 implementation details:
 -
 -OpenMP 6.1 Implementation Details (Experimental)
 -================================================
 -
 -The following table provides a quick overview over various OpenMP 6.1 features
 -and their implementation status. Since OpenMP 6.1 has not yet been released, the
 -following features are experimental and are subject to change at any time.
 -Please post on the `Discourse forums (Runtimes - OpenMP category)`_ for more
 -information or if you want to help with the
 -implementation.
 -
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -|Feature                                                      | C/C++ Status              | Fortran Status            | Reviews                                                                  |
 -+=============================================================+===========================+===========================+==========================================================================+
 -| dyn_groupprivate clause                                     | :part:`In Progress`       | :part:`In Progress`       | C/C++: kevinsala (https://github.com/llvm/llvm-project/pull/152651       |
 -|                                                             |                           |                           | https://github.com/llvm/llvm-project/pull/152830                         |
 -|                                                             |                           |                           | https://github.com/llvm/llvm-project/pull/152831)                        |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| loop flatten transformation                                 | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| loop grid/tile modifiers for sizes clause                   | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -| attach map-type modifier                                    | :part:`In Progress`       | :none:`unclaimed`         | C/C++: @abhinavgaba;                                                     |
 -|                                                             |                           |                           | RT: @abhinavgaba (https://github.com/llvm/llvm-project/pull/149036,      |
 -|                                                             |                           |                           | https://github.com/llvm/llvm-project/pull/158370)                        |
 -+-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+
 -
 -
 -OpenMP Extensions
 -=================
 -
 -The following table provides a quick overview over various OpenMP
 -extensions and their implementation status.  These extensions are not
 -currently defined by any standard, so links to associated LLVM
 -documentation are provided.  As these extensions mature, they will be
 -considered for standardization. Please post on the
 -`Discourse forums (Runtimes - OpenMP category)`_ to provide feedback.
 -
 -+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+
 -|Category                      | Feature                                                                           | Status                   | Reviews                                                |
 -+==============================+===================================================================================+==========================+========================================================+
 -| atomic extension             | `'atomic' strictly nested within 'teams'                                          | :good:`prototyped`       | D126323                                                |
 -|                              | <https://openmp.llvm.org/docs/openacc/OpenMPExtensions.html#atomicWithinTeams>`_  |                          |                                                        |
 -+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+
 -| device extension             | `'ompx_hold' map type modifier                                                    | :good:`prototyped`       | D106509, D106510                                       |
 -|                              | <https://openmp.llvm.org/docs/openacc/OpenMPExtensions.html#ompx-hold>`_          |                          |                                                        |
 -+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+
 -| device extension             | `'ompx_bare' clause on 'target teams' construct                                   | :good:`prototyped`       | #66844, #70612                                         |
 -|                              | <https://www.osti.gov/servlets/purl/2205717>`_                                    |                          |                                                        |
 -+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+
 -| device extension             | Multi-dim 'num_teams' and 'thread_limit' clause on 'target teams ompx_bare'       | :good:`partial`          | #99732, #101407, #102715                               |
 -|                              | construct                                                                         |                          |                                                        |
 -+------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+
 -
 -.. _Discourse forums (Runtimes - OpenMP category): https://discourse.llvm.org/c/runtimes/openmp/35
 +.. raw:: html + +  <style type="text/css"> +    .none { background-color: #FFCCCC } +    .part { background-color: #FFFF99 } +    .good { background-color: #CCFF99 } +  </style> + +.. role:: none +.. role:: part +.. role:: good + +.. contents:: +   :local: + +============== +OpenMP Support +============== + +Clang fully supports OpenMP 4.5, almost all of 5.0 and most of 5.1/2. +Clang supports offloading to X86_64, AArch64, PPC64[LE], NVIDIA GPUs (all models) and AMD GPUs (all models). + +In addition, the LLVM OpenMP runtime `libomp` supports the OpenMP Tools +Interface (OMPT) on x86, x86_64, AArch64, and PPC64 on Linux, Windows, and macOS. +OMPT is also supported for NVIDIA and AMD GPUs. + +For the list of supported features from OpenMP 5.0 and 5.1 +see `OpenMP implementation details`_ and `OpenMP 51 implementation details`_. + +General improvements +==================== +- New collapse clause scheme to avoid expensive remainder operations. +  Compute loop index variables after collapsing a loop nest via the +  collapse clause by replacing the expensive remainder operation with +  multiplications and additions. + +- When using the collapse clause on a loop nest the default behavior +  is to automatically extend the representation of the loop counter to +  64 bits for the cases where the sizes of the collapsed loops are not +  known at compile time. To prevent this conservative choice and use +  at most 32 bits, compile your program with the +  `-fopenmp-optimistic-collapse`. + + +GPU devices support +=================== + +Data-sharing modes +------------------ + +Clang supports two data-sharing models for Cuda devices: `Generic` and `Cuda` +modes. The default mode is `Generic`. `Cuda` mode can give an additional +performance and can be activated using the `-fopenmp-cuda-mode` flag. In +`Generic` mode all local variables that can be shared in the parallel regions +are stored in the global memory. In `Cuda` mode local variables are not shared +between the threads and it is user responsibility to share the required data +between the threads in the parallel regions. Often, the optimizer is able to +reduce the cost of `Generic` mode to the level of `Cuda` mode, but the flag, +as well as other assumption flags, can be used for tuning. + +Features not supported or with limited support for Cuda devices +--------------------------------------------------------------- + +- Cancellation constructs are not supported. + +- Doacross loop nest is not supported. + +- User-defined reductions are supported only for trivial types. + +- Nested parallelism: inner parallel regions are executed sequentially. + +- Debug information for OpenMP target regions is supported, but sometimes it may +  be required to manually specify the address class of the inspected variables. +  In some cases the local variables are actually allocated in the global memory, +  but the debug info may be not aware of it. + + +.. _OpenMP implementation details: + +OpenMP 5.0 Implementation Details +================================= + +The following table provides a quick overview over various OpenMP 5.0 features +and their implementation status. Please post on the +`Discourse forums (Runtimes - OpenMP category)`_ for more +information or if you want to help with the +implementation. + ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +|Category                      | Feature                                                      | Status                   | Reviews                                                               | ++==============================+==============================================================+==========================+=======================================================================+ +| loop                         | support != in the canonical loop form                        | :good:`done`             | D54441                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| loop                         | #pragma omp loop (directive)                                 | :part:`partial`          | D145823 (combined forms)                                              | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| loop                         | #pragma omp loop bind                                        | :part:`worked on`        | D144634 (needs review)                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| loop                         | collapse imperfectly nested loop                             | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| loop                         | collapse non-rectangular nested loop                         | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| loop                         | C++ range-base for loop                                      | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| loop                         | clause: if for SIMD directives                               | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| loop                         | inclusive scan (matching C++17 PSTL)                         | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| memory management            | memory allocators                                            | :good:`done`             | r341687,r357929                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| memory management            | allocate directive and allocate clause                       | :good:`done`             | r355614,r335952                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| OMPD                         | OMPD interfaces                                              | :good:`done`             | https://reviews.llvm.org/D99914   (Supports only HOST(CPU) and Linux  | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| OMPT                         | OMPT interfaces (callback support)                           | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| thread affinity              | thread affinity                                              | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | taskloop reduction                                           | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | task affinity                                                | :part:`not upstream`     | https://github.com/jklinkenberg/openmp/tree/task-affinity             | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | clause: depend on the taskwait construct                     | :good:`done`             | D113540 (regular codegen only)                                        | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | depend objects and detachable tasks                          | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | mutexinoutset dependence-type for tasks                      | :good:`done`             | D53380,D57576                                                         | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | combined taskloop constructs                                 | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | master taskloop                                              | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | parallel master taskloop                                     | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | master taskloop simd                                         | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | parallel master taskloop simd                                | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| SIMD                         | atomic and simd constructs inside SIMD code                  | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| SIMD                         | SIMD nontemporal                                             | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | infer target functions from initializers                     | :part:`worked on`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | infer target variables from initializers                     | :good:`done`             | D146418                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | OMP_TARGET_OFFLOAD environment variable                      | :good:`done`             | D50522                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | support full 'defaultmap' functionality                      | :good:`done`             | D69204                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | device specific functions                                    | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | clause: device_type                                          | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | clause: extended device                                      | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | clause: uses_allocators clause                               | :good:`done`             | https://github.com/llvm/llvm-project/pull/157025                      | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | clause: in_reduction                                         | :part:`worked on`        | r308768                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | omp_get_device_num()                                         | :good:`done`             | D54342,D128347                                                        | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | structure mapping of references                              | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | nested target declare                                        | :good:`done`             | D51378                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | implicitly map 'this' (this[:1])                             | :good:`done`             | D55982                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | allow access to the reference count (omp_target_is_present)  | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | requires directive                                           | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | clause: unified_shared_memory                                | :good:`done`             | D52625,D52359                                                         | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | clause: unified_address                                      | :part:`partial`          |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | clause: reverse_offload                                      | :part:`partial`          | D52780,D155003                                                        | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | clause: atomic_default_mem_order                             | :good:`done`             | D53513                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | clause: dynamic_allocators                                   | :part:`unclaimed parts`  | D53079                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | user-defined mappers                                         | :good:`done`             | D56326,D58638,D58523,D58074,D60972,D59474                             | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | map array-section with implicit mapper                       | :good:`done`             |  https://github.com/llvm/llvm-project/pull/101101                     | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | mapping lambda expression                                    | :good:`done`             | D51107                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | clause: use_device_addr for target data                      | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | support close modifier on map clause                         | :good:`done`             | D55719,D55892                                                         | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | teams construct on the host device                           | :good:`done`             | r371553                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | support non-contiguous array sections for target update      | :good:`done`             | https://github.com/llvm/llvm-project/pull/144635                      | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | pointer attachment                                           | :part:`being repaired`   | @abhinavgaba (https://github.com/llvm/llvm-project/pull/153683)       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| atomic                       | hints for the atomic construct                               | :good:`done`             | D51233                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| base language                | C11 support                                                  | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| base language                | C++11/14/17 support                                          | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| base language                | lambda support                                               | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | array shaping                                                | :good:`done`             | D74144                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | library shutdown (omp_pause_resource[_all])                  | :good:`done`             | D55078                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | metadirectives                                               | :part:`mostly done`      | D91944, https://github.com/llvm/llvm-project/pull/128640              | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | conditional modifier for lastprivate clause                  | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | iterator and multidependences                                | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | depobj directive and depobj dependency kind                  | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | user-defined function variants                               | :good:`done`.            | D67294, D64095, D71847, D71830, D109635                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | pointer/reference to pointer based array reductions          | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | prevent new type definitions in clauses                      | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| memory model                 | memory model update (seq_cst, acq_rel, release, acquire,...) | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ + + +.. _OpenMP 51 implementation details: + +OpenMP 5.1 Implementation Details +================================= + +The following table provides a quick overview over various OpenMP 5.1 features +and their implementation status. +Please post on the +`Discourse forums (Runtimes - OpenMP category)`_ for more +information or if you want to help with the +implementation. + ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +|Category                      | Feature                                                      | Status                   | Reviews                                                               | ++==============================+==============================================================+==========================+=======================================================================+ +| atomic                       | 'compare' clause on atomic construct                         | :good:`done`             | D120290, D120007, D118632, D120200, D116261, D118547, D116637         | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| atomic                       | 'fail' clause on atomic construct                            | :part:`worked on`        | D123235 (in progress)                                                 | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| base language                | C++ attribute specifier syntax                               | :good:`done`             | D105648                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | 'present' map type modifier                                  | :good:`done`             | D83061, D83062, D84422                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | 'present' motion modifier                                    | :good:`done`             | D84711, D84712                                                        | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | 'present' in defaultmap clause                               | :good:`done`             | D92427                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | map clause reordering based on 'present' modifier            | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | device-specific environment variables                        | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | omp_target_is_accessible routine                             | :good:`done`             | https://github.com/llvm/llvm-project/pull/138294                      | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | omp_get_mapped_ptr routine                                   | :good:`done`             | D141545                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | new async target memory copy routines                        | :good:`done`             | D136103                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | thread_limit clause on target construct                      | :part:`partial`          | D141540 (offload), D152054 (host, in progress)                        | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | has_device_addr clause on target construct                   | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | iterators in map clause or motion clauses                    | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | indirect clause on declare target directive                  | :part:`In Progress`      |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | allow virtual functions calls for mapped object on device    | :part:`partial`          |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | interop construct                                            | :part:`partial`          | parsing/sema done: D98558, D98834, D98815                             | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| device                       | assorted routines for querying interoperable properties      | :part:`partial`          | D106674                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| loop                         | Loop tiling transformation                                   | :good:`done`             | D76342                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| loop                         | Loop unrolling transformation                                | :good:`done`             | D99459                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| loop                         | 'reproducible'/'unconstrained' modifiers in 'order' clause   | :part:`partial`          | D127855                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| memory management            | alignment for allocate directive and clause                  | :good:`done`             | D115683                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| memory management            | 'allocator' modifier for allocate clause                     | :good:`done`             | https://github.com/llvm/llvm-project/pull/114883                      | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| memory management            | 'align' modifier for allocate clause                         | :good:`done`             | https://github.com/llvm/llvm-project/pull/121814                      | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| memory management            | new memory management routines                               | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| memory management            | changes to omp_alloctrait_key enum                           | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| memory model                 | seq_cst clause on flush construct                            | :good:`done`             | https://github.com/llvm/llvm-project/pull/114072                      | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | 'omp_all_memory' keyword and use in 'depend' clause          | :good:`done`             | D125828, D126321                                                      | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | error directive                                              | :good:`done`             | D139166                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | scope construct                                              | :good:`done`             | D157933, https://github.com/llvm/llvm-project/pull/109197             | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | routines for controlling and querying team regions           | :part:`partial`          | D95003 (libomp only)                                                  | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | changes to ompt_scope_endpoint_t enum                        | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | omp_display_env routine                                      | :good:`done`             | D74956                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | extended OMP_PLACES syntax                                   | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | OMP_NUM_TEAMS and OMP_TEAMS_THREAD_LIMIT env vars            | :good:`done`             | D138769                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | 'target_device' selector in context specifier                | :none:`worked on`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | begin/end declare variant                                    | :good:`done`             | D71179                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | dispatch construct and function variant argument adjustment  | :part:`worked on`        | D99537, D99679                                                        | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | assumes directives                                           | :part:`worked on`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | assume directive                                             | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | nothing directive                                            | :good:`done`             | D123286                                                               | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | masked construct and related combined constructs             | :good:`done`             | D99995, D100514, PR-121741(parallel_masked_taskloop)                  | +|                              |                                                              |                          | PR-121746(parallel_masked_task_loop_simd),PR-121914(masked_taskloop)  | +|                              |                                                              |                          | PR-121916(masked_taskloop_simd)                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| misc                         | default(firstprivate) & default(private)                     | :good:`done`             | D75591 (firstprivate), D125912 (private)                              | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| other                        | deprecating master construct                                 | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| OMPT                         | new barrier types added to ompt_sync_region_t enum           | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| OMPT                         | async data transfers added to ompt_target_data_op_t enum     | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| OMPT                         | new barrier state values added to ompt_state_t enum          | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| OMPT                         | new 'emi' callbacks for external monitoring interfaces       | :good:`done`             |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| OMPT                         | device tracing interface                                     | :none:`in progress`      | jplehr                                                                | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | 'strict' modifier for taskloop construct                     | :none:`unclaimed`        |                                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | inoutset in depend clause                                    | :good:`done`             | D97085, D118383                                                       | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ +| task                         | nowait clause on taskwait                                    | :part:`partial`          | parsing/sema done: D131830, D141531                                   | ++------------------------------+--------------------------------------------------------------+--------------------------+-----------------------------------------------------------------------+ + + +.. _OpenMP 5.2 implementation details: + +OpenMP 5.2 Implementation Details +================================= + +The following table provides a quick overview of various OpenMP 5.2 features +and their implementation status. Please post on the +`Discourse forums (Runtimes - OpenMP category)`_ for more +information or if you want to help with the +implementation. + + + ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +|Feature                                                      | C/C++ Status              |  Fortran Status           | Reviews                                                                  | ++=============================================================+===========================+===========================+==========================================================================+ +| omp_in_explicit_task()                                      | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| semantics of explicit_task_var and implicit_task_var        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| ompx sentinel for C/C++ directive extensions                | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| ompx prefix for clause extensions                           | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| if clause on teams construct                                | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| step modifier added                                         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| declare mapper: Add iterator modifier on map clause         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| declare mapper: Add iterator modifier on map clause         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| memspace and traits modifiers to uses allocator         i   | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Add otherwise clause to metadirectives                      | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| doacross clause with support for omp_cur_iteration          | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| position of interop_type in init clause on iterop           | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| implicit map type for target enter/exit data                | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| work OMPT type for work-sharing loop constructs             | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| allocate and firstprivate on scope directive                | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Change loop consistency for order clause                    | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Add memspace and traits modifiers to uses_allocators        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Keep original base pointer on map w/o matched candidate     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Pure procedure support for certain directives               | :none:`N/A`               | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| ALLOCATE statement support for allocators                   | :none:`N/A`               | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| dispatch construct extension to support end directive       | :none:`N/A`               | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ + + + +.. _OpenMP 5.2 Deprecations: + +OpenMP 5.2 Deprecations +======================= + + + ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +|                                                             | C/C++ Status              |  Fortran Status           | Reviews                                                                  | ++=============================================================+===========================+===========================+==========================================================================+ +| Linear clause syntax                                        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| The minus operator                                          | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Map clause modifiers without commas                         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| The use of allocate directives with ALLOCATE statement      | :good:`N/A`               | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| uses_allocators list syntax                                 | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| The default clause on metadirectives                        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| The delimited form of the declare target directive          | :none:`unclaimed`         | :good:`N/A`               |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| The use of the to clause on the declare target directive    | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| The syntax of the destroy clause on the depobj construct    | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| keyword source and sink as task-dependence modifiers        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| interop types in any position on init clause of interop     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| ompd prefix usage for some ICVs                             | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ + +.. _OpenMP 6.0 implementation details: + +OpenMP 6.0 Implementation Details +================================= + +The following table provides a quick overview of various OpenMP 6.0 features +and their implementation status. Please post on the +`Discourse forums (Runtimes - OpenMP category)`_ for more +information or if you want to help with the +implementation. + + ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +|Feature                                                      | C/C++ Status              |  Fortran Status           | Reviews                                                                  | ++=============================================================+===========================+===========================+==========================================================================+ +| free-agent threads                                          | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| threadset clause                                            | :part:`partial`           | :none:`unclaimed`         | Parse/Sema/Codegen : https://github.com/llvm/llvm-project/pull/13580     | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Recording of task graphs                                    | :part:`in progress`       | :part:`in progress`       | clang: jtb20, flang: kparzysz                                            | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Parallel inductions                                         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| init_complete for scan directive                            | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| loop interchange transformation                             | :good:`done`              | :none:`unclaimed`         | Clang (interchange): https://github.com/llvm/llvm-project/pull/93022     | +|                                                             |                           |                           | Clang (permutation): https://github.com/llvm/llvm-project/pull/92030     | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| loop reverse transformation                                 | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/92916                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| loop stripe transformation                                  | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/119891                         | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| loop fusion transformation                                  | :part:`in progress`       | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/139293                         | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| loop index set splitting transformation                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| loop transformation apply clause                            | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| loop fuse transformation                                    | :good:`done`              | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| workdistribute construct                                    |                           | :none:`in progress`       | @skc7, @mjklemm                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| task_iteration                                              | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| memscope clause for atomic and flush                        | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| transparent clause (hull tasks)                             | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| rule-based compound directives                              | :part:`In Progress`       | :part:`In Progress`       | kparzysz                                                                 | +|                                                             |                           |                           | Testing for Fortran missing                                              | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| C23, C++23                                                  | :none:`unclaimed`         |                           |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Fortran 2023                                                |                           | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| decl attribute for declarative directives                   | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| C attribute syntax                                          | :none:`unclaimed`         |                           |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| pure directives in DO CONCURRENT                            |                           | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Optional argument for all clauses                           | :none:`partial`           | :none:`In Progress`       | Parse/Sema (nowait): https://github.com/llvm/llvm-project/pull/159628    | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Function references for locator list items                  | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| All clauses accept directive name modifier                  | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Extensions to depobj construct                              | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Extensions to atomic construct                              | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Private reductions                                          | :good:`mostly`            | :none:`unclaimed`         | Parse/Sema:https://github.com/llvm/llvm-project/pull/129938              | +|                                                             |                           |                           | Codegen: https://github.com/llvm/llvm-project/pull/134709                | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Self maps                                                   | :part:`partial`           | :none:`unclaimed`         | parsing/sema done: https://github.com/llvm/llvm-project/pull/129888      | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Release map type for declare mapper                         | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Extensions to interop construct                             | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| no_openmp_constructs                                        | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/125933                         | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| safe_sync and progress with identifier and API              | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| OpenMP directives in concurrent loop regions                | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/125621                         | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| atomics constructs on concurrent loop regions               | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/125621                         | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Loop construct with DO CONCURRENT                           |                           | :part:`In Progress`       |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| device_type clause for target construct                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| nowait for ancestor target directives                       | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| New API for devices' num_teams/thread_limit                 | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Host and device environment variables                       | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| num_threads ICV and clause accepts list                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Numeric names for environment variables                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Increment between places for OMP_PLACES                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| OMP_AVAILABLE_DEVICES envirable                             | :none:`unclaimed`         | :none:`unclaimed`         | (should wait for "Traits for default device envirable" being done)       | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Traits for default device envirable                         | :part:`in progress`       | :none:`unclaimed`         | ro-i                                                                     | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Optionally omit array length expression                     | :good:`done`              | :none:`unclaimed`         | (Parse) https://github.com/llvm/llvm-project/pull/148048,                | +|                                                             |                           |                           | (Sema) https://github.com/llvm/llvm-project/pull/152786                  | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Canonical loop sequences                                    | :part:`in progress`       | :part:`in progress`       | Clang: https://github.com/llvm/llvm-project/pull/139293                  | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Clarifications to Fortran map semantics                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| default clause at target construct                          | :part:`In Progress`       | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| ref count update use_device_{ptr, addr}                     | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Clarifications to implicit reductions                       | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| ref modifier for map clauses                                | :part:`In Progress`       | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| map-type modifiers in arbitrary position                    | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/90499                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Lift nesting restriction on concurrent loop                 | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/125621                         | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| priority clause for target constructs                       | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| changes to target_data construct                            | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Non-const do_not_sync for nowait/nogroup                    | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| need_device_addr modifier for adjust_args clause            | :part:`partial`           | :none:`unclaimed`         | Parsing/Sema: https://github.com/llvm/llvm-project/pull/143442           | +|                                                             |                           |                           |               https://github.com/llvm/llvm-project/pull/149586           | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Prescriptive num_threads                                    | :good:`done`              | :none:`unclaimed`         |  https://github.com/llvm/llvm-project/pull/160659                        | +|                                                             |                           |                           |  https://github.com/llvm/llvm-project/pull/146403                        | +|                                                             |                           |                           |  https://github.com/llvm/llvm-project/pull/146404                        | +|                                                             |                           |                           |  https://github.com/llvm/llvm-project/pull/146405                        | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Message and severity clauses                                | :good:`done`              | :none:`unclaimed`         |  https://github.com/llvm/llvm-project/pull/146093                        | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Local clause on declare target                              | :part:`In Progress`       | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| groupprivate directive                                      | :part:`In Progress`       | :part:`partial`           | Flang: kparzysz, mjklemm                                                 | +|                                                             |                           |                           |                                                                          | +|                                                             |                           |                           | Flang parser: https://github.com/llvm/llvm-project/pull/153807           | +|                                                             |                           |                           | Flang sema: https://github.com/llvm/llvm-project/pull/154779             | +|                                                             |                           |                           | Clang parse/sema: https://github.com/llvm/llvm-project/pull/158134       | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| variable-category on default clause                         | :good:`done`              | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| Changes to omp_target_is_accessible                         | :part:`In Progress`       | :part:`In Progress`       |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| defaultmap implicit-behavior 'storage'                      | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/158336                         | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| defaultmap implicit-behavior 'private'                      | :good:`done`              | :none:`unclaimed`         | https://github.com/llvm/llvm-project/pull/158712                         | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ + +.. _OpenMP 6.1 implementation details: + +OpenMP 6.1 Implementation Details (Experimental) +================================================ + +The following table provides a quick overview over various OpenMP 6.1 features +and their implementation status. Since OpenMP 6.1 has not yet been released, the +following features are experimental and are subject to change at any time. +Please post on the `Discourse forums (Runtimes - OpenMP category)`_ for more +information or if you want to help with the +implementation. + ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +|Feature                                                      | C/C++ Status              | Fortran Status            | Reviews                                                                  | ++=============================================================+===========================+===========================+==========================================================================+ +| dyn_groupprivate clause                                     | :part:`In Progress`       | :part:`In Progress`       | C/C++: kevinsala (https://github.com/llvm/llvm-project/pull/152651       | +|                                                             |                           |                           | https://github.com/llvm/llvm-project/pull/152830                         | +|                                                             |                           |                           | https://github.com/llvm/llvm-project/pull/152831)                        | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| loop flatten transformation                                 | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| loop grid/tile modifiers for sizes clause                   | :none:`unclaimed`         | :none:`unclaimed`         |                                                                          | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ +| attach map-type modifier                                    | :part:`In Progress`       | :none:`unclaimed`         | C/C++: @abhinavgaba;                                                     | +|                                                             |                           |                           | RT: @abhinavgaba (https://github.com/llvm/llvm-project/pull/149036,      | +|                                                             |                           |                           | https://github.com/llvm/llvm-project/pull/158370)                        | ++-------------------------------------------------------------+---------------------------+---------------------------+--------------------------------------------------------------------------+ + + +OpenMP Extensions +================= + +The following table provides a quick overview over various OpenMP +extensions and their implementation status.  These extensions are not +currently defined by any standard, so links to associated LLVM +documentation are provided.  As these extensions mature, they will be +considered for standardization. Please post on the +`Discourse forums (Runtimes - OpenMP category)`_ to provide feedback. + ++------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+ +|Category                      | Feature                                                                           | Status                   | Reviews                                                | ++==============================+===================================================================================+==========================+========================================================+ +| atomic extension             | `'atomic' strictly nested within 'teams'                                          | :good:`prototyped`       | D126323                                                | +|                              | <https://openmp.llvm.org/docs/openacc/OpenMPExtensions.html#atomicWithinTeams>`_  |                          |                                                        | ++------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+ +| device extension             | `'ompx_hold' map type modifier                                                    | :good:`prototyped`       | D106509, D106510                                       | +|                              | <https://openmp.llvm.org/docs/openacc/OpenMPExtensions.html#ompx-hold>`_          |                          |                                                        | ++------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+ +| device extension             | `'ompx_bare' clause on 'target teams' construct                                   | :good:`prototyped`       | #66844, #70612                                         | +|                              | <https://www.osti.gov/servlets/purl/2205717>`_                                    |                          |                                                        | ++------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+ +| device extension             | Multi-dim 'num_teams' and 'thread_limit' clause on 'target teams ompx_bare'       | :good:`partial`          | #99732, #101407, #102715                               | +|                              | construct                                                                         |                          |                                                        | ++------------------------------+-----------------------------------------------------------------------------------+--------------------------+--------------------------------------------------------+ + +.. _Discourse forums (Runtimes - OpenMP category): https://discourse.llvm.org/c/runtimes/openmp/35 | 
