This set of patches implements C/C++ and Fortran front end support for
adding "acc loop auto" annotations to loop nests in OpenACC kernels
regions.  For background on this, refer to Thomas Schwinge's talk from
last year's cauldron, at

https://gcc.gnu.org/wiki/cauldron2019talks?action=AttachFile&do=view&target=OpenACC+kernels-cauldron2019.pdf

In particular, pages 20-24 describe this part of the work.  We're
trying to identify loops that might be parallelizable and convert them
to ACC_LOOP tree structures for further analysis, instead of lowering
them to goto form early in compilation, as we do with ordinary
for/while/do loops in C/C++ and DO loops in Fortran.

The C/C++ patches depend on my earlier not-yet-reviewed patch series
to unify the loop tree representations in the two front ends, which I
most recently reposted here:

https://gcc.gnu.org/pipermail/gcc-patches/2020-August/551927.html

These patches have all been previously committed to the OG10 branch to
unblock other work on subsequent processing of the loops with auto
annotations, but without proper review.  Here I've mashed up the
followup bug fixes and incremental improvements I committed to the
branch together with the original patches to simplify review.  If
anyone cares, the corresponding commits on the OG10 branch were:

c96409c1f190e29fd9809890fb16d72556f3b7e6
fdbad20a57e03e05b608f19db41a454bc0cd1c47
6d670e648e76fe44589a42ee458098ff84d24af1
cb581bdb6689d74c1849b7e6bc139c6f122fdcc2
16d59cea8362c1ec731aa5b4db42a2817f036f23
7b436e90a4e03fdce5b0c6a8c452d3f23f1e136b
c2789b61cf29397295f39a43f5d1605ab8a32d87
1c9af55d7ff76e2e6b633af33e6e6991a0ba4c48
20f37fd2f9c8c52fff380982d6fc5eb2d88b3dd9
df5f2065bad30dc6aff9653237157c33fd4161cd

Sandra Loosemore (2):
  Kernels loops annotation: C and C++.
  Kernels loops annotation: Fortran.

 gcc/c-family/c-common.h                            |   1 +
 gcc/c-family/c-omp.c                               | 916 +++++++++++++++++++--
 gcc/c-family/c.opt                                 |   8 +
 gcc/c/c-decl.c                                     |  28 +
 gcc/c/c-parser.c                                   |   3 +
 gcc/cp/decl.c                                      |  44 +
 gcc/cp/parser.c                                    |   3 +
 gcc/cp/semantics.c                                 |   9 +
 gcc/doc/invoke.texi                                |  34 +-
 gcc/fortran/gfortran.h                             |   1 +
 gcc/fortran/lang.opt                               |   8 +
 gcc/fortran/openmp.c                               | 415 ++++++++++
 gcc/fortran/parse.c                                |   9 +
 gcc/fortran/trans-openmp.c                         |  30 +-
 .../goacc/classify-kernels-unparallelized.c        |   1 +
 .../c-c++-common/goacc/classify-kernels.c          |   1 +
 .../c-c++-common/goacc/combined-directives.c       |   2 +-
 .../goacc/kernels-counter-var-redundant-load.c     |   1 +
 .../goacc/kernels-counter-vars-function-scope.c    |   1 +
 .../goacc/kernels-double-reduction-n.c             |   1 +
 .../c-c++-common/goacc/kernels-double-reduction.c  |   1 +
 gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c  |   1 +
 gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c  |   1 +
 .../c-c++-common/goacc/kernels-loop-annotation-1.c |  26 +
 .../goacc/kernels-loop-annotation-10.c             |  32 +
 .../goacc/kernels-loop-annotation-11.c             |  27 +
 .../goacc/kernels-loop-annotation-12.c             |  28 +
 .../goacc/kernels-loop-annotation-13.c             |  27 +
 .../goacc/kernels-loop-annotation-14.c             |  22 +
 .../goacc/kernels-loop-annotation-15.c             |  22 +
 .../goacc/kernels-loop-annotation-16.c             |  26 +
 .../goacc/kernels-loop-annotation-17.c             |  26 +
 .../goacc/kernels-loop-annotation-18.c             |  18 +
 .../goacc/kernels-loop-annotation-19.c             |  19 +
 .../c-c++-common/goacc/kernels-loop-annotation-2.c |  21 +
 .../goacc/kernels-loop-annotation-20.c             |  23 +
 .../goacc/kernels-loop-annotation-21.c             |  42 +
 .../goacc/kernels-loop-annotation-22.c             |  41 +
 .../c-c++-common/goacc/kernels-loop-annotation-3.c |  24 +
 .../c-c++-common/goacc/kernels-loop-annotation-4.c |  34 +
 .../c-c++-common/goacc/kernels-loop-annotation-5.c |  27 +
 .../c-c++-common/goacc/kernels-loop-annotation-6.c |  27 +
 .../c-c++-common/goacc/kernels-loop-annotation-7.c |  26 +
 .../c-c++-common/goacc/kernels-loop-annotation-8.c |  27 +
 .../c-c++-common/goacc/kernels-loop-annotation-9.c |  26 +
 .../c-c++-common/goacc/kernels-loop-data-2.c       |   1 +
 .../goacc/kernels-loop-data-enter-exit-2.c         |   1 +
 .../goacc/kernels-loop-data-enter-exit.c           |   1 +
 .../c-c++-common/goacc/kernels-loop-data-update.c  |   1 +
 .../c-c++-common/goacc/kernels-loop-data.c         |   1 +
 gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c  |   1 +
 .../c-c++-common/goacc/kernels-loop-mod-not-zero.c |   1 +
 gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c  |   1 +
 .../c-c++-common/goacc/kernels-loop-nest.c         |   1 +
 gcc/testsuite/c-c++-common/goacc/kernels-loop.c    |   1 +
 .../c-c++-common/goacc/kernels-one-counter-var.c   |   1 +
 .../goacc/kernels-parallel-loop-data-enter-exit.c  |   1 +
 .../c-c++-common/goacc/kernels-reduction.c         |   1 +
 .../goacc/classify-kernels-unparallelized.f95      |   1 +
 .../gfortran.dg/goacc/classify-kernels.f95         |   1 +
 .../gfortran.dg/goacc/combined-directives.f90      |  19 +-
 gcc/testsuite/gfortran.dg/goacc/common-block-3.f90 |   1 +
 gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95 |   1 +
 .../goacc/kernels-loop-annotation-1.f95            |  33 +
 .../goacc/kernels-loop-annotation-10.f95           |  32 +
 .../goacc/kernels-loop-annotation-11.f95           |  34 +
 .../goacc/kernels-loop-annotation-12.f95           |  39 +
 .../goacc/kernels-loop-annotation-13.f95           |  38 +
 .../goacc/kernels-loop-annotation-14.f95           |  35 +
 .../goacc/kernels-loop-annotation-15.f95           |  35 +
 .../goacc/kernels-loop-annotation-16.f95           |  34 +
 .../goacc/kernels-loop-annotation-18.f95           |  28 +
 .../goacc/kernels-loop-annotation-19.f95           |  29 +
 .../goacc/kernels-loop-annotation-2.f95            |  32 +
 .../goacc/kernels-loop-annotation-20.f95           |  26 +
 .../goacc/kernels-loop-annotation-3.f95            |  33 +
 .../goacc/kernels-loop-annotation-4.f95            |  34 +
 .../goacc/kernels-loop-annotation-5.f95            |  35 +
 .../goacc/kernels-loop-annotation-6.f95            |  34 +
 .../goacc/kernels-loop-annotation-7.f95            |  48 ++
 .../goacc/kernels-loop-annotation-8.f95            |  50 ++
 .../goacc/kernels-loop-annotation-9.f95            |  34 +
 .../gfortran.dg/goacc/kernels-loop-data-2.f95      |   1 +
 .../goacc/kernels-loop-data-enter-exit-2.f95       |   1 +
 .../goacc/kernels-loop-data-enter-exit.f95         |   1 +
 .../gfortran.dg/goacc/kernels-loop-data-update.f95 |   1 +
 .../gfortran.dg/goacc/kernels-loop-data.f95        |   1 +
 gcc/testsuite/gfortran.dg/goacc/kernels-loop-n.f95 |   1 +
 gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95   |   1 +
 .../kernels-parallel-loop-data-enter-exit.f95      |   1 +
 .../goacc/private-explicit-kernels-1.f95           |   7 +-
 .../goacc/private-predetermined-kernels-1.f95      |   7 +-
 gcc/tree.h                                         |   5 +
 93 files changed, 2755 insertions(+), 81 deletions(-)
 create mode 100644 gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-1.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-10.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-11.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-12.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-13.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-14.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-15.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-16.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-17.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-18.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-19.c
 create mode 100644 gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-2.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-20.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-21.c
 create mode 100644 
gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-22.c
 create mode 100644 gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-3.c
 create mode 100644 gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-4.c
 create mode 100644 gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-5.c
 create mode 100644 gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-6.c
 create mode 100644 gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-7.c
 create mode 100644 gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-8.c
 create mode 100644 gcc/testsuite/c-c++-common/goacc/kernels-loop-annotation-9.c
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-1.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-10.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-11.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-12.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-13.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-14.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-15.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-16.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-18.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-19.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-2.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-20.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-3.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-4.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-5.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-6.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-7.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-8.f95
 create mode 100644 
gcc/testsuite/gfortran.dg/goacc/kernels-loop-annotation-9.f95

-- 
2.8.1

Reply via email to