I have pushed this set of patches to the OG13 development branch. The major functional change compared to the mainline version I previously posted on April 28 is that this version is integrated with Frederik's loop transformation patches that were previously committed to this branch. I've also incorporated several cleanups suggested in review of the mainline version, along with a few bug fixes.
Sandra Loosemore (6): OpenMP: Handle loop transformation clauses in nested functions OpenMP: C support for imperfectly-nested loops OpenMP: C++ support for imperfectly-nested loops OpenMP: New c/c++ testcases for imperfectly-nested loops OpenMP: Refactor and tidy Fortran front-end code for loop transformations OpenMP: Fortran support for imperfectly nested loops gcc/ChangeLog.omp | 16 + gcc/c/ChangeLog.omp | 19 + gcc/c/c-parser.cc | 833 +++++++---- gcc/cp/ChangeLog.omp | 38 + gcc/cp/cp-tree.h | 2 +- gcc/cp/parser.cc | 1331 +++++++++++------ gcc/cp/parser.h | 3 + gcc/cp/pt.cc | 3 +- gcc/cp/semantics.cc | 80 +- gcc/fortran/ChangeLog.omp | 33 + gcc/fortran/openmp.cc | 1063 +++++++++---- gcc/omp-api.h | 32 + gcc/omp-general.cc | 134 ++ gcc/omp-general.h | 1 + gcc/omp-low.cc | 129 -- gcc/testsuite/ChangeLog.omp | 54 + gcc/testsuite/c-c++-common/goacc/collapse-1.c | 16 +- gcc/testsuite/c-c++-common/goacc/tile-2.c | 4 +- gcc/testsuite/c-c++-common/gomp/imperfect1.c | 38 + gcc/testsuite/c-c++-common/gomp/imperfect2.c | 34 + gcc/testsuite/c-c++-common/gomp/imperfect3.c | 33 + gcc/testsuite/c-c++-common/gomp/imperfect4.c | 33 + gcc/testsuite/c-c++-common/gomp/imperfect5.c | 57 + .../loop-transforms/imperfect-loop-nest.c | 5 +- .../gomp/loop-transforms/tile-1.c | 16 +- .../gomp/loop-transforms/tile-2.c | 16 +- .../gomp/loop-transforms/tile-3.c | 26 +- .../gomp/loop-transforms/unroll-inner-2.c | 6 +- .../c-c++-common/gomp/metadirective-1.c | 2 +- gcc/testsuite/g++.dg/gomp/attrs-4.C | 2 +- gcc/testsuite/g++.dg/gomp/for-1.C | 2 +- gcc/testsuite/g++.dg/gomp/pr41967.C | 2 +- gcc/testsuite/g++.dg/gomp/pr94512.C | 2 +- gcc/testsuite/gcc.dg/gomp/collapse-1.c | 10 +- gcc/testsuite/gcc.dg/gomp/for-1.c | 2 +- gcc/testsuite/gcc.dg/gomp/for-11.c | 2 +- gcc/testsuite/gfortran.dg/gomp/collapse1.f90 | 4 +- gcc/testsuite/gfortran.dg/gomp/collapse2.f90 | 10 +- gcc/testsuite/gfortran.dg/gomp/imperfect1.f90 | 39 + gcc/testsuite/gfortran.dg/gomp/imperfect2.f90 | 56 + gcc/testsuite/gfortran.dg/gomp/imperfect3.f90 | 29 + gcc/testsuite/gfortran.dg/gomp/imperfect4.f90 | 36 + gcc/testsuite/gfortran.dg/gomp/imperfect5.f90 | 67 + .../gomp/loop-transforms/tile-1.f90 | 12 +- .../gomp/loop-transforms/tile-2.f90 | 2 +- .../loop-transforms/tile-imperfect-nest.f90 | 16 +- gcc/tree-nested.cc | 14 + libgomp/ChangeLog.omp | 48 + .../testsuite/libgomp.c++/imperfect-class-1.C | 169 +++ .../testsuite/libgomp.c++/imperfect-class-2.C | 167 +++ .../testsuite/libgomp.c++/imperfect-class-3.C | 167 +++ .../libgomp.c++/imperfect-destructor.C | 135 ++ .../libgomp.c++/imperfect-template-1.C | 172 +++ .../libgomp.c++/imperfect-template-2.C | 170 +++ .../libgomp.c++/imperfect-template-3.C | 170 +++ .../imperfect-transform-1.c | 79 + .../imperfect-transform-2.c | 79 + .../libgomp.c-c++-common/imperfect1.c | 76 + .../libgomp.c-c++-common/imperfect2.c | 114 ++ .../libgomp.c-c++-common/imperfect3.c | 119 ++ .../libgomp.c-c++-common/imperfect4.c | 117 ++ .../libgomp.c-c++-common/imperfect5.c | 49 + .../libgomp.c-c++-common/imperfect6.c | 115 ++ .../target-imperfect-transform-1.c | 82 + .../target-imperfect-transform-2.c | 82 + .../libgomp.c-c++-common/target-imperfect1.c | 81 + .../libgomp.c-c++-common/target-imperfect2.c | 122 ++ .../libgomp.c-c++-common/target-imperfect3.c | 125 ++ .../libgomp.c-c++-common/target-imperfect4.c | 122 ++ .../libgomp.fortran/imperfect-destructor.f90 | 142 ++ .../libgomp.fortran/imperfect-transform-1.f90 | 70 + .../libgomp.fortran/imperfect-transform-2.f90 | 70 + .../testsuite/libgomp.fortran/imperfect1.f90 | 67 + .../testsuite/libgomp.fortran/imperfect2.f90 | 102 ++ .../testsuite/libgomp.fortran/imperfect3.f90 | 110 ++ .../testsuite/libgomp.fortran/imperfect4.f90 | 121 ++ .../loop-transforms/nested-fn.f90 | 19 + .../target-imperfect-transform-1.f90 | 73 + .../target-imperfect-transform-2.f90 | 73 + .../libgomp.fortran/target-imperfect1.f90 | 72 + .../libgomp.fortran/target-imperfect2.f90 | 110 ++ .../libgomp.fortran/target-imperfect3.f90 | 116 ++ .../libgomp.fortran/target-imperfect4.f90 | 126 ++ 83 files changed, 6921 insertions(+), 1274 deletions(-) create mode 100644 gcc/omp-api.h create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect1.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect2.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect3.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect4.c create mode 100644 gcc/testsuite/c-c++-common/gomp/imperfect5.c create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect1.f90 create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect2.f90 create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect3.f90 create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect4.f90 create mode 100644 gcc/testsuite/gfortran.dg/gomp/imperfect5.f90 create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-class-1.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-class-2.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-class-3.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-destructor.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-template-1.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-template-2.C create mode 100644 libgomp/testsuite/libgomp.c++/imperfect-template-3.C create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect-transform-1.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect-transform-2.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect1.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect2.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect3.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect4.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect5.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/imperfect6.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/target-imperfect-transform-1.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/target-imperfect-transform-2.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/target-imperfect1.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/target-imperfect2.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/target-imperfect3.c create mode 100644 libgomp/testsuite/libgomp.c-c++-common/target-imperfect4.c create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect-destructor.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect-transform-1.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect-transform-2.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect1.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect2.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect3.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect4.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/nested-fn.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/target-imperfect-transform-1.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/target-imperfect-transform-2.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/target-imperfect1.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/target-imperfect2.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/target-imperfect3.f90 create mode 100644 libgomp/testsuite/libgomp.fortran/target-imperfect4.f90 -- 2.31.1