]> git.ipfire.org Git - thirdparty/gcc.git/commit
OpenMP/Fortran: Partially fix non-rect loop nests [PR107424]
authorTobias Burnus <tobias@codesourcery.com>
Thu, 9 Feb 2023 15:03:55 +0000 (16:03 +0100)
committerTobias Burnus <tobias@codesourcery.com>
Thu, 9 Feb 2023 15:03:55 +0000 (16:03 +0100)
commitf735f59aa74fbe8a714eb8c0f95850501850e030
tree49edf1e055338d3bb34828095c505609f303cfbd
parent12102532ff06fa54855ebd65cda49383c237fbf9
OpenMP/Fortran: Partially fix non-rect loop nests [PR107424]

This patch ensures that loop bounds depending on outer loop vars use the
proper TREE_VEC format. It additionally gives a sorry if such an outer
var has a non-one/non-minus-one increment as currently a count variable
is used in this case (see PR).

Finally, it avoids 'count' and just uses a local loop variable if the
step increment is +/-1.

PR fortran/107424

gcc/fortran/ChangeLog:

* trans-openmp.cc (struct dovar_init_d): Add 'sym' and
'non_unit_incr' members.
(gfc_nonrect_loop_expr): New.
(gfc_trans_omp_do): Call it; use normal loop bounds
for unit stride - and only create local loop var.

libgomp/ChangeLog:

* testsuite/libgomp.fortran/non-rectangular-loop-1.f90: New test.
* testsuite/libgomp.fortran/non-rectangular-loop-1a.f90: New test.
* testsuite/libgomp.fortran/non-rectangular-loop-2.f90: New test.
* testsuite/libgomp.fortran/non-rectangular-loop-3.f90: New test.
* testsuite/libgomp.fortran/non-rectangular-loop-4.f90: New test.
* testsuite/libgomp.fortran/non-rectangular-loop-5.f90: New test.

gcc/testsuite/ChangeLog:

* gfortran.dg/goacc/privatization-1-compute-loop.f90: Update dg-note.
* gfortran.dg/goacc/privatization-1-routine_gang-loop.f90: Likewise.

(cherry picked from commit ac2949574da9a668daad421d7edb79f172f73c6f)
12 files changed:
gcc/fortran/ChangeLog.omp
gcc/fortran/trans-openmp.cc
gcc/testsuite/ChangeLog.omp
gcc/testsuite/gfortran.dg/goacc/privatization-1-compute-loop.f90
gcc/testsuite/gfortran.dg/goacc/privatization-1-routine_gang-loop.f90
libgomp/ChangeLog.omp
libgomp/testsuite/libgomp.fortran/non-rectangular-loop-1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/non-rectangular-loop-1a.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/non-rectangular-loop-2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/non-rectangular-loop-3.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/non-rectangular-loop-4.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.fortran/non-rectangular-loop-5.f90 [new file with mode: 0644]