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