[flang-commits] [flang] [Flang][OpenMP] add more OpenMP support entries and status updates (PR #212889)

Deepak Eachempati via flang-commits flang-commits at lists.llvm.org
Tue Aug 4 13:59:37 PDT 2026


================
@@ -114,79 +114,100 @@ Parser/Semantics, MLIR, Lowering, or the OpenMPIRBuilder.
 | 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 |
+| taskgroup construct                                        | <span class="good">done</span> | | Semantics and lowering coverage exists (`flang/test/Semantics/OpenMP/taskgroup01.f90`, `flang/test/Lower/OpenMP/taskgroup.f90`). |
+
+## OpenMP 4.5
+
+| Feature | Status | Claimed By | Notes | Reviews |
+|:--------|:-------|:-----------|:------|:--------|
+| directive-name-modifier in if clause for combined constructs | <span class="good">done</span> | | Semantics and lowering coverage exists for all combined-construct if-modifier forms (`flang/test/Semantics/OpenMP/if-clause-45.f90`, `flang/test/Semantics/OpenMP/if-clause.f90`, `flang/test/Lower/OpenMP/if-clause.f90`). | [llvm/llvm-project#118128](https://github.com/llvm/llvm-project/pull/118128), [llvm/llvm-project#205164](https://github.com/llvm/llvm-project/pull/205164) |
+| stand-alone ordered construct and source/sink depend types | <span class="part">partial</span> | dreachem | Semantics coverage exists (`flang/test/Semantics/OpenMP/ordered01.f90`, `flang/test/Semantics/OpenMP/do-ordered.f90`), and stand-alone ordered without depend lowers correctly (`flang/test/Lower/OpenMP/ordered-threads.f90`); lowering of `depend(source)` and `depend(sink:)` forms is explicitly TODO (`flang/test/Lower/OpenMP/Todo/ordered-depend.f90`). | [llvm/llvm-project#115396](https://github.com/llvm/llvm-project/pull/115396), [llvm/llvm-project#115397](https://github.com/llvm/llvm-project/pull/115397), [llvm/llvm-project#156693](https://github.com/llvm/llvm-project/pull/156693), [llvm/llvm-project#200193](https://github.com/llvm/llvm-project/pull/200193) |
+| scalar variables implicitly firstprivate for target | <span class="good">done</span> | | Coverage exists for implicit DSA handling on target (`flang/test/Semantics/OpenMP/implicit-dsa.f90`, `flang/test/Lower/OpenMP/DelayedPrivatization/target-private-implicit-scalar-map.f90`). | [llvm/llvm-project#142783](https://github.com/llvm/llvm-project/pull/142783), [llvm/llvm-project#147442](https://github.com/llvm/llvm-project/pull/147442) |
+| private, firstprivate, and defaultmap on target | <span class="good">done</span> | | Coverage exists across target privatization and defaultmap tests (`flang/test/Lower/OpenMP/defaultmap.f90`, `flang/test/Semantics/OpenMP/defaultmap-clause-v50.f90`). | [llvm/llvm-project#116506](https://github.com/llvm/llvm-project/pull/116506), [llvm/llvm-project#177715](https://github.com/llvm/llvm-project/pull/177715) |
+| linear-modifier for linear clause | <span class="good">done</span> | chichunchen | val, ref, and uval modifier forms are covered in semantics and lowering (`flang/test/Semantics/OpenMP/linear-clause01.f90`-`linear-clause03.f90`, `flang/test/Lower/OpenMP/simd-linear.f90`). | [llvm/llvm-project#187142](https://github.com/llvm/llvm-project/pull/187142) |
+| linear clause on worksharing-loop construct | <span class="good">done</span> | | Lowering coverage exists (`flang/test/Lower/OpenMP/wsloop-linear.f90`). | [llvm/llvm-project#139385](https://github.com/llvm/llvm-project/pull/139385), [llvm/llvm-project#182816](https://github.com/llvm/llvm-project/pull/182816) |
+| is_device_ptr and use_device_ptr clauses | <span class="part">partial</span> | | `use_device_ptr` has semantics and lowering coverage (`flang/test/Semantics/OpenMP/use_device_ptr.f90`, `flang/test/Lower/OpenMP/use-device-ptr-to-use-device-addr.f90`). `is_device_ptr` has semantics coverage (`flang/test/Semantics/OpenMP/target01.f90`) but no dedicated lowering test. | [llvm/llvm-project#67290](https://github.com/llvm/llvm-project/pull/67290), [llvm/llvm-project#109810](https://github.com/llvm/llvm-project/pull/109810), [llvm/llvm-project#113919](https://github.com/llvm/llvm-project/pull/113919) |
+| target enter data and target exit data constructs | <span class="good">done</span> | | Semantics and lowering coverage exists, including nowait and depend on these constructs (`flang/test/Semantics/OpenMP/device-constructs.f90`, `flang/test/Lower/OpenMP/target.f90`). | [llvm/llvm-project#71051](https://github.com/llvm/llvm-project/pull/71051), [llvm/llvm-project#81610](https://github.com/llvm/llvm-project/pull/81610) |
+| simdlen clause on simd construct | <span class="good">done</span> | | Covered in simd lowering tests (`flang/test/Lower/OpenMP/simd.f90`, `flang/test/Lower/OpenMP/distribute-simd.f90`). | [llvm/llvm-project#97819](https://github.com/llvm/llvm-project/pull/97819) |
+| simd clause on ordered construct | <span class="good">done</span> | sshrestha-aa | Semantics and lowering coverage exists (`flang/test/Semantics/OpenMP/ordered-simd.f90`, `flang/test/Lower/OpenMP/ordered-simd.f90`). | [llvm/llvm-project#183379](https://github.com/llvm/llvm-project/pull/183379) |
+| priority clause for task construct | <span class="good">done</span> | | Semantics and lowering coverage exists (`flang/test/Semantics/OpenMP/clause-validity01.f90`, `flang/test/Lower/OpenMP/task.f90`). | [llvm/llvm-project#121052](https://github.com/llvm/llvm-project/pull/121052) |
+| taskloop construct | <span class="part">partial</span> | | Tracked in the OpenMP 5.0 section (where combined forms and lowering gaps are noted). Semantics/lowering coverage exists for core forms. | [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#166751](https://github.com/llvm/llvm-project/pull/166751) |
+| nowait and depend clauses on target construct | <span class="good">done</span> | | Lowering coverage exists for nowait and depend on target, target enter data, and target update (`flang/test/Lower/OpenMP/target.f90`). | [llvm/llvm-project#75345](https://github.com/llvm/llvm-project/pull/75345), [llvm/llvm-project#81610](https://github.com/llvm/llvm-project/pull/81610) |
+| hint clause on critical construct | <span class="good">done</span> | | Semantics and lowering coverage exists (`flang/test/Semantics/OpenMP/critical-hint-clause.f90`, `flang/test/Lower/OpenMP/critical.f90`). | [llvm/llvm-project#136311](https://github.com/llvm/llvm-project/pull/136311) |
+| target parallel, target parallel do, and target parallel do simd constructs | <span class="part">partial</span> | | Basic construct coverage exists in lowering (`flang/test/Lower/OpenMP/target.f90`, `flang/test/Lower/OpenMP/compound.f90`), but no dedicated lowering tests for these forms exist; simd implicit linearization gaps apply to the simd variant as for other simd-containing constructs. | [llvm/llvm-project#198783](https://github.com/llvm/llvm-project/pull/198783) |
 
 ## OpenMP 5.0
 
 | Feature | Status | Claimed By | Notes | Reviews |
 |:--------|:-------|:-----------|:------|:--------|
-| taskloop and combined taskloop forms | <span class="part">partial</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`. Lowering for taskloop simd and combined forms is still TODO. | [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) |
-| memory allocators | <span class="part">partial</span> | | Semantics coverage exists in `flang/test/Semantics/OpenMP/allocators01.f90`-`flang/test/Semantics/OpenMP/allocators07.f90`; lowering gaps remain (for example `flang/lib/Lower/OpenMP/OpenMP.cpp` TODO paths). | |
+| combined taskloop constructs (taskloop simd, master taskloop, master taskloop simd) | <span class="part">partial</span> | | This row tracks OpenMP 5.0 combined taskloop forms, with semantics/lowering coverage in `flang/test/Semantics/OpenMP/taskloop-simd01.f90`, `flang/test/Lower/OpenMP/master_taskloop_simd.f90`, and related taskloop lowering tests; some combined-form lowering paths remain TODO. | [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) |
+| memory allocators | <span class="part">partial</span> | | Semantics coverage exists in `flang/test/Semantics/OpenMP/allocators01.f90`-`flang/test/Semantics/OpenMP/allocators07.f90`; lowering gaps remain (for example `flang/lib/Lower/OpenMP/OpenMP.cpp` TODO paths). | [llvm/llvm-project#165719](https://github.com/llvm/llvm-project/pull/165719), [llvm/llvm-project#187167](https://github.com/llvm/llvm-project/pull/187167) |
 | allocate directive and allocate clause | <span class="part">partial</span> | | Semantics coverage exists in `flang/test/Semantics/OpenMP/allocate-directive.f90` and `flang/test/Semantics/OpenMP/allocate-clause01.f90`; lowering support expanded, with remaining TODO coverage (`flang/test/Lower/OpenMP/Todo/allocate-clause-align.f90`, `flang/test/Lower/OpenMP/Todo/allocate-clause-allocator.f90`). | [llvm/llvm-project#121356](https://github.com/llvm/llvm-project/pull/121356), [llvm/llvm-project#165719](https://github.com/llvm/llvm-project/pull/165719), [llvm/llvm-project#165865](https://github.com/llvm/llvm-project/pull/165865), [llvm/llvm-project#187167](https://github.com/llvm/llvm-project/pull/187167) |
-| metadirective | <span class="part">partial</span> | | Semantics coverage exists in `flang/test/Semantics/OpenMP/metadirective-construct.f90`; lowering support exists for several construct-selector paths (`flang/test/Lower/OpenMP/metadirective-construct.f90`, `flang/test/Lower/OpenMP/metadirective-nothing.f90`), but some selector/variant paths remain TODO-tracked in lowering. | [llvm/llvm-project#159945](https://github.com/llvm/llvm-project/pull/159945), [llvm/llvm-project#193664](https://github.com/llvm/llvm-project/pull/193664), [llvm/llvm-project#194402](https://github.com/llvm/llvm-project/pull/194402), [llvm/llvm-project#194424](https://github.com/llvm/llvm-project/pull/194424) |
+| metadirective | <span class="part">partial</span> | chichunchen | Semantics coverage exists across selector categories (`flang/test/Semantics/OpenMP/metadirective-construct.f90`, `metadirective-user.f90`, `metadirective-implementation.f90`, `metadirective-device.f90`, `metadirective-loop-nest.f90`, `metadirective-loop-sequence.f90`, `metadirective-loop-applicability.f90`, `metadirective-common.f90`). Lowering coverage exists for construct, user-condition, implementation, device-kind/arch/isa selectors, and otherwise/default fallback (`flang/test/Lower/OpenMP/metadirective-construct.f90`, `metadirective-nothing.f90`, `metadirective-user.f90`, `metadirective-implementation.f90`, `metadirective-device-kind.f90`, `metadirective-device-arch.f90`, `metadirective-device-isa.f90`). Remaining lowering TODOs: `target_device` selector, clause/extension trait matching, declarative variants, and loop-associated variants (`flang/test/Lower/OpenMP/Todo/metadirective-target-device.f90`, `Todo/metadirective-structured-trait-property.f90`, `Todo/metadirective-declarative.f90`, `Todo/metadirective-loop.f90`). | [llvm/llvm-project#159945](https://github.com/llvm/llvm-project/pull/159945), [llvm/llvm-project#193664](https://github.com/llvm/llvm-project/pull/193664), [llvm/llvm-project#194402](https://github.com/llvm/llvm-project/pull/194402), [llvm/llvm-project#194424](https://github.com/llvm/llvm-project/pull/194424), [llvm/llvm-project#207088](https://github.com/llvm/llvm-project/pull/207088), [llvm/llvm-project#208844](https://github.com/llvm/llvm-project/pull/208844) |
 | support full defaultmap functionality | <span class="part">partial</span> | | Core coverage exists (`flang/test/Lower/OpenMP/defaultmap.f90`, `flang/test/Semantics/OpenMP/defaultmap-clause-v50.f90`), but lowering has known partial paths (for example defaultmap-firstprivate TODO tests). | [llvm/llvm-project#135226](https://github.com/llvm/llvm-project/pull/135226), [llvm/llvm-project#166715](https://github.com/llvm/llvm-project/pull/166715), [llvm/llvm-project#167806](https://github.com/llvm/llvm-project/pull/167806), [llvm/llvm-project#177389](https://github.com/llvm/llvm-project/pull/177389), [llvm/llvm-project#190764](https://github.com/llvm/llvm-project/pull/190764) |
 | clause: uses_allocators | <span class="part">partial</span> | | Parsed/checked in semantics allocator tests, but lowering has explicit TODO handling (`cp.processTODO<...UsesAllocators>` in `flang/lib/Lower/OpenMP/OpenMP.cpp`). | |
-| clause: in_reduction | <span class="part">partial</span> | | Semantics and lowering coverage exists for several task/taskgroup/taskloop forms (`flang/test/Semantics/OpenMP/in-reduction.f90`, `flang/test/Lower/OpenMP/task-inreduction.f90`, `flang/test/Lower/OpenMP/taskloop-inreduction.f90`, `flang/test/Lower/OpenMP/taskgroup-task_reduction02.f90`); some target-related forms remain TODO (for example `flang/test/Lower/OpenMP/Todo/target-inreduction.f90`). | [llvm/llvm-project#139704](https://github.com/llvm/llvm-project/pull/139704), [llvm/llvm-project#205124](https://github.com/llvm/llvm-project/pull/205124) |
+| clause: in_reduction | <span class="part">partial</span> | Saieiei | Semantics and lowering coverage exists for several task/taskgroup/taskloop forms (`flang/test/Semantics/OpenMP/in-reduction.f90`, `flang/test/Lower/OpenMP/task-inreduction.f90`, `flang/test/Lower/OpenMP/taskloop-inreduction.f90`, `flang/test/Lower/OpenMP/taskgroup-task_reduction02.f90`); some target-related forms remain TODO (for example `flang/test/Lower/OpenMP/Todo/target-inreduction.f90`). | [llvm/llvm-project#139704](https://github.com/llvm/llvm-project/pull/139704), [llvm/llvm-project#205124](https://github.com/llvm/llvm-project/pull/205124) |
 | user-defined mappers | <span class="good">done</span> | | Supported with semantics/lowering/transform coverage. | [llvm/llvm-project#140560](https://github.com/llvm/llvm-project/pull/140560), [llvm/llvm-project#163860](https://github.com/llvm/llvm-project/pull/163860), [llvm/llvm-project#167903](https://github.com/llvm/llvm-project/pull/167903), [llvm/llvm-project#179936](https://github.com/llvm/llvm-project/pull/179936), [llvm/llvm-project#189136](https://github.com/llvm/llvm-project/pull/189136) |
 | map array-section with implicit mapper | <span class="part">partial</span> | | Mapper and map coverage exists (`flang/test/Lower/OpenMP/map-mapper.f90`, `flang/test/Lower/OpenMP/target-data-skip-mapper-calls.f90`), with remaining iterator/modifier gaps in lowering (`flang/lib/Lower/OpenMP/ClauseProcessor.cpp` TODOs). | [llvm/llvm-project#175133](https://github.com/llvm/llvm-project/pull/175133), [llvm/llvm-project#177389](https://github.com/llvm/llvm-project/pull/177389) |
 | clause: use_device_addr for target data | <span class="good">done</span> | | Supported for core forms. | [llvm/llvm-project#82834](https://github.com/llvm/llvm-project/pull/82834), [llvm/llvm-project#176815](https://github.com/llvm/llvm-project/pull/176815) |
-| support non-contiguous array sections for target update | <span class="part">partial</span> | | Target update coverage exists (`flang/test/Semantics/OpenMP/target-update01.f90`, `flang/test/Semantics/OpenMP/target-update-mapper.f90`), with additional corner-case validation still ongoing. | |
-| pointer attachment | <span class="part">partial</span> | | Pointer mapping coverage exists (`flang/test/Semantics/OpenMP/use_device_ptr.f90`, `flang/test/Lower/OpenMP/pointer-to-array.f90`), with descriptor and attach-related TODOs remaining in lowering. | |
-| hints for the atomic construct | <span class="part">partial</span> | | Semantics coverage exists (`flang/test/Semantics/OpenMP/atomic-hint-clause.f90`) and lowering coverage exists for common atomic forms; compare/fail forms remain partial. | |
-| conditional modifier for lastprivate clause | <span class="none">unclaimed</span> | | Lastprivate lowering/semantics coverage exists for base forms, but no dedicated support coverage for the conditional modifier was identified in current Flang tests. | |
+| support non-contiguous array sections for target update | <span class="part">partial</span> | | Target update coverage exists (`flang/test/Semantics/OpenMP/target-update01.f90`, `flang/test/Semantics/OpenMP/target-update-mapper.f90`), with additional corner-case validation still ongoing. | [llvm/llvm-project#101538](https://github.com/llvm/llvm-project/pull/101538) |
+| pointer attachment | <span class="part">partial</span> | | Pointer mapping coverage exists (`flang/test/Semantics/OpenMP/use_device_ptr.f90`, `flang/test/Lower/OpenMP/pointer-to-array.f90`), with descriptor and attach-related TODOs remaining in lowering. | [llvm/llvm-project#124019](https://github.com/llvm/llvm-project/pull/124019) |
+| hints for the atomic construct | <span class="part">partial</span> | | Semantics coverage exists (`flang/test/Semantics/OpenMP/atomic-hint-clause.f90`) and lowering coverage exists for common atomic forms; compare/fail forms remain partial. | [llvm/llvm-project#137852](https://github.com/llvm/llvm-project/pull/137852), [llvm/llvm-project#136311](https://github.com/llvm/llvm-project/pull/136311) |
+| conditional modifier for lastprivate clause | <span class="progress">in progress</span> | sshrestha-aa | Lastprivate lowering/semantics coverage exists for base forms, but no dedicated support coverage for the conditional modifier was identified in current Flang tests. | |
 | task affinity | <span class="part">partial</span> | | Semantics and lowering coverage exists, including iterator-based affinity in task constructs (`flang/test/Semantics/OpenMP/affinity-clause.f90`, `flang/test/Lower/OpenMP/task-affinity.f90`). | [llvm/llvm-project#179003](https://github.com/llvm/llvm-project/pull/179003), [llvm/llvm-project#182222](https://github.com/llvm/llvm-project/pull/182222) |
 | iterator modifier for depend clause | <span class="good">done</span> | | Semantics/lowering coverage exists (`flang/test/Lower/OpenMP/depend-iterator.f90`). | [llvm/llvm-project#189412](https://github.com/llvm/llvm-project/pull/189412) |
-| scan directive and inscan modifier for reduction | <span class="part">partial</span> | | Semantics and lowering coverage exists (`flang/test/Semantics/OpenMP/scan1.f90`, `flang/test/Semantics/OpenMP/scan2.f90`, `flang/test/Lower/OpenMP/scan.f90`), but breadth across all reduction combinations should continue to be validated. | [llvm/llvm-project#102792](https://github.com/llvm/llvm-project/pull/102792), [llvm/llvm-project#123254](https://github.com/llvm/llvm-project/pull/123254) |
-| reduction and in_reduction clauses on taskloop | <span class="part">partial</span> | | Taskloop reduction and in_reduction lowering coverage exists (`flang/test/Lower/OpenMP/taskloop-reduction.f90`, `flang/test/Lower/OpenMP/taskloop-inreduction.f90`), with remaining TODO coverage in some combinations. | [llvm/llvm-project#205124](https://github.com/llvm/llvm-project/pull/205124) |
+| scan directive and inscan modifier for reduction | <span class="part">partial</span> | chandraghale | Semantics and lowering coverage exists (`flang/test/Semantics/OpenMP/scan1.f90`, `flang/test/Semantics/OpenMP/scan2.f90`, `flang/test/Lower/OpenMP/scan.f90`), but breadth across all reduction combinations should continue to be validated. | [llvm/llvm-project#102792](https://github.com/llvm/llvm-project/pull/102792), [llvm/llvm-project#123254](https://github.com/llvm/llvm-project/pull/123254) |
+| reduction and in_reduction clauses on taskloop | <span class="part">partial</span> | Saieiei | OpenMP taskloop reduction and in_reduction clause additions are tracked here. Taskloop reduction and in_reduction lowering coverage exists (`flang/test/Lower/OpenMP/taskloop-reduction.f90`, `flang/test/Lower/OpenMP/taskloop-inreduction.f90`), with remaining TODO coverage in some combinations. | [llvm/llvm-project#199670](https://github.com/llvm/llvm-project/pull/199670) |
 | close modifier in map clause | <span class="part">partial</span> | | Close semantics are covered in targeted lowering tests (for example `flang/test/Lower/OpenMP/cptr-usm-close-and-use-device-ptr.f90`), with continued validation needed across broader mapping combinations. | [llvm/llvm-project#163258](https://github.com/llvm/llvm-project/pull/163258) |
-| mapping Fortran pointer and allocatable variables | <span class="part">partial</span> | | Pointer/allocatable mapping coverage exists (`flang/test/Semantics/OpenMP/use_device_ptr.f90`, `flang/test/Lower/OpenMP/wsloop-reduction-allocatable.f90`, `flang/test/Lower/OpenMP/wsloop-reduction-pointer.f90`), but not all descriptor/attachment edge cases are complete. | |
-| declare variant directive | <span class="part">partial</span> | | Frontend semantics support is substantial (`flang/test/Semantics/OpenMP/declare-variant.f90`, `flang/test/Semantics/OpenMP/declare-variant-match.f90`), while lowering remains TODO-tracked (`flang/test/Lower/OpenMP/Todo/declare-variant.f90`). | [llvm/llvm-project#130578](https://github.com/llvm/llvm-project/pull/130578), [llvm/llvm-project#198799](https://github.com/llvm/llvm-project/pull/198799), [llvm/llvm-project#206714](https://github.com/llvm/llvm-project/pull/206714) |
+| mapping Fortran pointer and allocatable variables | <span class="part">partial</span> | | Pointer/allocatable mapping coverage exists (`flang/test/Semantics/OpenMP/use_device_ptr.f90`, `flang/test/Lower/OpenMP/wsloop-reduction-allocatable.f90`, `flang/test/Lower/OpenMP/wsloop-reduction-pointer.f90`), but not all descriptor/attachment edge cases are complete. | [llvm/llvm-project#165714](https://github.com/llvm/llvm-project/pull/165714) |
+| declare variant directive | <span class="part">partial</span> | chichunchen | Frontend semantics support is substantial (`flang/test/Semantics/OpenMP/declare-variant.f90`, `flang/test/Semantics/OpenMP/declare-variant-match.f90`), while lowering remains TODO-tracked (`flang/test/Lower/OpenMP/Todo/declare-variant.f90`). | [llvm/llvm-project#130578](https://github.com/llvm/llvm-project/pull/130578), [llvm/llvm-project#198799](https://github.com/llvm/llvm-project/pull/198799), [llvm/llvm-project#206714](https://github.com/llvm/llvm-project/pull/206714) |
 | implicit declare target directive | <span class="none">unclaimed</span> | | No dedicated Flang parser/semantics/lowering coverage for implicit declare target handling was identified in current OpenMP test coverage. | |
 | requires directive | <span class="part">partial</span> | | Frontend and lowering coverage exists (`flang/test/Semantics/OpenMP/requires01.f90`-`requires10.f90`, `flang/test/Lower/OpenMP/requires.f90`), but some clauses are still flagged as unsupported (for example reverse_offload warning path). | [llvm/llvm-project#204647](https://github.com/llvm/llvm-project/pull/204647) |
 | teams construct on host | <span class="good">done</span> | | Teams support is established and exercised across semantics/lowering coverage in Flang OpenMP tests. | |
-| loop construct and order(concurrent) clause | <span class="part">partial</span> | | Loop and order-related coverage exists (`flang/test/Semantics/OpenMP/compiler-directives-loop.f90`, `flang/test/Semantics/OpenMP/order-clause01.f90`, `flang/test/Lower/OpenMP/loop-directive.f90`, `flang/test/Lower/OpenMP/order-clause.f90`), with some transformations still evolving. | |
+| loop construct and order(concurrent) clause | <span class="part">partial</span> | | Loop and order-related coverage exists (`flang/test/Semantics/OpenMP/compiler-directives-loop.f90`, `flang/test/Semantics/OpenMP/order-clause01.f90`, `flang/test/Lower/OpenMP/loop-directive.f90`, `flang/test/Lower/OpenMP/order-clause.f90`), with some transformations still evolving. | [llvm/llvm-project#169346](https://github.com/llvm/llvm-project/pull/169346), [llvm/llvm-project#208315](https://github.com/llvm/llvm-project/pull/208315) |
 | collapsing imperfectly nested loops | <span class="none">unclaimed</span> | | Current checks primarily diagnose non-perfect nests (for example `flang/test/Semantics/OpenMP/do-collapse.f90`), and no dedicated support for imperfect-nest collapsing was identified. | [llvm/llvm-project#202435](https://github.com/llvm/llvm-project/pull/202435) |
-| if clause and nontemporal clause on simd | <span class="part">partial</span> | | SIMD nontemporal coverage exists (`flang/test/Semantics/OpenMP/nontemporal.f90`), but complete OpenMP 5.0-level coverage for all if(simd)/nontemporal combinations remains incomplete. | |
+| if clause and nontemporal clause on simd | <span class="part">partial</span> | | SIMD nontemporal coverage exists (`flang/test/Semantics/OpenMP/nontemporal.f90`), but complete OpenMP 5.0-level coverage for all if(simd)/nontemporal combinations remains incomplete. | [llvm/llvm-project#110015](https://github.com/llvm/llvm-project/pull/110015) |
 | atomic in simd | <span class="none">unclaimed</span> | | No dedicated Flang OpenMP coverage for atomic-in-simd forms was identified in current parser/semantics/lowering tests. | |
 | detach clause on task and omp_fulfill_event routine | <span class="good">done</span> | | Flang semantics and lowering coverage exists (`flang/test/Semantics/OpenMP/detach01.f90`, `flang/test/Semantics/OpenMP/detach02.f90`, `flang/test/Lower/OpenMP/task_detach.f90`); runtime routine is available in OpenMP module/runtime. | [llvm/llvm-project#119172](https://github.com/llvm/llvm-project/pull/119172), [llvm/llvm-project#119128](https://github.com/llvm/llvm-project/pull/119128) |
-| taskloop construct can be canceled by cancel construct | <span class="part">partial</span> | | Dedicated lowering coverage exists (`flang/test/Lower/OpenMP/taskloop-cancel.f90`), and semantics checks include taskloop nesting constraints for cancel/cancellation-point. | |
+| taskloop construct can be canceled by cancel construct | <span class="part">partial</span> | | Dedicated lowering coverage exists (`flang/test/Lower/OpenMP/taskloop-cancel.f90`), and semantics checks include taskloop nesting constraints for cancel/cancellation-point. | [llvm/llvm-project#188071](https://github.com/llvm/llvm-project/pull/188071), [llvm/llvm-project#188070](https://github.com/llvm/llvm-project/pull/188070) |
 | reverse offload | <span class="none">unclaimed</span> | | Flang currently emits an unsupported warning path for reverse_offload in requires handling (`flang/test/Semantics/OpenMP/requires01.f90`). | [llvm/llvm-project#204647](https://github.com/llvm/llvm-project/pull/204647) |
 | depend clause on taskwait | <span class="part">partial</span> | | Lowering is explicitly TODO-tracked (`flang/test/Lower/OpenMP/Todo/taskwait-depend.f90`); runtime support exists in OpenMP runtime tests. | [llvm/llvm-project#111562](https://github.com/llvm/llvm-project/pull/111562) |
-| acquire/release clauses on atomic and flush | <span class="part">partial</span> | | Atomic acquire/release semantics coverage exists (`flang/test/Semantics/OpenMP/atomic-mem-order.f90`, `flang/test/Semantics/OpenMP/atomic-compare.f90`), but full end-to-end coverage breadth remains in progress. | |
-| mutexinoutset on depend clause | <span class="good">done</span> | | Semantics/lowering coverage exists for mutexinoutset depend handling (`flang/test/Semantics/OpenMP/depend06.f90`, `flang/test/Lower/OpenMP/task.f90`). | |
-| depobj construct | <span class="part">partial</span> | | Semantics coverage exists for v5.0+ forms (`flang/test/Semantics/OpenMP/depobj-construct-v50.f90`), but lowering still has TODO paths (`flang/test/Lower/OpenMP/Todo/depobj-construct.f90`, `flang/test/Lower/OpenMP/Todo/depend-clause-depobj.f90`). | |
+| acquire/release clauses on atomic and flush | <span class="part">partial</span> | | Memory-order lowering is complete for regular atomic (read/write/update/capture): all five orderings map to `mlir::omp::ClauseMemoryOrderKind` in `Atomic.cpp` and are exercised by non-TODO tests (`flang/test/Lower/OpenMP/atomic-read.f90`, `flang/test/Lower/OpenMP/atomic-mem-order-transform.f90`). Remaining gap: flush memory-order clauses (`acquire`, `release`, `acq_rel`, `seq_cst`) all hit `processTODO` in lowering and `mlir::omp::FlushOp` has no `memory_order` attribute yet (`flang/test/Lower/OpenMP/Todo/flush-seq-cst.f90`). | [llvm/llvm-project#199636](https://github.com/llvm/llvm-project/pull/199636), [llvm/llvm-project#114072](https://github.com/llvm/llvm-project/pull/114072) |
+| mutexinoutset on depend clause | <span class="good">done</span> | | Semantics/lowering coverage exists for mutexinoutset depend handling (`flang/test/Semantics/OpenMP/depend06.f90`, `flang/test/Lower/OpenMP/task.f90`). | [llvm/llvm-project#114895](https://github.com/llvm/llvm-project/pull/114895), [llvm/llvm-project#120715](https://github.com/llvm/llvm-project/pull/120715) |
+| depobj construct | <span class="part">partial</span> | | Semantics coverage exists for v5.0+ forms (`flang/test/Semantics/OpenMP/depobj-construct-v50.f90`), but lowering still has TODO paths (`flang/test/Lower/OpenMP/Todo/depobj-construct.f90`, `flang/test/Lower/OpenMP/Todo/depend-clause-depobj.f90`). | [llvm/llvm-project#114074](https://github.com/llvm/llvm-project/pull/114074), [llvm/llvm-project#116621](https://github.com/llvm/llvm-project/pull/116621), [llvm/llvm-project#173056](https://github.com/llvm/llvm-project/pull/173056), [llvm/llvm-project#203910](https://github.com/llvm/llvm-project/pull/203910) |
 | combined master constructs (master taskloop, parallel master, parallel master taskloop, master taskloop simd, parallel master taskloop simd) | <span class="part">partial</span> | | Frontend/lowering coverage exists for multiple master combined forms (`flang/test/Lower/OpenMP/parallel-master.f90`, `flang/test/Lower/OpenMP/master_taskloop_simd.f90`, `flang/test/Lower/OpenMP/parallel-master-taskloop-simd.f90`) with additional completeness work tracked alongside taskloop combined forms. | [llvm/llvm-project#113893](https://github.com/llvm/llvm-project/pull/113893) |
 
 ## OpenMP 5.1
 
 | Feature | Status | Claimed By | Notes | Reviews |
 |:--------|:-------|:-----------|:------|:--------|
-| compare clause on atomic construct | <span class="part">partial</span> | | Semantics and lowering coverage exist (`flang/test/Semantics/OpenMP/atomic-compare.f90`, `flang/test/Lower/OpenMP/atomic-compare.f90`); remaining gaps are primarily fail/capture combinations and broader type coverage. | [llvm/llvm-project#184761](https://github.com/llvm/llvm-project/pull/184761) |
-| fail clause on atomic construct | <span class="part">partial</span> | | Semantics coverage exists (`flang/test/Semantics/OpenMP/atomic-compare.f90`), but lowering for `fail(...)` paths is still TODO (`flang/test/Lower/OpenMP/Todo/atomic-compare-fail.f90`). Complete lowering for compare+fail(+capture), then add non-TODO lowering tests. | [llvm/llvm-project#184761](https://github.com/llvm/llvm-project/pull/184761) |
-| interop construct | <span class="part">partial</span> | | Semantics coverage exists (`flang/test/Semantics/OpenMP/interop-construct.f90`), but lowering remains TODO-tracked (`flang/lib/Lower/OpenMP/OpenMP.cpp` TODO: `OpenMPInteropConstruct`; `flang/test/Lower/OpenMP/Todo/interop-construct.f90`). | |
-| dispatch construct | <span class="part">partial</span> | | Semantics coverage exists (`flang/test/Semantics/OpenMP/dispatch.f90`), but lowering remains TODO-tracked (`flang/lib/Lower/OpenMP/OpenMP.cpp` TODO: `OpenMPDispatchConstruct`; `flang/test/Lower/OpenMP/Todo/dispatch.f90`). | |
+| compare clause on atomic construct | <span class="part">partial</span> | SunilKuravinakop | Semantics and lowering coverage exist (`flang/test/Semantics/OpenMP/atomic-compare.f90`, `flang/test/Lower/OpenMP/atomic-compare.f90`); remaining gaps are primarily fail/capture combinations and broader type coverage. | [llvm/llvm-project#184761](https://github.com/llvm/llvm-project/pull/184761) |
+| fail clause on atomic construct | <span class="part">partial</span> | SunilKuravinakop | Semantics coverage exists (`flang/test/Semantics/OpenMP/atomic-compare.f90`), but lowering for `fail(...)` paths is still TODO (`flang/test/Lower/OpenMP/Todo/atomic-compare-fail.f90`). Complete lowering for compare+fail(+capture), then add non-TODO lowering tests. | [llvm/llvm-project#184761](https://github.com/llvm/llvm-project/pull/184761) |
+| interop construct | <span class="part">partial</span> | sshrestha-aa | Semantics coverage exists (`flang/test/Semantics/OpenMP/interop-construct.f90`), but lowering remains TODO-tracked (`flang/lib/Lower/OpenMP/OpenMP.cpp` TODO: `OpenMPInteropConstruct`; `flang/test/Lower/OpenMP/Todo/interop-construct.f90`). | [llvm/llvm-project#132343](https://github.com/llvm/llvm-project/pull/132343) |
+| dispatch construct | <span class="part">partial</span> | SunilKuravinakop | Semantics coverage exists (`flang/test/Semantics/OpenMP/dispatch.f90`), but lowering remains TODO-tracked (`flang/lib/Lower/OpenMP/OpenMP.cpp` TODO: `OpenMPDispatchConstruct`; `flang/test/Lower/OpenMP/Todo/dispatch.f90`). | [llvm/llvm-project#121982](https://github.com/llvm/llvm-project/pull/121982) |
 | masked construct | <span class="part">partial</span> | | Covered in semantics/lowering (`flang/test/Semantics/OpenMP/masked.f90`, `flang/test/Lower/OpenMP/masked.f90`). | [llvm/llvm-project#91432](https://github.com/llvm/llvm-project/pull/91432) |
-| masked combined constructs | <span class="part">partial</span> | | Covered in lowering tests (`flang/test/Lower/OpenMP/masked_taskloop.f90`, `flang/test/Lower/OpenMP/parallel-masked-taskloop.f90`) with ongoing breadth expansion. | |
-| present map type modifier | <span class="part">partial</span> | | Semantics coverage exists (`flang/test/Semantics/OpenMP/present.f90`) and map lowering exists, with ongoing completeness checks. | |
-| present modifier in motion clauses | <span class="part">partial</span> | | Motion/update coverage exists (`flang/test/Semantics/OpenMP/target-update01.f90`, `flang/test/Semantics/OpenMP/target-update-mapper.f90`), with ongoing completeness checks. | |
-| present in defaultmap clause | <span class="part">partial</span> | | Defaultmap semantics coverage exists (`flang/test/Semantics/OpenMP/defaultmap-clause-v50.f90`), with ongoing completeness checks. | |
+| masked combined constructs | <span class="part">partial</span> | | Covered in lowering tests (`flang/test/Lower/OpenMP/masked_taskloop.f90`, `flang/test/Lower/OpenMP/parallel-masked-taskloop.f90`) with ongoing breadth expansion. | [llvm/llvm-project#188071](https://github.com/llvm/llvm-project/pull/188071), [llvm/llvm-project#188070](https://github.com/llvm/llvm-project/pull/188070) |
+| present map type modifier | <span class="part">partial</span> | | Semantics coverage exists (`flang/test/Semantics/OpenMP/present.f90`) and map lowering exists, with ongoing completeness checks. | [llvm/llvm-project#101538](https://github.com/llvm/llvm-project/pull/101538) |
+| present modifier in motion clauses | <span class="part">partial</span> | | Motion/update coverage exists (`flang/test/Semantics/OpenMP/target-update01.f90`, `flang/test/Semantics/OpenMP/target-update-mapper.f90`), with ongoing completeness checks. | [llvm/llvm-project#176810](https://github.com/llvm/llvm-project/pull/176810) |
----------------
dreachem wrote:

Thanks, you're right. Will replace with these three other PRs instead:


```suggestion
| present modifier in motion clauses | <span class="part">partial</span> | | Motion/update coverage exists (`flang/test/Semantics/OpenMP/target-update01.f90`, `flang/test/Semantics/OpenMP/target-update-mapper.f90`), with ongoing completeness checks. | [llvm/llvm-project#114593](https://github.com/llvm/llvm-project/pull/114593), [llvm/llvm-project#117447](https://github.com/llvm/llvm-project/pull/117447), [llvm/llvm-project#129586](https://github.com/llvm/llvm-project/pull/129586) |
```

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


More information about the flang-commits mailing list