]> git.ipfire.org Git - people/ms/gcc.git/commit
Add OpenACC Fortran support for deviceptr and variable in common blocks
authorJulian Brown <julian@codesourcery.com>
Tue, 12 Feb 2019 22:32:34 +0000 (14:32 -0800)
committerThomas Schwinge <thomas@codesourcery.com>
Tue, 3 Mar 2020 11:13:25 +0000 (12:13 +0100)
commit2d11254d63174644a80a869f031a3d929d7d4e4f
treeb4c991cd760457c98521cd36a238512249154ce4
parent64a95e9be2e86f85bc6c5877b5c22578bbe98b47
Add OpenACC Fortran support for deviceptr and variable in common blocks

2018-06-29  Cesar Philippidis  <cesar@codesourcery.com>
    James Norris  <jnorris@codesourcery.com>

gcc/fortran/
* openmp.c (gfc_match_omp_map_clause): Re-write handling of the
deviceptr clause.  Add new common_blocks argument.  Propagate it to
gfc_match_omp_variable_list.
(gfc_match_omp_clauses): Update calls to gfc_match_omp_map_clauses.
(resolve_positive_int_expr): Promote the warning to an error.
(check_array_not_assumed): Remove pointer check.
(resolve_oacc_nested_loops): Error on do concurrent loops.
* trans-openmp.c (gfc_omp_finish_clause): Don't create pointer data
mappings for deviceptr clauses.
(gfc_trans_omp_clauses): Likewise.

gcc/
* gimplify.c (enum gimplify_omp_var_data): Add GOVD_DEVICETPR.
(oacc_default_clause): Privatize fortran common blocks.
(omp_notice_variable): Add GOVD_DEVICEPTR attribute when appropriate.
Defer the expansion of DECL_VALUE_EXPR for common block decls.
(gimplify_scan_omp_clauses): Add GOVD_DEVICEPTR attribute when
appropriate.
(gimplify_adjust_omp_clauses_1): Set GOMP_MAP_FORCE_DEVICEPTR for
implicit deviceptr mappings.

gcc/testsuite/
* c-c++-common/goacc/deviceptr-4.c: Update.
* gfortran.dg/goacc/common-block-1.f90: New test.
* gfortran.dg/goacc/common-block-2.f90: New test.
* gfortran.dg/goacc/loop-2.f95: Update.
* gfortran.dg/goacc/loop-3-2.f95: Update.
* gfortran.dg/goacc/loop-3.f95: Update.
* gfortran.dg/goacc/loop-5.f95: Update.
* gfortran.dg/goacc/pr72715.f90: New test.
* gfortran.dg/goacc/sie.f95: Update.
* gfortran.dg/goacc/tile-1.f90: Update.
* gfortran.dg/gomp/pr77516.f90: Update.

libgomp/
* oacc-parallel.c (GOACC_parallel_keyed): Handle Fortran deviceptr
clause.
(GOACC_data_start): Likewise.
* testsuite/libgomp.oacc-fortran/common-block-1.f90: New test.
* testsuite/libgomp.oacc-fortran/common-block-2.f90: New test.
* testsuite/libgomp.oacc-fortran/common-block-3.f90: New test.
* testsuite/libgomp.oacc-fortran/deviceptr-1.f90: New test.

(cherry picked from openacc-gcc-9-branch commit
ac6c90812344f4f4cfe4d2f5901c1a9d038a4000)
21 files changed:
gcc/ChangeLog.omp
gcc/fortran/ChangeLog.omp
gcc/fortran/openmp.c
gcc/fortran/trans-openmp.c
gcc/gimplify.c
gcc/testsuite/ChangeLog.omp
gcc/testsuite/c-c++-common/goacc/deviceptr-4.c
gcc/testsuite/gfortran.dg/goacc/common-block-1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/goacc/common-block-2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/goacc/loop-2-kernels-tile.f95
gcc/testsuite/gfortran.dg/goacc/loop-2-parallel-tile.f95
gcc/testsuite/gfortran.dg/goacc/loop-5.f95
gcc/testsuite/gfortran.dg/goacc/sie.f95
gcc/testsuite/gfortran.dg/goacc/tile-1.f90
gcc/testsuite/gfortran.dg/gomp/pr77516.f90
libgomp/ChangeLog.omp
libgomp/oacc-parallel.c
libgomp/testsuite/libgomp.oacc-fortran/common-block-1.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.oacc-fortran/common-block-2.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.oacc-fortran/common-block-3.f90 [new file with mode: 0644]
libgomp/testsuite/libgomp.oacc-fortran/deviceptr-1.f90 [new file with mode: 0644]