mbox series

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

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

Message

Paul-Antoine Arras Oct. 2, 2024, 4:55 p.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-August/659719.html

Compared to v3, this new iteration handles Tobias's comments on the ME patch
(https://gcc.gnu.org/pipermail/gcc-patches/2024-August/660921.html). In 
particular, it defines and uses a new internal function (namely 
IFN_GOMP_DISPATCH) to allow the middle end to more easily and accurately find 
the dispatch call. This is important when the single function call we are 
interested in is sandwiched in a sequence of pre- and post-call statements, 
or when the same function is call several times within the dispatch body.


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                             | 536 +++++++++++++--
 gcc/c/c-typeck.cc                             |   2 +
 gcc/cp/decl.cc                                |   7 +
 gcc/cp/parser.cc                              | 644 ++++++++++++++++--
 gcc/cp/semantics.cc                           |  20 +
 gcc/fortran/dump-parse-tree.cc                |  17 +
 gcc/fortran/frontend-passes.cc                |   2 +
 gcc/fortran/gfortran.h                        |  12 +-
 gcc/fortran/match.h                           |   1 +
 gcc/fortran/openmp.cc                         | 195 +++++-
 gcc/fortran/parse.cc                          |  51 +-
 gcc/fortran/resolve.cc                        |   2 +
 gcc/fortran/st.cc                             |   1 +
 gcc/fortran/trans-decl.cc                     |   9 +-
 gcc/fortran/trans-openmp.cc                   | 197 ++++++
 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                               | 484 ++++++++++++-
 gcc/gimplify.h                                |   1 +
 gcc/internal-fn.cc                            |   8 +
 gcc/internal-fn.def                           |   1 +
 gcc/omp-builtins.def                          |   6 +
 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  |  71 ++
 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  |  34 +
 gcc/testsuite/c-c++-common/gomp/dispatch-6.c  |  18 +
 gcc/testsuite/c-c++-common/gomp/dispatch-7.c  |  21 +
 gcc/testsuite/c-c++-common/gomp/dispatch-8.c  |  63 ++
 gcc/testsuite/c-c++-common/gomp/dispatch-9.c  |  17 +
 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/g++.dg/gomp/dispatch-3.C        |  17 +
 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 +++
 .../gfortran.dg/gomp/dispatch-10.f90          |  21 +
 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/testsuite/gfortran.dg/gomp/dispatch-9.f90 |  24 +
 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 +++
 82 files changed, 3723 insertions(+), 152 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/c-c++-common/gomp/dispatch-8.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/dispatch-9.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/g++.dg/gomp/dispatch-3.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-10.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 gcc/testsuite/gfortran.dg/gomp/dispatch-9.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