[flang-commits] [flang] [openmp] [flang][OpenMP] add Flang OpenMP Support page (NFC) (PR #205833)

Tom Eccles via flang-commits flang-commits at lists.llvm.org
Mon Jun 29 06:56:51 PDT 2026


================
@@ -8,56 +8,224 @@
 
 # Flang OpenMP Support
 
+```{raw} html
+<style type="text/css">
+   .none { background-color: #FFCCCC }
+   .part { background-color: #FFFF99 }
+   .progress { background-color: #CCE5FF }
+   .good { background-color: #CCFF99 }
+
+   .none,
+   .part,
+   .progress,
+   .good {
+      border-radius: 0.25rem;
+      color: inherit;
+      display: inline-block;
+      font-weight: 600;
+      padding: 0.1rem 0.4rem;
+      white-space: nowrap;
+   }
+
+   table.docutils td p,
+   table.docutils th p,
+   table.docutils td,
+   table.docutils th {
+      text-align: left;
+      text-justify: auto;
+      word-spacing: normal;
+   }
+</style>
+```
+
 ```{contents}
 ---
 local:
 ---
 ```
 
-This document outlines the OpenMP API features supported by Flang. It is intended as a general reference.
-For the most accurate information on unimplemented features, rely on the compiler’s TODO or “Not Yet Implemented”
-messages, which are considered authoritative. Flang provides complete implementation of the OpenMP 3.1 specification and partial implementation of OpenMP 4.0, with continued development efforts aimed at extending full support for the latter.
-The table below outlines the current status of OpenMP 4.0 feature support.
-Work is ongoing to add support for OpenMP 4.5 and newer versions; a support statement for these will be shared in the future.
-The table entries are derived from the information provided in the Version Differences subsection of the Features History section in the OpenMP standard.
+This document outlines the OpenMP API features supported by Flang. It is
+intended as a general reference.  For the most accurate information on
+unimplemented features, rely on the compiler’s TODO or “Not Yet Implemented”
+messages, which are considered authoritative. Flang provides complete
+implementation of the OpenMP 3.1 specification and partial implementation of
+OpenMP 4.0.  The sections below summarize support status for OpenMP 4.0, 5.0,
+5.1, 5.2, 6.0, and future 6.1.  The table entries are derived from the
+information provided in the Version Differences subsection of the Features
+History section in the OpenMP standard.
+
+The Status column uses the following values:
+- <span class="none">unclaimed</span> : No implementation is known to be underway.
+- <span class="part">partial</span> : Some support exists, but important cases are still missing.
+- <span class="progress">in progress</span> : Work is actively underway, or the implementation is available only experimentally.
+- <span class="good">done</span> : The feature is considered implemented.
 
-The feature support information is provided as a table with three columns that are self explanatory. The Status column uses
-the letters **P**, **Y**, **N** for the implementation status:
-- **P** : Partial. When the implementation is incomplete for a few cases
-- **Y** : Yes. When the implementation is complete
-- **N** : No. When the implementation is absent
+The OpenMP 4.0 section uses the historical `Feature/Status/Comments` format with
+an added `Claimed By` column. OpenMP 5.0 and newer sections use
+`Feature/Status/Claimed By/Notes/Reviews` to capture implementation state,
+ownership, and upstream references.  Use GitHub usernames in `Claimed By` (for
+example `@alice`). Leave the cell blank when nobody has claimed the work.
 
-Note : No distinction is made between the support in Parser/Semantics, MLIR, Lowering or the OpenMPIRBuilder.
+This page is for OpenMP features that require changes in Flang compiler
+components (parser, semantics, lowering, diagnostics) and that may additionally
+entail corresponding runtime support.  OpenMP features whose status does not
+involve updates to the Flang compiler are tracked under the Clang OpenMP Support
+page (`clang/docs/OpenMPSupport.rst`).
+
+## Updating This Page
+
+- When claiming a feature, set `Status` to <span class="progress">in progress</span> and add the GitHub username in `Claimed By`.
+- When a GitHub PR is opened, add the PR link in `Reviews`. Keep the claimant listed until the work is finished or unclaimed.
+- When support lands but remains incomplete, set `Status` to <span class="part">partial</span> and summarize the missing parser, semantics, lowering, diagnostics, or test work in `Notes`.
+- When support is complete, set `Status` to <span class="good">done</span>. Clear `Claimed By` if no further follow-up is expected.
+- When work is abandoned or not yet started, set `Status` to <span class="none">unclaimed</span>, remove the claimant, and keep `Notes` focused on the missing implementation work.
+
+Note: In the OpenMP 4.0 section, no distinction is made between support in
+Parser/Semantics, MLIR, Lowering, or the OpenMPIRBuilder.
 
 ## OpenMP 4.0
 
-| Feature                                                    | Status | Comments                                                |
-|------------------------------------------------------------|--------|---------------------------------------------------------|
-| proc_bind clause                                           | Y      | |
-| simd construct                                             | P      | Implicit linearization is skipped if iv is a pointer or allocatable|
-| declare simd construct                                     | N      | |
-| do simd construct                                          | P      | Implicit linearization is skipped if iv is a pointer or allocatable |
-| target data construct                                      | Y      | |
-| target construct                                           | Y      | |
-| target update construct                                    | Y      | |
-| declare target directive                                   | Y      | |
-| teams construct                                            | Y      | |
-| distribute construct                                       | Y      | |
-| distribute simd construct                                  | P      | Implicit linearization is skipped if iv is a pointer or allocatable |
-| distribute parallel loop construct                         | Y      | |
-| distribute parallel loop simd construct                    | P      | Implicit linearization is skipped if iv is a pointer or allocatable |
-| depend clause                                              | Y      | |
-| declare reduction construct                                | N      | |
-| atomic construct extensions                                | Y      | |
-| cancel construct                                           | Y      | |
-| cancellation point construct                               | Y      | |
-| parallel do simd construct                                 | P      | Implicit linearization is skipped if iv is a pointer or allocatable |
-| target teams construct                                     | Y      | |
-| teams distribute construct                                 | Y      | |
-| teams distribute simd construct                            | P      | Implicit linearization is skipped if iv is a pointer or allocatable |
-| target teams distribute construct                          | Y      | |
-| teams distribute parallel loop construct                   | Y      | |
-| target teams distribute parallel loop construct            | Y      | |
-| teams distribute parallel loop simd construct              | P      | Implicit linearization is skipped if iv is a pointer or allocatable |
-| target teams distribute parallel loop simd construct       | P      | Implicit linearization is completely skipped |
+| Feature                                                    | Status                            | Claimed By | Comments                                                |
+|:-----------------------------------------------------------|:----------------------------------|:-----------|:--------------------------------------------------------|
+| proc_bind clause                                           | <span class="good">done</span> | | |
+| simd construct                                             | <span class="part">partial</span> | | Implicit linearization is skipped if iv is a pointer or allocatable|
+| declare simd construct                                     | <span class="part">partial</span> | | Semantics coverage exists (for example `flang/test/Semantics/OpenMP/declarative-directive01.f90`) and lowering exists for key forms (for example `flang/test/Lower/OpenMP/declare-simd-interface-body.f90`), but coverage is not yet complete for all variants. |
+| do simd construct                                          | <span class="part">partial</span> | | Implicit linearization is skipped if iv is a pointer or allocatable |
+| target data construct                                      | <span class="good">done</span> | | |
+| target construct                                           | <span class="good">done</span> | | |
+| target update construct                                    | <span class="good">done</span> | | |
+| declare target directive                                   | <span class="good">done</span> | | |
+| teams construct                                            | <span class="good">done</span> | | |
+| distribute construct                                       | <span class="good">done</span> | | |
+| distribute simd construct                                  | <span class="part">partial</span> | | Implicit linearization is skipped if iv is a pointer or allocatable |
+| distribute parallel loop construct                         | <span class="good">done</span> | | |
+| distribute parallel loop simd construct                    | <span class="part">partial</span> | | Implicit linearization is skipped if iv is a pointer or allocatable |
+| depend clause                                              | <span class="good">done</span> | | |
+| declare reduction construct                                | <span class="part">partial</span> | | Partial support, including user-defined reductions with derived types. |
+| atomic construct extensions                                | <span class="good">done</span> | | |
+| cancel construct                                           | <span class="good">done</span> | | |
+| cancellation point construct                               | <span class="good">done</span> | | |
+| parallel do simd construct                                 | <span class="part">partial</span> | | Implicit linearization is skipped if iv is a pointer or allocatable |
+| target teams construct                                     | <span class="good">done</span> | | |
+| teams distribute construct                                 | <span class="good">done</span> | | |
+| teams distribute simd construct                            | <span class="part">partial</span> | | Implicit linearization is skipped if iv is a pointer or allocatable |
+| target teams distribute construct                          | <span class="good">done</span> | | |
+| teams distribute parallel loop construct                   | <span class="good">done</span> | | |
+| target teams distribute parallel loop construct            | <span class="good">done</span> | | |
+| teams distribute parallel loop simd construct              | <span class="part">partial</span> | | Implicit linearization is skipped if iv is a pointer or allocatable |
+| target teams distribute parallel loop simd construct       | <span class="part">partial</span> | | Implicit linearization is completely skipped |
+
+## OpenMP 5.0
+
+| Feature | Status | Claimed By | Notes | Reviews |
+|:--------|:-------|:-----------|:------|:--------|
+| taskloop and combined taskloop forms | <span class="good">done</span> | | Covered in semantics/lowering tests including `flang/test/Semantics/OpenMP/taskloop01.f90`, `flang/test/Semantics/OpenMP/taskloop-simd01.f90`, `flang/test/Lower/OpenMP/taskloop.f90`, and `flang/test/Lower/OpenMP/master_taskloop_simd.f90`. | [llvm/llvm-project#138646](https://github.com/llvm/llvm-project/pull/138646), [llvm/llvm-project#165851](https://github.com/llvm/llvm-project/pull/165851), [llvm/llvm-project#187222](https://github.com/llvm/llvm-project/pull/187222) |
----------------
tblah wrote:

Shouldn't this be labelled partial because of the lowering gaps (taskloop simd)?

https://github.com/llvm/llvm-project/pull/205833


More information about the flang-commits mailing list