I realized last week that the previous version of this patch series that I
posted on Nov 15:

https://gcc.gnu.org/pipermail/gcc-patches/2024-November/669053.html

collided with Paul-Antoine's "dispatch" construct patches that were
pushed a few days later, and no longer applied cleanly.  I've prepared
this new version to fix up the merge conflicts.  Only part 2 of the
series has any substantive code changes (mainly in gimplify_omp_dispatch
and gimplify_call_expr), and there is a new testcase added in part 7 to
test the intersection of dynamic selectors and the dispatch construct.

I still hope this functionality can make it into GCC 15.

-Sandra


Sandra Loosemore (10):
  OpenMP: New tree nodes for metadirective and dynamic selector support.
  OpenMP: Re-work and extend context selector resolution
  OpenMP: Remove dead code from declare variant reimplementation
  OpenMP: Robustify C front end handling of attribute-syntax pragmas
  OpenMP: Add C support for metadirectives and dynamic selectors.
  OpenMP: C++ support for metadirectives and dynamic selectors.
  OpenMP: Shared metadirective/dynamic selector tests for C and C++
  OpenMP: Fortran support for metadirectives and dynamic selectors
  OpenMP: Update "declare target"/OpenMP context interaction
  OpenMP: Update documentation of metadirective implementation status.

 gcc/Makefile.in                               |    2 +-
 gcc/c-family/c-attribs.cc                     |    2 -
 gcc/c-family/c-common.h                       |    4 +-
 gcc/c-family/c-gimplify.cc                    |   27 +
 gcc/c-family/c-omp.cc                         |   60 +-
 gcc/c-family/c-pragma.cc                      |    1 +
 gcc/c-family/c-pragma.h                       |    1 +
 gcc/c/c-decl.cc                               |    8 +-
 gcc/c/c-parser.cc                             |  537 +++-
 gcc/cgraph.cc                                 |    2 -
 gcc/cgraph.h                                  |   12 +-
 gcc/cgraphclones.cc                           |    2 +-
 gcc/cp/cp-tree.h                              |    2 +
 gcc/cp/decl.cc                                |    2 +-
 gcc/cp/decl2.cc                               |    9 +-
 gcc/cp/parser.cc                              |  542 +++-
 gcc/cp/parser.h                               |    6 +
 gcc/cp/pt.cc                                  |  126 +
 gcc/cp/semantics.cc                           |    3 +-
 gcc/doc/generic.texi                          |   63 +
 gcc/fold-const.cc                             |    2 +
 gcc/fortran/decl.cc                           |   29 +
 gcc/fortran/dump-parse-tree.cc                |   20 +
 gcc/fortran/gfortran.h                        |   21 +-
 gcc/fortran/io.cc                             |    2 +-
 gcc/fortran/match.h                           |    2 +
 gcc/fortran/openmp.cc                         |  302 ++-
 gcc/fortran/parse.cc                          |  582 +++--
 gcc/fortran/parse.h                           |    8 +-
 gcc/fortran/resolve.cc                        |    6 +
 gcc/fortran/st.cc                             |    4 +
 gcc/fortran/symbol.cc                         |   25 +-
 gcc/fortran/trans-decl.cc                     |    5 +-
 gcc/fortran/trans-openmp.cc                   |  238 +-
 gcc/fortran/trans-stmt.h                      |    1 +
 gcc/fortran/trans.cc                          |    1 +
 gcc/gimple-expr.cc                            |    5 +
 gcc/gimple.cc                                 |    4 +-
 gcc/gimplify.cc                               |  657 ++++-
 gcc/gimplify.h                                |    2 +-
 gcc/ipa-free-lang-data.cc                     |    2 +-
 gcc/ipa.cc                                    |    3 -
 gcc/lto-cgraph.cc                             |   12 +-
 gcc/lto-streamer-out.cc                       |    3 +-
 gcc/lto-streamer.h                            |    6 -
 gcc/lto/lto-partition.cc                      |    5 +-
 gcc/omp-expand.cc                             |    6 +-
 gcc/omp-general.cc                            | 2203 +++++++++--------
 gcc/omp-general.h                             |   44 +-
 gcc/omp-low.cc                                |   18 +
 gcc/omp-offload.cc                            |   97 +-
 gcc/omp-simd-clone.cc                         |    4 +-
 gcc/passes.cc                                 |    3 +-
 gcc/symtab.cc                                 |    2 +-
 .../c-c++-common/gomp/attrs-metadirective-1.c |   47 +
 .../c-c++-common/gomp/attrs-metadirective-2.c |   76 +
 .../c-c++-common/gomp/attrs-metadirective-3.c |   24 +
 .../c-c++-common/gomp/attrs-metadirective-4.c |   43 +
 .../c-c++-common/gomp/attrs-metadirective-5.c |   26 +
 .../c-c++-common/gomp/attrs-metadirective-6.c |   33 +
 .../c-c++-common/gomp/attrs-metadirective-7.c |   37 +
 .../c-c++-common/gomp/attrs-metadirective-8.c |   18 +
 .../gomp/declare-target-indirect-2.c          |   10 +-
 .../c-c++-common/gomp/declare-variant-12.c    |   14 +-
 .../c-c++-common/gomp/declare-variant-13.c    |    6 +-
 .../c-c++-common/gomp/declare-variant-14.c    |    2 +-
 .../c-c++-common/gomp/declare-variant-2.c     |    4 +-
 .../c-c++-common/gomp/declare-variant-8.c     |    4 +-
 .../gomp/declare-variant-arg-exprs.c          |   29 +
 .../gomp/declare-variant-dynamic-1.c          |   26 +
 .../gomp/declare-variant-dynamic-2.c          |   30 +
 .../c-c++-common/gomp/metadirective-1.c       |   58 +
 .../c-c++-common/gomp/metadirective-2.c       |   75 +
 .../c-c++-common/gomp/metadirective-3.c       |   23 +
 .../c-c++-common/gomp/metadirective-4.c       |   42 +
 .../c-c++-common/gomp/metadirective-5.c       |   25 +
 .../c-c++-common/gomp/metadirective-6.c       |   32 +
 .../c-c++-common/gomp/metadirective-7.c       |   36 +
 .../c-c++-common/gomp/metadirective-8.c       |   17 +
 .../gomp/metadirective-construct.c            |  178 ++
 .../c-c++-common/gomp/metadirective-device.c  |  149 ++
 .../gomp/metadirective-no-score.c             |   95 +
 .../gomp/metadirective-target-device.c        |  149 ++
 .../c-c++-common/gomp/reverse-offload-1.c     |    2 +-
 .../g++.dg/gomp/declare-variant-class-1.C     |   32 +
 .../g++.dg/gomp/declare-variant-class-2.C     |   37 +
 .../g++.dg/gomp/metadirective-template-1.C    |   74 +
 gcc/testsuite/gcc.dg/gomp/metadirective-1.c   |   15 +
 .../gfortran.dg/gomp/declare-variant-12.f90   |   14 +-
 .../gfortran.dg/gomp/declare-variant-13.f90   |   25 +-
 .../gfortran.dg/gomp/declare-variant-14.f90   |   28 +-
 .../gfortran.dg/gomp/declare-variant-8.f90    |   12 +-
 .../gfortran.dg/gomp/metadirective-1.f90      |   80 +
 .../gfortran.dg/gomp/metadirective-10.f90     |   40 +
 .../gfortran.dg/gomp/metadirective-11.f90     |   33 +
 .../gfortran.dg/gomp/metadirective-12.f90     |   18 +
 .../gfortran.dg/gomp/metadirective-2.f90      |   62 +
 .../gfortran.dg/gomp/metadirective-3.f90      |   25 +
 .../gfortran.dg/gomp/metadirective-4.f90      |   39 +
 .../gfortran.dg/gomp/metadirective-5.f90      |   30 +
 .../gfortran.dg/gomp/metadirective-6.f90      |   31 +
 .../gfortran.dg/gomp/metadirective-7.f90      |   37 +
 .../gfortran.dg/gomp/metadirective-8.f90      |   22 +
 .../gfortran.dg/gomp/metadirective-9.f90      |   30 +
 .../gomp/metadirective-construct.f90          |  260 ++
 .../gomp/metadirective-no-score.f90           |  122 +
 gcc/testsuite/gfortran.dg/gomp/pure-1.f90     |    7 +
 gcc/testsuite/gfortran.dg/gomp/pure-2.f90     |    8 -
 gcc/tree-cfg.cc                               |    1 +
 gcc/tree-inline.cc                            |   15 +-
 gcc/tree-pretty-print.cc                      |   81 +
 gcc/tree-ssa-operands.cc                      |    4 +
 gcc/tree.def                                  |   34 +
 gcc/tree.h                                    |   22 +
 libgomp/libgomp.texi                          |   21 +-
 .../libgomp.c++/metadirective-template-1.C    |   39 +
 .../libgomp.c++/metadirective-template-2.C    |   43 +
 .../libgomp.c++/metadirective-template-3.C    |   43 +
 .../libgomp.c-c++-common/dispatch-3.c         |  100 +
 .../libgomp.c-c++-common/metadirective-1.c    |   37 +
 .../libgomp.c-c++-common/metadirective-2.c    |   43 +
 .../libgomp.c-c++-common/metadirective-3.c    |   36 +
 .../libgomp.c-c++-common/metadirective-4.c    |   54 +
 .../libgomp.c-c++-common/metadirective-5.c    |   48 +
 .../metadirective-late-1.c                    |   66 +
 .../metadirective-late-2.c                    |   66 +
 .../metadirective-target-device.c             |   76 +
 .../libgomp.fortran/metadirective-1.f90       |   61 +
 .../libgomp.fortran/metadirective-2.f90       |   40 +
 .../libgomp.fortran/metadirective-3.f90       |   29 +
 .../libgomp.fortran/metadirective-4.f90       |   46 +
 .../libgomp.fortran/metadirective-5.f90       |   44 +
 .../libgomp.fortran/metadirective-6.f90       |   58 +
 133 files changed, 7560 insertions(+), 1673 deletions(-)
 create mode 100644 gcc/testsuite/c-c++-common/gomp/attrs-metadirective-1.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/attrs-metadirective-2.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/attrs-metadirective-3.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/attrs-metadirective-4.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/attrs-metadirective-5.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/attrs-metadirective-6.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/attrs-metadirective-7.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/attrs-metadirective-8.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/declare-variant-arg-exprs.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/declare-variant-dynamic-1.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/declare-variant-dynamic-2.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/metadirective-1.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/metadirective-2.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/metadirective-3.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/metadirective-4.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/metadirective-5.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/metadirective-6.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/metadirective-7.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/metadirective-8.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/metadirective-construct.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/metadirective-device.c
 create mode 100644 gcc/testsuite/c-c++-common/gomp/metadirective-no-score.c
 create mode 100644 
gcc/testsuite/c-c++-common/gomp/metadirective-target-device.c
 create mode 100644 gcc/testsuite/g++.dg/gomp/declare-variant-class-1.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/declare-variant-class-2.C
 create mode 100644 gcc/testsuite/g++.dg/gomp/metadirective-template-1.C
 create mode 100644 gcc/testsuite/gcc.dg/gomp/metadirective-1.c
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-1.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-10.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-11.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-12.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-2.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-3.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-4.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-5.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-6.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-7.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-8.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-9.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-construct.f90
 create mode 100644 gcc/testsuite/gfortran.dg/gomp/metadirective-no-score.f90
 create mode 100644 libgomp/testsuite/libgomp.c++/metadirective-template-1.C
 create mode 100644 libgomp/testsuite/libgomp.c++/metadirective-template-2.C
 create mode 100644 libgomp/testsuite/libgomp.c++/metadirective-template-3.C
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/dispatch-3.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/metadirective-1.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/metadirective-2.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/metadirective-3.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/metadirective-4.c
 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/metadirective-5.c
 create mode 100644 
libgomp/testsuite/libgomp.c-c++-common/metadirective-late-1.c
 create mode 100644 
libgomp/testsuite/libgomp.c-c++-common/metadirective-late-2.c
 create mode 100644 
libgomp/testsuite/libgomp.c-c++-common/metadirective-target-device.c
 create mode 100644 libgomp/testsuite/libgomp.fortran/metadirective-1.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/metadirective-2.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/metadirective-3.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/metadirective-4.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/metadirective-5.f90
 create mode 100644 libgomp/testsuite/libgomp.fortran/metadirective-6.f90

-- 
2.25.1

Reply via email to