Skip to content

Commit 59017f4

Browse files
[ATfL] Add language/OpenMP support information to ATfL docs (#267)
1 parent a3d5c4e commit 59017f4

File tree

4 files changed

+190
-0
lines changed

4 files changed

+190
-0
lines changed

arm-software/linux/docs/GettingStarted.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,11 @@ generates portable output suitable for any Armv8-A-based target.
333333
`-mcpu=<target>` where `<target>` is the target processor that you will run
334334
the application on.
335335

336+
### Standards support
337+
338+
For information on C, C++, and Fortran language support in ATfL, see the [Standards Support page](StandardsSupport.md).
339+
For details on OpenMP support in ATfL, refer to the [OpenMP Support page](OpenMPSupport.md).
340+
336341
### Fortran Recommendations
337342

338343
#### Who should use Arm Toolchain For Linux
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
2+
# Clang OpenMP support
3+
4+
Refer to the [status page](https://releases.llvm.org/20.1.0/tools/clang/docs/OpenMPSupport.html) for details on Clang OpenMP support.
5+
6+
# Flang OpenMP Support
7+
8+
This section outlines the OpenMP API features supported by Flang. It is intended as a general reference.
9+
For the most accurate information on unimplemented features, rely on the compiler’s TODO or “Not Yet Implemented”
10+
messages, which are considered authoritative. With the exception of a few corner cases, Flang
11+
offers full support for (OpenMP 2.5)[#openmp-25-openmp-11], and partial support for [OpenMP 3.1](#openmp-31-openmp-30)
12+
and [OpenMP 4.0](#openmp-40). The tables below outline the current status of OpenMP 4.0, 3.1, 3.0 feature support.
13+
Work is ongoing to add support for OpenMP 4.5 and newer versions; a support statement for these will be shared in the future.
14+
15+
The feature support information is provided as a table with three columns that are self explanatory. The Status column uses
16+
the letters **P**, **Y**, **N** for the implementation status:
17+
- **P** : Partial. When the implementation is incomplete for a few cases
18+
- **Y** : Yes. When the implementation is complete
19+
- **N** : No. When the implementation is absent
20+
21+
Note: No distinction is made between the support in Parser/Semantics, MLIR, Lowering or the OpenMPIRBuilder.
22+
23+
## OpenMP 4.0
24+
25+
| Feature | Status | Comments |
26+
|------------------------------------------------------------|--------|---------------------------------------------------------|
27+
| proc_bind clause | Y | |
28+
| simd construct | P | Some clauses are not supported |
29+
| declare simd construct | N | |
30+
| do simd construct | Y | |
31+
| target data construct | N | |
32+
| target construct | N | |
33+
| target update construct | N | |
34+
| declare target directive | N | |
35+
| teams construct | N | |
36+
| distribute construct | N | |
37+
| distribute simd construct | N | |
38+
| distribute parallel loop construct | N | |
39+
| distribute parallel loop simd construct | N | |
40+
| depend clause | P | Depend clause with array sections are not supported |
41+
| declare reduction construct | N | |
42+
| atomic construct extensions | Y | |
43+
| cancel construct | N | |
44+
| cancellation point construct | N | |
45+
| parallel do simd construct | Y | |
46+
| target teams construct | N | |
47+
| teams distribute construct | N | |
48+
| teams distribute simd construct | N | |
49+
| target teams distribute construct | N | |
50+
| teams distribute parallel loop construct | N | |
51+
| target teams distribute parallel loop construct | N | |
52+
| teams distribute parallel loop simd construct | N | |
53+
| target teams distribute parallel loop simd construct | N | |
54+
55+
## OpenMP 3.1, OpenMP 3.0
56+
57+
| Feature | Status | Comments |
58+
|------------------------------------------------------------|--------|---------------------------------------------------------|
59+
| intent(in) in firstprivate | Y | |
60+
| pointers in firstprivate and lastprivate | Y | |
61+
| final and mergeable clauses in task | Y | |
62+
| taskyield construct | Y | |
63+
| atomic construct extensions | Y | |
64+
| assumed-size arrays are shared | Y | |
65+
| allocatable arrays in private, firstprivate, lastprivate, reduction, copyin, copyprivate | Y | |
66+
| firstprivate in default | Y | |
67+
| collapse clause | Y | |
68+
| schedule kind auto | Y | |
69+
| task construct | P | delayed execution of tasks is not supported |
70+
| taskwait construct | Y | |
71+
72+
## OpenMP 2.5, OpenMP 1.1
73+
All features except a few corner cases in atomic (complex type, different but compatible types in lhs and rhs), threadprivate (character type) constructs/clauses are supported.
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# C Standard Support
2+
3+
Refer to the [Clang C status page](https://clang.llvm.org/c_status.html) for details on C standard support.
4+
5+
# C++ Standard Support
6+
7+
Refer to the [Clang C++ status page](https://clang.llvm.org/cxx_status.html) for details on C++ standard support.
8+
9+
# Fortran Standards Support
10+
11+
This section summarizes Fortran standards support in Flang. The information is only provided as a guideline. The
12+
TODOs/Not Yet Implemented messages emitted by the compiler for unimplemented features should be treated as authoritative.
13+
14+
The standards support information is provided as a table with three columns that are self explanatory. The Status column uses
15+
the letters **P**, **Y**, **N** for the implementation status:
16+
- **P** : When the implementation is incomplete for a few cases
17+
- **Y** : When the implementation is complete
18+
- **N** : When the implementation is absent
19+
20+
Note: No distinction is made between the support in the Parser/Semantics and MLIR or Lowering support.
21+
22+
## Fortran 2023
23+
See [this document](https://github.com/llvm/llvm-project/blob/main/flang/docs/F202X.md) for a brief discussion about the new features in Fortran 2023. The following table summarizes the
24+
status of all important Fortran 2023 features.
25+
26+
| Feature | Status | Comments |
27+
|------------------------------------------------------------|--------|---------------------------------------------------------|
28+
| Allow longer statement lines and overall statement length | Y | |
29+
| Automatic allocation of lengths of character variables | N | |
30+
| The specifiers typeof and classof | N | |
31+
| Conditional expressions and arguments | N | |
32+
| More use of boz constants | P | All usages other than enum are supported |
33+
| Intrinsics for extracting tokens from a string | N | |
34+
| Intrinsics for Trig functions that work in degrees | N | |
35+
| Intrinsics for Trig functions that work in half revolutions| N | |
36+
| Changes to system_clock | N | |
37+
| Changes for conformance with the new IEEE standard | Y | |
38+
| Additional named constants to specify kinds | Y | |
39+
| Extensions for c_f_pointer intrinsic | N | |
40+
| Procedures for converting between fortran and c strings | N | |
41+
| The at edit descriptor | N | |
42+
| Control over leading zeros in output of real values | N | |
43+
| Extensions for Namelist | N | |
44+
| Allow an object of a type with a coarray ultimate component to be an array or allocatable | N | |
45+
| Put with Notify | N | |
46+
| Error conditions in collectives | N | |
47+
| Simple procedures | N | |
48+
| Using integer arrays to specify subscripts | N | |
49+
| Using integer arrays to specify rank and bound of an array | N | |
50+
| Using an integer constant to specify rank | N | |
51+
| Reduction specifier for do concurrent | P | Syntax is accepted |
52+
| Enumerations | N | |
53+
54+
## Fortran 2018
55+
All features except those listed in the following table are supported. Almost all of the unsupported features are related to
56+
the multi-image execution.
57+
58+
| Feature | Status | Comments |
59+
|------------------------------------------------------------|--------|---------------------------------------------------------|
60+
| Asynchronous communication | P | Syntax is accepted |
61+
| Teams | N | |
62+
| Image failure | P | stat_failed_image is added |
63+
| Form team statement | N | |
64+
| Change team construct | N | |
65+
| Coarrays allocated in teams | N | |
66+
| Critical construct | N | |
67+
| Lock and unlock statements | N | |
68+
| Events | N | |
69+
| Sync team construct | N | |
70+
| Image selectors | N | |
71+
| Intrinsic functions get_team and team_number | N | |
72+
| Intrinsic function image_index | N | |
73+
| Intrinsic function num_images | N | |
74+
| Intrinsic function this_image | N | |
75+
| Intrinsic move_alloc extensions | P | |
76+
| Detecting failed and stopped images | N | |
77+
| Collective subroutines | N | |
78+
| New and enhanced atomic subroutines | N | |
79+
| Failed images and stat= specifiers | N | |
80+
| Intrinsic function coshape | N | |
81+
82+
## Fortran 2008
83+
All features except those listed in the following table are supported.
84+
85+
| Feature | Status | Comments |
86+
|------------------------------------------------------------|--------|---------------------------------------------------------|
87+
| Coarrays | N | Lowering and runtime support is not implemented |
88+
| do concurrent | P | Sequential execution works. Parallel support in progress|
89+
| Internal procedure as an actual argument or pointer target | Y | Current implementation requires stack to be executable. See [Proposal](https://github.com/llvm/llvm-project/blob/main/flang/docs/InternalProcedureTrampolines.md) |
90+
91+
## Fortran 2003
92+
All features except those listed in the following table are supported.
93+
94+
| Feature | Status | Comments |
95+
|------------------------------------------------------------|--------|---------------------------------------------------------|
96+
| Parameterized Derived Types | P | PDT with length type parameters is not supported. See [Proposal](https://github.com/llvm/llvm-project/blob/main/flang/docs/ParameterizedDerivedTypes.md) |
97+
| Assignment to allocatable | P | Assignment to whole allocatable in FORALL is not implemented |
98+
| Pointer Assignment | P | Polymorphic assignment in FORALL is not implemented |
99+
| The VOLATILE attribute | P | VOLATILE in procedure interfaces is not implemented |
100+
| Asynchronous input/output | P | IO will happen synchronously |
101+
| MIN/MAX extensions for CHARACTER | P | Some variants are not supported |
102+
103+
## Fortran 95
104+
All features are supported.
105+
106+
## Fortran 90
107+
All features are supported.
108+
109+
## FORTRAN 77
110+
All features are supported.

arm-software/linux/docs/index.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ platforms.
1414
GettingStarted
1515
UsingArmPL
1616
PortingFromACfL
17+
StandardsSupport
18+
OpenMPSupport
1719
```

0 commit comments

Comments
 (0)