llvm-capstone/flang/docs/OpenMP-4.5-grammar.md
Richard Barton 271a7bb144 [flang] Add new documentation main page
Add a new index page to be the Flang documentation mainpage instead of
Overview.md, which jumps straight into the compiler Design. The index file
needs to be in .rst format to use the toctree directive to create table of
contents.

Also use the sphinx_markdown_tables extension to generate html tables form
markdown.

A number of additional style changes to the existing docs were needed to make
this work well:
 * Convert all headings to the # style, which works better with toctree's
   titlesonly option. Ensure that there is only one top-level heading per
   document.
 * Add a title to documents that don't have one for rendering on the index.
 * Convert the grammar docs from .txt to .md. for better rendering
 * Fixed broken link to a section in another document - sphinx does not seem to
   support anchor links in markdown files.

Depends on D87226

Reviewed By: sameeranjoshi

Differential Revision: https://reviews.llvm.org/D87242
2020-09-11 14:19:51 +01:00

17 KiB

OpenMP 4.5 Grammar

Grammar used by Flang to parse OpenMP 4.5.

OpenMP 4.5 Specifications

2 omp-directive -> sentinel directive-name [clause[ [,] clause]...]
2.1.1 sentinel -> !$omp | c$omp | *$omp
2.1.2 sentinel -> !$omp

directive-name

2.5 parallel -> PARALLEL [parallel-clause[ [,] parallel-clause]...]
    parallel-clause -> if-clause |
                       num-threads-clause |
                       default-clause |
                       private-clause |
                       firstprivate-clause |
                       shared-clause |
                       copyin-clause |
                       reduction-clause |
                       proc-bind-clause

2.5 end-parallel -> END PARALLEL

2.7.1 do -> DO [do-clause[ [,] do-clause]...]
      do-clause -> private-clause |
                   firstprivate-clause |
                   lastprivate-clause |
                   linear-clause |
                   reduction-clause |
                   schedule-clause |
                   collapse-clause |
                   ordered-clause

2.7.1 end-do -> END DO [nowait-clause]

2.7.2 sections -> SECTIONS [sections-clause[ [,] sections-clause]...]
      sections-clause -> private-clause |
                         firstprivate-clause |
                         lastprivate-clause |
                         reduction-clause

2.7.2 section -> SECTION

2.7.2 end-sections -> END SECTIONS [nowait-clause]

2.7.3 single -> SINGLE [single-clause[ [,] single-clause]...]
      single-clause -> private-clause |
                       firstprivate-clause

2.7.3 end-single -> END SINGLE [end-single-clause[ [,] end-single-clause]...]
      end-single-clause -> copyprivate-clause |
                           nowait-clause

2.7.4 workshare -> WORKSHARE

2.7.4 end-workshare -> END WORKSHARE [nowait-clause]

2.8.1 simd -> SIMD [simd-clause[ [,] simd-clause]...]
      simd-clause -> safelen-clause |
                     simdlen-clause |
                     linear-clause |
                     aligned-clause |
                     private-clause |
                     lastprivate-clause |
                     reduction-clause |
                     collapse-clause

2.8.1 end-simd -> END SIMD

2.8.2 declare-simd -> DECLARE SIMD [(proc-name)] [declare-simd-clause[ [,] declare-simd-clause]...]
      declare-simd-clause -> simdlen-clause |
                             linear-clause |
                             aligned-clause |
                             uniform-clause |
                             inbranch-clause |
                             notinbranch-clause

2.8.3 do-simd -> DO SIMD [do-simd-clause[ [,] do-simd-clause]...]
      do-simd-clause -> do-clause |
                        simd-clause

2.8.3 end-do-simd -> END DO SIMD [nowait-clause]

2.9.1 task -> TASK [task-clause[ [,] task-clause]...]
      task-clause -> if-clause |
                     final-clause |
                     untied-clause |
                     default-clause |
                     mergeable-clause |
                     private-clause |
                     firstprivate-clause |
                     shared-clause |
                     depend-clause |
                     priority-clause

2.9.1 end-task -> END TASK

2.9.2 taskloop -> TASKLOOP [taskloop-clause[ [,] taskloop-clause]...]
      taskloop-clause -> if-clause |
                         shared-clause |
                         private-clause |
                         firstprivate-clause |
                         lastprivate-clause |
                         default-clause |
                         grainsize-clause |
                         num-tasks-clause |
                         collapse-clause |
                         final-clause |
                         priority-clause |
                         untied-clause |
                         mergeable-clause |
                         nogroup-clause

2.9.2 end-taskloop -> END TASKLOOP

2.9.3 taskloop-simd -> TASKLOOP SIMD [taskloop-simd-clause[ [,] taskloop-simd-clause]...]
      taskloop-simd-clause -> taskloop-clause |
                              simd-clause

2.9.3 end-taskloop-simd -> END TASKLOOP SIMD

2.9.4 taskyield -> TASKYIELD

2.10.1 target-data -> TARGET DATA target-data-clause[ [ [,] target-data-clause]...]
       target-data-clause -> if-clause |
                             device-clause |
                             map-clause |
                             use-device-ptr-clause

2.10.1 end-target-data -> END TARGET DATA

2.10.2 target-enter-data -> TARGET ENTER DATA [ target-enter-data-clause[ [,] target-enter-data-clause]...]
       target-enter-data-clause -> if-clause |
                                   device-clause |
                                   map-clause |
                                   depend-clause |
                                   nowait-clause

2.10.3 target-exit-data -> TARGET EXIT DATA [ target-exit-data-clause[ [,] target-exit-data-clause]...]
       target-exit-data-clause -> if-clause |
                                  device-clause |
                                  map-clause |
                                  depend-clause |
                                  nowait-clause

2.10.4 target -> TARGET [target-clause[ [,] target-clause]...]
       target-clause -> if-clause |
                        device-clause |
                        private-clause |
                        firstprivate-clause |
                        map-clause |
                        is-device-ptr-clause |
                        defaultmap-clause |
                        nowait-clause |
                        depend-clause

2.10.4 end-target -> END TARGET

2.10.5 target-update -> TARGET UPDATE target-update-clause[ [ [,] target-update-clause]...]
       target-update-clause -> motion-clause |
                               if-clause |
                               device-clause |
                               nowait-clause |
                               depend-clause
       motion-clause -> to-clause |
                        from-clause

2.10.6 declare-target -> DECLARE TARGET (extended-list) |
                         DECLARE TARGET [declare-target-clause[ [,] declare-target-clause]...]
       declare-target-clause -> to-clause |
                                link-clause

2.10.7 teams -> TEAMS [teams-clause[ [,] teams-clause]...]
       teams-clause -> num-teams-clause |
                       thread-limit-clause |
                       default-clause |
                       private-clause |
                       firstprivate-clause |
                       shared-clause |
                       reduction-clause

2.10.7 end-teams -> END TEAMS

2.10.8 distribute -> DISTRIBUTE [distribute-clause[ [,] distribute-clause]...]
       distribute-clause -> private-clause |
                            firstprivate-clause |
                            lastprivate-clause |
                            collapse-clause |
                            dist-schedule-clause

2.10.8 end-distribute -> END DISTRIBUTE

2.10.9 distribute-simd -> DISTRIBUTE SIMD [distribute-simd-clause[ [,] distribute-simd-clause]...]
       distribute-simd-clause -> distribute-clause |
                                 simd-clause

2.10.9 end-distribute-simd -> END DISTRIBUTE SIMD

2.10.10 distribute-parellel-do ->
           DISTRIBUTE PARALLEL DO [distribute-parallel-do-clause[ [,] distribute-parallel-do-clause]...]
        distribute-parallel-do-clause -> distribute-clause |
                                         parallel-do-clause

2.10.10 end-distribute-parellel-do -> END DISTRIBUTE PARALLEL DO

2.10.11 distribute-parallel-do-simd ->
           DISTRIBUTE PARALLEL DO SIMD [distribute-parallel-do-simd-clause[ [,] distribute-parallel-do-simd-clause]...]
        distribute-parallel-do-simd-clause -> distribute-clause |
                                              parallel-do-simd-clause

2.10.11 end-distribute-parallel-do-simd -> END DISTRIBUTE PARALLEL DO SIMD

2.11.1 parallel-do -> PARALLEL DO [parallel-do-clause[ [,] parallel-do-clause]...]
       parallel-do-clause -> parallel-clause |
                             do-clause

2.11.1 end-parallel-do -> END PARALLEL DO

2.11.2 parallel-sections -> PARALLEL SECTIONS [parallel-sections-clause[ [,] parallel-sections-clause]...]
       parallel-sections-clause -> parallel-clause |
                                   sections-clause

2.11.2 end-parallel-sections -> END PARALLEL SECTIONS

2.11.3 parallel-workshare -> PARALLEL WORKSHARE [parallel-workshare-clause[ [,] parallel-workshare-clause]...]
       parallel-workshare-clause -> parallel-clause

2.11.3 end-parallel-workshare -> END PARALLEL WORKSHARE

2.11.4 parallel-do-simd -> PARALLEL DO SIMD [parallel-do-simd-clause[ [,] parallel-do-simd-clause]...]
       parallel-do-simd-clause -> parallel-clause |
                                  do-simd-clause

2.11.4 end-parallel-do-simd -> END PARALLEL DO SIMD

2.11.5 target-parallel -> TARGET PARALLEL [target-parallel-clause[ [,] target-parallel-clause]...]
       target-parallel-clause -> target-clause |
                                 parallel-clause

2.11.5 end-target-parallel -> END TARGET PARALLEL

2.11.6 target-parallel-do -> TARGET PARALLEL DO [target-parallel-do-clause[ [,] target-parallel-do-clause]...]
       target-parallel-do-clause -> target-clause |
                                    parallel-do-clause

2.11.6 end-target-parallel-do -> END TARGET PARALLEL DO

2.11.7 target-parallel-do-simd ->
          TARGET PARALLEL DO SIMD [target-parallel-do-simd-clause[ [,] target-parallel-do-simd-clause]...]
       target-parallel-do-simd-clause -> target-clause |
                                         parallel-do-simd-clause

2.11.7 end-target-parallel-do-simd -> END TARGET PARALLEL DO SIMD

2.11.8 target-simd -> TARGET SIMD [target-simd-clause[ [,] target-simd-clause]...]
       target-simd-clause -> target-clause |
                             simd-clause

2.11.8 end-target-simd -> END TARGET SIMD

2.11.9 target-teams -> TARGET TEAMS [target-teams-clause[ [,] target-teams-clause]...]
       target-teams-clause -> target-clause |
                              teams-clause

2.11.9 end-target-teams -> END TARGET TEAMS

2.11.10 teams-distribute -> TEAMS DISTRIBUTE [teams-distribute-clause[ [,] teams-distribute-clause]...]
        teams-distribute-clause -> teams-clause |
                                   distribute-clause

2.11.10 end-teams-distribute -> END TEAMS DISTRIBUTE

2.11.11 teams-distribute-simd ->
           TEAMS DISTRIBUTE SIMD [teams-distribute-simd-clause[ [,] teams-distribute-simd-clause]...]
        teams-distribute-simd-clause -> teams-clause |
                                        distribute-simd-clause

2.11.11 end-teams-distribute-simd -> END TEAMS DISTRIBUTE SIMD

2.11.12 target-teams-distribute ->
           TARGET TEAMS DISTRIBUTE [target-teams-distribute-clause[ [,] target-teams-distribute-clause]...]
        target-teams-distribute-clause -> target-clause |
                                          teams-distribute-clause

2.11.12 end-target-teams-distribute -> END TARGET TEAMS DISTRIBUTE

2.11.13 target-teams-distribute-simd ->
           TARGET TEAMS DISTRIBUTE SIMD [target-teams-distribute-simd-clause[ [,] target-teams-distribute-simd-clause]...]
        target-teams-distribute-simd-clause -> target-clause |
                                               teams-distribute-simd-clause

2.11.13 end-target-teams-distribute-simd -> END TARGET TEAMS DISTRIBUTE SIMD

2.11.14 teams-distribute-parallel-do ->
           TEAMS DISTRIBUTE PARALLEL DO [teams-distribute-parallel-do-clause[ [,] teams-distribute-parallel-do-clause]...]
        teams-distribute-parallel-do-clause -> teams-clause |
                                               distribute-parallel-do-clause

2.11.14 end-teams-distribute-parallel-do -> END TEAMS DISTRIBUTE PARALLEL DO

2.11.15 target-teams-distribute-parallel-do ->
           TARGET TEAMS DISTRIBUTE PARALLEL DO [target-teams-distribute-parallel-do-clause[ [,] target-teams-distribute-parallel-do-clause]...]
        target-teams-distribute-parallel-do-clause -> target-clause |
                                                      teams-distribute-parallel-do-clause

2.11.15 end-target-teams-distribute-parallel-do -> END TARGET TEAMS DISTRIBUTE PARALLEL DO

2.11.16 teams-distribute-parallel-do-simd ->
           TEAMS DISTRIBUTE PARALLEL DO SIMD [teams-distribute-parallel-do-simd-clause[ [,] teams-distribute-parallel-do-simd-clause]...]
        teams-distribute-parallel-do-simd-clause -> teams-clause |
                                                    distribute-parallel-do-simd-clause

2.11.16 end-teams-distribute-parallel-do-simd -> END TEAMS DISTRIBUTE PARALLEL DO SIMD

2.11.17 target-teams-distribute-parallel-do-simd ->
           TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD [target-teams-distribute-parallel-do-simd-clause[ [,] target-teams-distribute-parallel-do-simd-clause]...]
        target-teams-distribute-parallel-do-simd-clause -> target-clause |
                                                           teams-distribute-parallel-do-simd-clause

2.11.17 end-target-teams-distribute-parallel-do-simd -> END TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD

2.13.1 master -> MASTER

2.13.1 end-master -> END MASTER

2.13.2 critical -> CRITICAL [(name) [HINT(hint-expr)]]

2.13.2 end-critical -> END CRITICAL [(name)]

2.13.3 barrier -> BARRIER

2.13.4 taskwait -> TASKWAIT

2.13.5 taskgroup -> TASKGROUP

2.13.5 end-taskgroup -> END TASKGROUP

2.13.6 atomic -> ATOMIC [seq_cst[,]] atomic-clause [[,]seq_cst] |
                 ATOMIC [seq_cst]
       atomic-clause -> READ | WRITE | UPDATE | CAPTURE

2.13.6 end-atomic -> END ATOMIC

2.13.7 flush -> FLUSH [(variable-name-list)]

2.13.8 ordered -> ORDERED ordered-construct-clause [[[,] ordered-construct-clause]...]
       ordered-construct-clause -> depend-clause

2.13.8 end-ordered -> END ORDERED

2.14.1 cancel -> CANCEL construct-type-clause [ [,] if-clause]
       construct-type-clause -> PARALLEL |
                                SECTIONS |
                                DO |
                                TASKGROUP

2.14.2 cancellation-point -> CANCELLATION POINT construct-type-clause

2.15.2 threadprivate -> THREADPRIVATE (variable-name-list)

2.16 declare-reduction -> DECLARE REDUCTION (reduction-identifier : type-list : combiner) [initializer-clause]

# Clauses
2.5 proc-bind-clause -> PROC_BIND (MASTER | CLOSE | SPREAD)

2.5 num-threads-clause -> NUM_THREADS (scalar-int-expr)

2.7.1 schedule-clause -> SCHEDULE ([sched-modifier] [, sched-modifier]:]
                                   kind[, chunk_size])

2.7.1 kind -> STATIC | DYNAMIC | GUIDED | AUTO | RUNTIME

2.7.1 sched-modifier -> MONOTONIC | NONMONOTONIC | SIMD

2.7.1 chunk_size -> scalar-int-expr

2.7.1 collapse-clause -> COLLAPSE (scalar-constant)

2.7.1 ordered-clause -> ORDERED [(scalar-constant)]

2.7.1 nowait-clause -> NOWAIT

2.8.1 aligned-clause -> ALIGNED (variable-name-list[ : scalar-constant])

2.8.1 safelen-clause -> SAFELEN (scalar-constant)

2.8.1 simdlen-clause -> SIMDLEN (scalar-contant)

2.8.2 uniform-clause -> UNIFORM (dummy-arg-name-list)

2.8.2 inbranch-clause -> INBRANCH

2.8.2 notinbranch-clause -> NOTINBRANCH

2.13.9 depend-clause -> DEPEND (((IN | OUT | INOUT) : variable-name-list) |
                                SOURCE |
                                SINK : vec)
                 vec -> iterator [+/- scalar-int-expr],..., iterator[...]

2.9.2 num-tasks-clause -> NUM_TASKS (scalar-int-expr)

2.9.2 grainsize-clause -> GRAINSIZE (scalar-int-expr)

2.9.2 nogroup-clause -> NOGROUP

2.9.2 untied-clause -> UNTIED

2.9.2 priority-clause -> PRIORITY (scalar-int-expr)

2.9.2 mergeable-clause -> MERGEABLE

2.9.2 final-clause -> FINAL (scalar-int-expr)

2.10.1 use-device-ptr-clause -> USE_DEVICE_PTR (variable-name-list)

2.10.1 device-clause -> DEVICE (scalar-integer-expr)

2.10.4 is-device-ptr-clause -> IS_DEVICE_PTR (variable-name-list)

2.10.5 to-clause -> TO (variable-name-list)

2.10.5 from-clause -> FROM (variable-name-list)

2.10.6 link-clause -> LINK (variable-name-list)

2.10.7 num-teams-clause -> NUM_TEAMS (scalar-integer-expr)

2.10.7 thread-limit-clause -> THREAD_LIMIT (scalar-integer-expr)

2.10.8 dist-schedule-clause -> DIST_SCHEDULE (STATIC [ , chunk_size])

2.12 if-clause -> IF ([ directive-name-modifier :] scalar-logical-expr)

2.15.3.1 default-clause -> DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE)

2.15.3.2 shared-clause -> SHARED (variable-name-list)

2.15.3.3 private-clause -> PRIVATE (variable-name-list)

2.15.3.4 firstprivate-clause -> FIRSTPRIVATE (variable-name-list)

2.15.3.5 lastprivate-clause -> LASTPRIVATE (variable-name-list)

2.15.3.6 reduction-clause -> REDUCTION (reduction-identifier: variable-name-list)
         reduction-identifier -> + | - | * |
                                 .AND. | .OR. | .EQV. | .NEQV. |
                                 MAX | MIN | IAND | IOR | IEOR

2.15.3.7 linear-clause -> LINEAR (linear-list[ : linear-step])
         linear-list -> list | modifier(list)
         modifier -> REF | VAL | UVAL

2.15.4.1 copyin-clause -> COPYIN (variable-name-list)

2.15.4.2 copyprivate-clause -> COPYPRIVATE (variable-name-list)

2.15.5.1 map -> MAP ([ [ALWAYS[,]] map-type : ] variable-name-list)
         map-type -> TO | FROM | TOFROM |
                     ALLOC | RELEASE | DELETE

2.15.5.2 defaultmap -> DEFAULTMAP (TOFROM:SCALAR)