Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions flang/docs/OpenMPStandardsSupport.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<!--===- docs/FortranStandardsSupport.md

Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
See https://llvm.org/LICENSE.txt for license information.
SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

-->

# Flang OpenMP Standards Support

```{contents}
---
local:
---
```

This document summarizes OpenMP standards support in Flang. The information is only provided as a guideline. The
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This document summarizes OpenMP standards support in Flang. The information is only provided as a guideline. The
This document summarizes the supported features of the OpenMP API in Flang. The information is only provided as a guideline. The

(OpenMP is not a standard in the true sense, like with the ISO standards.)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it be OK to go with OpenMP specification?
This document summarizes the supported features of the OpenMP specification in Flang

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

TODOs/Not Yet Implemented messages emitted by the compiler for unimplemented features should be treated as authoritative.
As of March 2025, standards support is provided upto OpenMP 4.0. We are actively working towards supporting OpenMP 4.5, OpenMP 5.* and OpenMP 6.0.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know that it has been requested to have a date in the document, but I would treat the modification date of the file in the commit log as being more accurate than the date in the document that could easily be missed when updating the file (plus, it does not protect us from the document becoming outdated over time).

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that https://clang.llvm.org/docs/OpenMPSupport.html has split OpenMP support into C/C++ & Fortran already. Presumably it makes sense to either fully join those documents, or remove the Fortran side from the clang docs, and just add a reference to this document.

Also typo

Suggested change
As of March 2025, standards support is provided upto OpenMP 4.0. We are actively working towards supporting OpenMP 4.5, OpenMP 5.* and OpenMP 6.0.
As of March 2025, standards support is provided up to OpenMP 4.0. We are actively working towards supporting OpenMP 4.5, OpenMP 5.* and OpenMP 6.0.

From the table below, OpenMP 4.0 support is not 100% complete yet, so maybe "up to" gives a wrong impression here; I'd read it as "4.0 support is fully implemented".

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that https://clang.llvm.org/docs/OpenMPSupport.html has split OpenMP support into C/C++ & Fortran already. Presumably it makes sense to either fully join those documents, or remove the Fortran side from the clang docs, and just add a reference to this document.

Would it be all right to address this separately? Ideally, each Frontend should list its OpenMP support separately. Removing the entry from Clang would require a separate set of reviewers.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rewrote the statement regarding standards support.

Changing the support statement in Clang docs is out of scope for this PR.


The standards 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** : When the implementation is incomplete for a few cases
- **Y** : When the implementation is complete
- **N** : When the implementation is absent
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might want to explain that this is Yes/No/Partial (presumably)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done


Note : No distinction is made between the support in Parser/Semantics, MLIR, Lowering or the OpenMPIRBuilder.

## OpenMP 4.0

| Feature | Status | Comments |
|------------------------------------------------------------|--------|---------------------------------------------------------|
| proc_bind clause | Y | |
| simd construct | P | Some clauses are not supported |
| declare simd construct | N | |
| do simd construct | Y | |
| target data construct | P | |
| target construct | P | |
| target update construct | P | |
| declare target directive | P | |
| teams construct | P | |
| distribute construct | P | |
| distribute simd construct | P | |
| distribute parallel loop construct | P | |
| distribute parallel loop simd construct | P | |
| depend clause | P | Depend clause with array sections are not supported |
| declare reduction construct | N | |
| atomic construct extensions | Y | |
| cancel construct | N | |
| cancellation point construct | N | |
| parallel do simd construct | Y | |
| target teams construct | P | |
| teams distribute construct | P | |
| teams distribute simd construct | P | |
| target teams distribute construct | P | |
| teams distribute parallel loop construct | P | |
| target teams distribute parallel loop construct | P | |
| teams distribute parallel loop simd construct | P | |
| target teams distribute parallel loop simd construct | P | |

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am conservatively marking all target-related constructs (including combined ones) as Partial support. I can correct the entries if they are fully supported.

## OpenMP 3.1, OpenMP 2.5, OpenMP 1.1
All features except a few corner cases in atomic, copyin constructs/clauses are supported
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should these corner cases be made explicit?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

1 change: 1 addition & 0 deletions flang/docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ on how to get in touch with us and to learn more about the current status.
GettingInvolved
GettingStarted
ImplementingASemanticCheck
OpenMPStandardsSupport
PullRequestChecklist
```

Expand Down