[WIP,0/4] OpenMP: support for loop transformations

Message ID 20231001201021.785572-1-sandra@codesourcery.com
Headers
Series OpenMP: support for loop transformations |

Message

Sandra Loosemore Oct. 1, 2023, 8:10 p.m. UTC
  This series of patches is an update of Frederik's previous loop
transformation patch set, previously posted here:

https://gcc.gnu.org/pipermail/gcc-patches/2023-March/614564.html

that has been updated to resolve conflicts with my set of
imperfectly-nested loops patches and other changes on mainline since
March.  It does not address Jakub's code review concerns that these
patches are lowering the transformations too late, and that this needs
to be done in the front ends instead; the purpose of this iteration of
the patch set is to provide a baseline for doing that rewrite.

I used the version of Frederik's patches that were committed
to the OG13 branch as the basis for this work, along with several
follow-up bug fixes, some glue and additional test cases I had added
on OG13 with my own imperfectly-nested loops patches there, the
support for C++ attribute syntax that I had later put on OG13 (which
required resolving some conflicts with different changes on mainline),
etc.  The specific OG13 commits that were on my merge list were:

ea770a4a9f6 openmp: Add Fortran support for "omp unroll" directive
c17983cd052 openmp: Add C/C++ support for "omp unroll" directive
5e11b7ffc84 openacc: Rename OMP_CLAUSE_TILE to OMP_CLAUSE_OACC_TILE
c6f772b089d openmp: Add Fortran support for "omp tile"
5b9c9f10892 openmp: Add C/C++ support for "omp tile"
5c71451f714 openmp: Add Fortran support for loop transformations on inner loops
3baddf440b7 openmp: Add C/C++ support for loop transformations on inner loops
c89addc938d openmp: Fix loop transformation tests
94a75fb12e6 openmp: Fix initialization for 'unroll full'
8adfa43a19e openmp: Fix diagnostic message for "omp unroll"
e59a5a62eb5 openmp: Fix number of iterations computation for "omp unroll full"
62e64a55d3f OpenMP: Handle loop transformation clauses in nested functions
09623de2186 OpenMP: C support for imperfectly-nested loops
546b3460346 OpenMP: C++ support for imperfectly-nested loops
bf38eb98eaf OpenMP: New c/c++ testcases for imperfectly-nested loops
4b17c1a010b OpenMP: Refactor and tidy Fortran front-end code for loop transformations
e10b1be8777 OpenMP: Fortran support for imperfectly nested loops
ff563b2c8dd OpenMP: C++ attribute syntax fixes/testcases for loop transformations

Because there were so many incremental changes I've reorganized
Frederik's patch set into a smaller set of consolidated changes, and
written new changelogs.

-Sandra

Frederik Harwath (4):
  openacc: Rename OMP_CLAUSE_TILE to OMP_CLAUSE_OACC_TILE
  OpenMP: Language-independent parts of loop transform support.
  OpenMP: Fortran front-end support for loop transforms.
  OpenMP: C and C++ front-end support for loop transforms.

 gcc/Makefile.in                               |    1 +
 gcc/c-family/c-gimplify.cc                    |    1 +
 gcc/c-family/c-omp.cc                         |   12 +-
 gcc/c-family/c-pragma.cc                      |    2 +
 gcc/c-family/c-pragma.h                       |    7 +-
 gcc/c/c-parser.cc                             |  527 ++++-
 gcc/c/c-typeck.cc                             |   10 +-
 gcc/cp/cp-gimplify.cc                         |    3 +
 gcc/cp/parser.cc                              |  541 ++++-
 gcc/cp/pt.cc                                  |   15 +-
 gcc/cp/semantics.cc                           |  103 +-
 gcc/doc/invoke.texi                           |    9 +
 gcc/fortran/dump-parse-tree.cc                |   28 +
 gcc/fortran/gfortran.h                        |   12 +-
 gcc/fortran/match.h                           |    2 +
 gcc/fortran/openmp.cc                         |  736 +++++--
 gcc/fortran/parse.cc                          |   48 +
 gcc/fortran/resolve.cc                        |    6 +
 gcc/fortran/st.cc                             |    2 +
 gcc/fortran/trans-openmp.cc                   |  186 +-
 gcc/fortran/trans.cc                          |    2 +
 gcc/gimple-pretty-print.cc                    |    6 +
 gcc/gimple.h                                  |    1 +
 gcc/gimplify.cc                               |   73 +-
 gcc/omp-general.cc                            |   22 +-
 gcc/omp-general.h                             |    1 +
 gcc/omp-low.cc                                |    6 +-
 gcc/omp-transform-loops.cc                    | 1815 +++++++++++++++++
 gcc/params.opt                                |    8 +
 gcc/passes.def                                |    1 +
 .../c-c++-common/gomp/imperfect-attributes.c  |   18 +-
 .../loop-transforms/imperfect-loop-nest.c     |   11 +
 .../gomp/loop-transforms/tile-1.c             |  160 ++
 .../gomp/loop-transforms/tile-2.c             |  179 ++
 .../gomp/loop-transforms/tile-3.c             |  109 +
 .../gomp/loop-transforms/tile-4.c             |  322 +++
 .../gomp/loop-transforms/tile-5.c             |  150 ++
 .../gomp/loop-transforms/tile-6.c             |   34 +
 .../gomp/loop-transforms/tile-7.c             |   31 +
 .../gomp/loop-transforms/tile-8.c             |   40 +
 .../gomp/loop-transforms/unroll-1.c           |  133 ++
 .../gomp/loop-transforms/unroll-2.c           |   95 +
 .../gomp/loop-transforms/unroll-3.c           |   18 +
 .../gomp/loop-transforms/unroll-4.c           |   19 +
 .../gomp/loop-transforms/unroll-5.c           |   19 +
 .../gomp/loop-transforms/unroll-6.c           |   20 +
 .../gomp/loop-transforms/unroll-7.c           |  144 ++
 .../gomp/loop-transforms/unroll-8.c           |   76 +
 .../gomp/loop-transforms/unroll-inner-1.c     |   15 +
 .../gomp/loop-transforms/unroll-inner-2.c     |   29 +
 .../gomp/loop-transforms/unroll-non-rect-1.c  |   37 +
 .../gomp/loop-transforms/unroll-non-rect-2.c  |   22 +
 .../gomp/loop-transforms/unroll-simd-1.c      |   84 +
 gcc/testsuite/g++.dg/gomp/attrs-4.C           |    2 +-
 gcc/testsuite/g++.dg/gomp/for-1.C             |    2 +-
 .../gomp/loop-transforms/attrs-tile-1.C       |  164 ++
 .../gomp/loop-transforms/attrs-tile-2.C       |  174 ++
 .../gomp/loop-transforms/attrs-tile-3.C       |  111 +
 .../gomp/loop-transforms/attrs-unroll-1.C     |  135 ++
 .../gomp/loop-transforms/attrs-unroll-2.C     |   81 +
 .../gomp/loop-transforms/attrs-unroll-3.C     |   20 +
 .../loop-transforms/attrs-unroll-inner-1.C    |   15 +
 .../loop-transforms/attrs-unroll-inner-2.C    |   29 +
 .../loop-transforms/attrs-unroll-inner-3.C    |   71 +
 .../g++.dg/gomp/loop-transforms/tile-1.h      |   27 +
 .../g++.dg/gomp/loop-transforms/tile-1a.C     |   27 +
 .../g++.dg/gomp/loop-transforms/tile-1b.C     |   27 +
 .../g++.dg/gomp/loop-transforms/unroll-1.C    |   42 +
 .../g++.dg/gomp/loop-transforms/unroll-2.C    |   47 +
 .../g++.dg/gomp/loop-transforms/unroll-3.C    |   37 +
 gcc/testsuite/g++.dg/gomp/pr94512.C           |    2 +-
 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  |    6 +-
 .../gomp/loop-transforms/inner-loops.f90      |  124 ++
 .../gomp/loop-transforms/tile-1.f90           |  163 ++
 .../gomp/loop-transforms/tile-1a.f90          |   10 +
 .../gomp/loop-transforms/tile-2.f90           |   80 +
 .../gomp/loop-transforms/tile-3.f90           |   18 +
 .../gomp/loop-transforms/tile-4.f90           |   95 +
 .../loop-transforms/tile-imperfect-nest.f90   |   93 +
 .../loop-transforms/tile-inner-loops-1.f90    |   16 +
 .../loop-transforms/tile-inner-loops-2.f90    |   23 +
 .../loop-transforms/tile-inner-loops-3.f90    |   22 +
 .../loop-transforms/tile-inner-loops-3a.f90   |   31 +
 .../loop-transforms/tile-inner-loops-4.f90    |   30 +
 .../loop-transforms/tile-inner-loops-4a.f90   |   26 +
 .../loop-transforms/tile-inner-loops-5.f90    |  123 ++
 .../tile-non-rectangular-1.f90                |   71 +
 .../tile-non-rectangular-2.f90                |   12 +
 .../gomp/loop-transforms/tile-unroll-1.f90    |   57 +
 .../gomp/loop-transforms/unroll-1.f90         |  277 +++
 .../gomp/loop-transforms/unroll-10.f90        |    7 +
 .../gomp/loop-transforms/unroll-11.f90        |   75 +
 .../gomp/loop-transforms/unroll-12.f90        |   29 +
 .../gomp/loop-transforms/unroll-2.f90         |   22 +
 .../gomp/loop-transforms/unroll-3.f90         |   17 +
 .../gomp/loop-transforms/unroll-4.f90         |   18 +
 .../gomp/loop-transforms/unroll-5.f90         |   18 +
 .../gomp/loop-transforms/unroll-6.f90         |   19 +
 .../gomp/loop-transforms/unroll-7.f90         |   62 +
 .../gomp/loop-transforms/unroll-8.f90         |   22 +
 .../gomp/loop-transforms/unroll-9.f90         |   18 +
 .../loop-transforms/unroll-inner-loop.f90     |   57 +
 .../loop-transforms/unroll-no-clause-1.f90    |   20 +
 .../loop-transforms/unroll-no-clause-2.f90    |   21 +
 .../loop-transforms/unroll-no-clause-3.f90    |   23 +
 .../loop-transforms/unroll-non-rect-1.f90     |   31 +
 .../gomp/loop-transforms/unroll-simd-1.f90    |  244 +++
 .../gomp/loop-transforms/unroll-simd-2.f90    |   57 +
 .../gomp/loop-transforms/unroll-tile-1.f90    |   37 +
 .../gomp/loop-transforms/unroll-tile-2.f90    |   41 +
 .../loop-transforms/unroll-tile-inner-1.f90   |   25 +
 gcc/testsuite/gfortran.dg/gomp/pure-1.f90     |   26 +
 gcc/testsuite/gfortran.dg/gomp/pure-2.f90     |   25 -
 gcc/tree-core.h                               |   14 +-
 gcc/tree-nested.cc                            |   18 +-
 gcc/tree-pass.h                               |    1 +
 gcc/tree-pretty-print.cc                      |   56 +-
 gcc/tree.cc                                   |   10 +-
 gcc/tree.def                                  |    6 +
 gcc/tree.h                                    |   23 +-
 .../matrix-no-directive-unroll-full-1.C       |   13 +
 .../libgomp.c++/loop-transforms/tile-2.C      |   69 +
 .../libgomp.c++/loop-transforms/tile-3.C      |   28 +
 .../libgomp.c++/loop-transforms/unroll-1.C    |   73 +
 .../libgomp.c++/loop-transforms/unroll-2.C    |   34 +
 .../loop-transforms/unroll-full-tile.C        |   84 +
 .../imperfect-transform-1.c                   |   79 +
 .../imperfect-transform-2.c                   |   79 +
 .../loop-transforms/matrix-1.h                |   70 +
 .../loop-transforms/matrix-constant-iter.h    |   71 +
 .../loop-transforms/matrix-helper.h           |   19 +
 .../loop-transforms/matrix-no-directive-1.c   |   11 +
 .../matrix-no-directive-unroll-full-1.c       |   13 +
 .../matrix-omp-distribute-parallel-for-1.c    |    8 +
 .../loop-transforms/matrix-omp-for-1.c        |   13 +
 .../matrix-omp-parallel-for-1.c               |   13 +
 .../matrix-omp-parallel-masked-taskloop-1.c   |    8 +
 ...trix-omp-parallel-masked-taskloop-simd-1.c |    8 +
 .../matrix-omp-target-parallel-for-1.c        |   15 +
 ...p-target-teams-distribute-parallel-for-1.c |   10 +
 .../loop-transforms/matrix-omp-taskloop-1.c   |    8 +
 ...trix-omp-teams-distribute-parallel-for-1.c |    8 +
 .../loop-transforms/matrix-simd-1.c           |    8 +
 .../matrix-transform-variants-1.h             |  191 ++
 .../loop-transforms/unroll-1.c                |   78 +
 .../loop-transforms/unroll-non-rect-1.c       |  131 ++
 .../target-imperfect-transform-1.c            |   82 +
 .../target-imperfect-transform-2.c            |   82 +
 .../libgomp.fortran/imperfect-transform-1.f90 |   70 +
 .../libgomp.fortran/imperfect-transform-2.f90 |   70 +
 .../loop-transforms/inner-1.f90               |   77 +
 .../loop-transforms/nested-fn.f90             |   19 +
 .../loop-transforms/tile-1.f90                |   71 +
 .../loop-transforms/tile-2.f90                |  117 ++
 .../loop-transforms/tile-unroll-1.f90         |  112 +
 .../loop-transforms/tile-unroll-2.f90         |   71 +
 .../loop-transforms/tile-unroll-3.f90         |   77 +
 .../loop-transforms/tile-unroll-4.f90         |   75 +
 .../loop-transforms/unroll-1.f90              |   54 +
 .../loop-transforms/unroll-2.f90              |   88 +
 .../loop-transforms/unroll-3.f90              |   59 +
 .../loop-transforms/unroll-4.f90              |   72 +
 .../loop-transforms/unroll-5.f90              |   55 +
 .../loop-transforms/unroll-6.f90              |  105 +
 .../loop-transforms/unroll-7.f90              |  198 ++
 .../loop-transforms/unroll-7a.f90             |    7 +
 .../loop-transforms/unroll-7b.f90             |    7 +
 .../loop-transforms/unroll-7c.f90             |    7 +
 .../loop-transforms/unroll-8.f90              |   38 +
 .../loop-transforms/unroll-simd-1.f90         |   34 +
 .../loop-transforms/unroll-tile-1.f90         |  112 +
 .../loop-transforms/unroll-tile-2.f90         |   71 +
 .../target-imperfect-transform-1.f90          |   73 +
 .../target-imperfect-transform-2.f90          |   73 +
 176 files changed, 12107 insertions(+), 298 deletions(-)
 create mode 100644 gcc/omp-transform-loops.cc
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/imperfect-loop-nest.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/tile-1.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/tile-2.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/tile-3.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/tile-4.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/tile-5.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/tile-6.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/tile-7.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/tile-8.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-1.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-2.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-3.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-4.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-5.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-6.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-7.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-8.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-inner-1.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-inner-2.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-non-rect-1.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-non-rect-2.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/loop-transforms/unroll-simd-1.c
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/attrs-tile-1.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/attrs-tile-2.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/attrs-tile-3.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/attrs-unroll-1.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/attrs-unroll-2.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/attrs-unroll-3.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/attrs-unroll-inner-1.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/attrs-unroll-inner-2.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/attrs-unroll-inner-3.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/tile-1.h
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/tile-1a.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/tile-1b.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/unroll-1.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/unroll-2.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/loop-transforms/unroll-3.C
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/inner-loops.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-1a.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-2.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-3.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-4.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-imperfect-nest.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-inner-loops-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-inner-loops-2.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-inner-loops-3.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-inner-loops-3a.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-inner-loops-4.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-inner-loops-4a.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-inner-loops-5.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-non-rectangular-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-non-rectangular-2.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/tile-unroll-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-10.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-11.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-12.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-2.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-3.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-4.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-5.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-6.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-7.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-8.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-9.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-inner-loop.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-no-clause-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-no-clause-2.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-no-clause-3.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-non-rect-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-simd-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-simd-2.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-tile-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-tile-2.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/loop-transforms/unroll-tile-inner-1.f90
 create mode 100644 libgomp/testsuite/libgomp.c++/loop-transforms/matrix-no-directive-unroll-full-1.C
 create mode 100644 libgomp/testsuite/libgomp.c++/loop-transforms/tile-2.C
 create mode 100644 libgomp/testsuite/libgomp.c++/loop-transforms/tile-3.C
 create mode 100644 libgomp/testsuite/libgomp.c++/loop-transforms/unroll-1.C
 create mode 100644 libgomp/testsuite/libgomp.c++/loop-transforms/unroll-2.C
 create mode 100644 libgomp/testsuite/libgomp.c++/loop-transforms/unroll-full-tile.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/loop-transforms/matrix-1.h
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-constant-iter.h
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-helper.h
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-unroll-full-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-distribute-parallel-for-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-for-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-for-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-simd-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-parallel-for-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-teams-distribute-parallel-for-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-taskloop-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-teams-distribute-parallel-for-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-simd-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-transform-variants-1.h
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/unroll-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/loop-transforms/unroll-non-rect-1.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.fortran/imperfect-transform-1.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/imperfect-transform-2.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/inner-1.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/nested-fn.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/tile-1.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/tile-2.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/tile-unroll-1.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/tile-unroll-2.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/tile-unroll-3.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/tile-unroll-4.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-1.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-2.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-3.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-4.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-5.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-6.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-7.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-7a.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-7b.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-7c.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-8.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-simd-1.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-tile-1.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/loop-transforms/unroll-tile-2.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