]> git.ipfire.org Git - thirdparty/gcc.git/commit
openacc: Add data optimization pass
authorAndrew Stubbs <ams@codesourcery.com>
Tue, 16 Nov 2021 15:19:23 +0000 (16:19 +0100)
committerKwok Cheung Yeung <kcy@codesourcery.com>
Tue, 21 Jun 2022 13:11:50 +0000 (14:11 +0100)
commitab53d5a6a27dce2a92f28a62ceb6e184c8356f25
tree3c7592c0e3fbb9362742e9a22cf8fa76577d4d8e
parentcbc7e47d439f024ed828cc31441218f1ec5ce235
openacc: Add data optimization pass

Address PR90591 "Avoid unnecessary data transfer out of OMP
construct", for simple (but common) cases.

This commit adds a pass that optimizes data mapping clauses.
Currently, it can optimize copy/map(tofrom) clauses involving scalars
to copyin/map(to) and further to "private".  The pass is restricted
"kernels" regions but could be extended to other types of regions.

gcc/ChangeLog:

        * Makefile.in: Add pass.
        * doc/gimple.texi: TODO.
        * gimple-walk.cc (walk_gimple_seq_mod): Adjust for backward walking.
        * gimple-walk.h (struct walk_stmt_info): Add field.
        * passes.def: Add new pass.
        * tree-pass.h (make_pass_omp_data_optimize): New declaration.
        * omp-data-optimize.cc: New file.

libgomp/ChangeLog:

        * testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c:
Expect optimization messages.
        * testsuite/libgomp.oacc-fortran/pr94358-1.f90: Likewise.

gcc/testsuite/ChangeLog:

        * c-c++-common/goacc/note-parallelism-1-kernels-loops.c: Likewise.
* c-c++-common/goacc/note-parallelism-1-kernels-straight-line.c:
Likewise.
* c-c++-common/goacc/note-parallelism-kernels-loops.c: Likewise.
        * c-c++-common/goacc/uninit-copy-clause.c: Likewise.
        * gfortran.dg/goacc/uninit-copy-clause.f95: Likewise.
        * c-c++-common/goacc/omp_data_optimize-1.c: New test.
        * g++.dg/goacc/omp_data_optimize-1.C: New test.
        * gfortran.dg/goacc/omp_data_optimize-1.f90: New test.

Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
20 files changed:
gcc/ChangeLog.omp
gcc/Makefile.in
gcc/doc/gimple.texi
gcc/gimple-walk.cc
gcc/gimple-walk.h
gcc/omp-data-optimize.cc [new file with mode: 0644]
gcc/passes.def
gcc/testsuite/ChangeLog.omp
gcc/testsuite/c-c++-common/goacc/note-parallelism-1-kernels-loops.c
gcc/testsuite/c-c++-common/goacc/note-parallelism-1-kernels-straight-line.c
gcc/testsuite/c-c++-common/goacc/note-parallelism-kernels-loops.c
gcc/testsuite/c-c++-common/goacc/omp_data_optimize-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/goacc/uninit-copy-clause.c
gcc/testsuite/g++.dg/goacc/omp_data_optimize-1.C [new file with mode: 0644]
gcc/testsuite/gfortran.dg/goacc/omp_data_optimize-1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/goacc/uninit-copy-clause.f95
gcc/tree-pass.h
libgomp/ChangeLog.omp
libgomp/testsuite/libgomp.oacc-c-c++-common/kernels-decompose-1.c
libgomp/testsuite/libgomp.oacc-fortran/pr94358-1.f90