mbox series

[v3,0/7] OpenMP: dispatch + adjust_args support

Message ID 20240807115012.3632947-1-parras@baylibre.com
Headers show
Series OpenMP: dispatch + adjust_args support | expand

Message

Paul-Antoine Arras Aug. 7, 2024, 11:50 a.m. UTC
This is a respin of my patchset implementing both the `dispatch` construct and 
the `adjust_args` clause to the `declare variant` directive. The previous
submission can be found there: 
https://gcc.gnu.org/pipermail/gcc-patches/2024-July/657151.html.

Beside being rebased, this new iteration has the following changes:
 * Remove `need_device_ptr` as pseudo-trait set selector and pass `adjust_args`
 list as attribute to the base function. This also ensures that the list will 
 survive multiple declarations;
 * OpenMP 5.1 mandated that each dispatch construct should generate an explicit 
 task. This requirement has been lifted in 5.2, so we removed it;
 * As a result, some clauses are now handled differently: nowait has no effect, 
 depend is moved to a taskwait construct and the default-device ICV has to be 
 restored at the end of the dispatch region;
 * Update test cases.


Paul-Antoine Arras (7):
  OpenMP: dispatch + adjust_args tree data structures and front-end
    interfaces
  OpenMP: middle-end support for dispatch + adjust_args
  OpenMP: C front-end support for dispatch + adjust_args
  OpenMP: C++ front-end support for dispatch + adjust_args
  OpenMP: common C/C++ testcases for dispatch + adjust_args
  OpenMP: Fortran front-end support for dispatch + adjust_args
  OpenMP: update documentation for dispatch and adjust_args

 gcc/builtin-types.def                         |   1 +
 gcc/c-family/c-attribs.cc                     |   2 +
 gcc/c-family/c-omp.cc                         |   4 +-
 gcc/c-family/c-pragma.cc                      |   1 +
 gcc/c-family/c-pragma.h                       |   3 +
 gcc/c/c-parser.cc                             | 522 +++++++++++++--
 gcc/c/c-typeck.cc                             |   2 +
 gcc/cp/decl.cc                                |   7 +
 gcc/cp/parser.cc                              | 631 ++++++++++++++++--
 gcc/cp/semantics.cc                           |  20 +
 gcc/fortran/dump-parse-tree.cc                |  17 +
 gcc/fortran/frontend-passes.cc                |   2 +
 gcc/fortran/gfortran.h                        |  11 +-
 gcc/fortran/match.h                           |   1 +
 gcc/fortran/openmp.cc                         | 192 +++++-
 gcc/fortran/parse.cc                          |  39 +-
 gcc/fortran/resolve.cc                        |   2 +
 gcc/fortran/st.cc                             |   1 +
 gcc/fortran/trans-decl.cc                     |   9 +-
 gcc/fortran/trans-openmp.cc                   | 135 ++++
 gcc/fortran/trans.cc                          |   1 +
 gcc/fortran/types.def                         |   1 +
 gcc/gimple-low.cc                             |   1 +
 gcc/gimple-pretty-print.cc                    |  33 +
 gcc/gimple-walk.cc                            |   1 +
 gcc/gimple.cc                                 |  20 +
 gcc/gimple.def                                |   5 +
 gcc/gimple.h                                  |  33 +-
 gcc/gimplify.cc                               | 421 +++++++++++-
 gcc/gimplify.h                                |   2 +
 gcc/omp-builtins.def                          |   6 +
 gcc/omp-expand.cc                             |  18 +
 gcc/omp-general.cc                            |  14 +-
 gcc/omp-low.cc                                |  35 +
 gcc/omp-selectors.h                           |   1 +
 .../c-c++-common/gomp/adjust-args-1.c         |  30 +
 .../c-c++-common/gomp/adjust-args-2.c         |  31 +
 .../c-c++-common/gomp/declare-variant-2.c     |   4 +-
 gcc/testsuite/c-c++-common/gomp/dispatch-1.c  |  65 ++
 gcc/testsuite/c-c++-common/gomp/dispatch-2.c  |  28 +
 gcc/testsuite/c-c++-common/gomp/dispatch-3.c  |  12 +
 gcc/testsuite/c-c++-common/gomp/dispatch-4.c  |  18 +
 gcc/testsuite/c-c++-common/gomp/dispatch-5.c  |  27 +
 gcc/testsuite/c-c++-common/gomp/dispatch-6.c  |  18 +
 gcc/testsuite/c-c++-common/gomp/dispatch-7.c  |  21 +
 gcc/testsuite/g++.dg/gomp/adjust-args-1.C     |  39 ++
 gcc/testsuite/g++.dg/gomp/adjust-args-2.C     |  51 ++
 gcc/testsuite/g++.dg/gomp/dispatch-1.C        |  53 ++
 gcc/testsuite/g++.dg/gomp/dispatch-2.C        |  62 ++
 gcc/testsuite/gcc.dg/gomp/adjust-args-1.c     |  32 +
 gcc/testsuite/gcc.dg/gomp/dispatch-1.c        |  53 ++
 .../gfortran.dg/gomp/adjust-args-1.f90        |  58 ++
 .../gfortran.dg/gomp/adjust-args-2.f90        |  18 +
 .../gfortran.dg/gomp/adjust-args-3.f90        |  27 +
 .../gfortran.dg/gomp/adjust-args-4.f90        |  58 ++
 .../gfortran.dg/gomp/adjust-args-5.f90        |  58 ++
 .../gfortran.dg/gomp/declare-variant-2.f90    |   6 +-
 .../gomp/declare-variant-21-aux.f90           |  25 +
 .../gfortran.dg/gomp/declare-variant-21.f90   |  22 +
 gcc/testsuite/gfortran.dg/gomp/dispatch-1.f90 |  77 +++
 gcc/testsuite/gfortran.dg/gomp/dispatch-2.f90 |  79 +++
 gcc/testsuite/gfortran.dg/gomp/dispatch-3.f90 |  39 ++
 gcc/testsuite/gfortran.dg/gomp/dispatch-4.f90 |  19 +
 gcc/testsuite/gfortran.dg/gomp/dispatch-5.f90 |  25 +
 gcc/testsuite/gfortran.dg/gomp/dispatch-6.f90 |  39 ++
 gcc/testsuite/gfortran.dg/gomp/dispatch-7.f90 |  26 +
 gcc/testsuite/gfortran.dg/gomp/dispatch-8.f90 |  33 +
 gcc/tree-core.h                               |   7 +
 gcc/tree-inline.cc                            |   7 +
 gcc/tree-pretty-print.cc                      |  21 +
 gcc/tree.cc                                   |   4 +
 gcc/tree.def                                  |   5 +
 gcc/tree.h                                    |   7 +
 libgomp/libgomp.texi                          |   4 +-
 .../libgomp.c-c++-common/dispatch-1.c         |  76 +++
 .../libgomp.c-c++-common/dispatch-2.c         |  84 +++
 76 files changed, 3421 insertions(+), 141 deletions(-)
 create mode 100644 gcc/testsuite/c-c++-common/gomp/adjust-args-1.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/adjust-args-2.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/dispatch-1.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/dispatch-2.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/dispatch-3.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/dispatch-4.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/dispatch-5.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/dispatch-6.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/dispatch-7.c
 create mode 100644 gcc/testsuite/g++.dg/gomp/adjust-args-1.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/adjust-args-2.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/dispatch-1.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/dispatch-2.C
 create mode 100644 gcc/testsuite/gcc.dg/gomp/adjust-args-1.c
 create mode 100644 gcc/testsuite/gcc.dg/gomp/dispatch-1.c
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/adjust-args-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/adjust-args-2.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/adjust-args-3.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/adjust-args-4.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/adjust-args-5.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/declare-variant-21-aux.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/declare-variant-21.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/dispatch-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/dispatch-2.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/dispatch-3.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/dispatch-4.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/dispatch-5.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/dispatch-6.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/dispatch-7.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/dispatch-8.f90
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/dispatch-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/dispatch-2.c