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 -- 2.45.2