gcc/include
Tobias Burnus 8f0c8e577a OpenMP: 'interop' construct - add C/C++ parser support, improve Fortran parsing
Add middle end support for the 'interop' directive and the 'init', 'use',
and 'destroy' clauses - but fail with a sorry, unimplemented in gimplify.cc.

For Fortran, generate the tree code, update the internal representation,
add some more diagnostic checks and update for newer specification changes
('fr' only takes a single value, but it integer expressions are permitted
again [like with the old syntax] not only constant identifiers).

For C and C++, this patch adds the full parser support for 'interop'.

Still missing is actually handling the directive in the middle end and
in libgomp.

The GOMP_INTEROP_IFR_* internal values have been changed to have space
for vendor specific values that are adjacent to the existing values
but negative, if needed.

gcc/c-family/ChangeLog:

	* c-common.h (enum c_omp_region_type): Add C_ORT_INTEROP
	and C_ORT_OMP_INTEROP.
	(c_omp_interop_t_p): New prototype.
	* c-omp.cc (c_omp_interop_t_p): Check whether the type is
	omp_interop_t.
	(c_omp_directives): Uncomment 'interop'.
	* c-pragma.cc (omp_pragmas): Add 'interop'.
	* c-pragma.h (enum pragma_kind): Add PRAGMA_OMP_INTEROP.
	(enum pragma_omp_clause): Add init, use, and destroy clauses.

gcc/c/ChangeLog:

	* c-parser.cc (INCLUDE_STRING): Define.
	(c_parser_pragma): Handle 'interop' directive.
	(c_parser_omp_clause_name): Handle init, use, and destroy clauses.
	(c_parser_omp_all_clauses): Likewise; use C_ORT_OMP_INTEROP, if
	'use' is permitted, for c_finish_omp_clauses.
	(c_parser_omp_clause_destroy, c_parser_omp_modifier_prefer_type,
	c_parser_omp_clause_init, c_parser_omp_clause_use,
	OMP_INTEROP_CLAUSE_MASK, c_parser_omp_interop): New.
	* c-typeck.cc (c_finish_omp_clauses): Add missing OPT_Wopenmp to
	a warning; handle new clauses.

gcc/cp/ChangeLog:

	* parser.cc (INCLUDE_STRING): Define.
	(cp_parser_omp_clause_name): Handle init, use, and destroy clauses.
	(cp_parser_omp_all_clauses): Likewise; use C_ORT_OMP_INTEROP, if
	'use' is permitted, for c_finish_omp_clauses.
	(cp_parser_omp_modifier_prefer_type, cp_parser_omp_clause_init,
	OMP_INTEROP_CLAUSE_MASK, cp_parser_omp_interop): New.
	(cp_parser_pragma): Handle 'interop' directive.
	* pt.cc (tsubst_omp_clauses): Handle init, use, and destroy clauses.
	(tsubst_stmt): Handle OMP_INTEROP.
	* semantics.cc (cp_omp_init_prefer_type_update): New.
	(finish_omp_clauses): Handle  init, use, and destroy clauses
	and add clause check for 'depend' on 'interop'.

gcc/fortran/ChangeLog:

	* gfortran.h (gfc_omp_namelist): Cleanup interop internal
	representation.
	* dump-parse-tree.cc (show_omp_namelist): Update for changed
	internal representation.
	* match.cc (gfc_free_omp_namelist): Likewise.
	* openmp.cc (gfc_match_omp_prefer_type, gfc_match_omp_init):
	Likewise; also handle some corner cases better and update for
	newer 6.0 changes related to 'fr'.
	(resolve_omp_clauses): Add type-check for interop variables.
	* trans-openmp.cc (gfc_trans_omp_clauses): Handle init, use
	and destroy clauses.
	(gfc_trans_openmp_interop): New.
	(gfc_trans_omp_directive): Call it.

gcc/ChangeLog:

	* gimplify.cc (gimplify_expr): Handle OMP_INTEROP by printing
	"sorry, uninplemented".
	* omp-api.h (omp_get_fr_id_from_name): Change return type to
	'char'.
	* omp-general.cc (omp_get_fr_id_from_name): Likewise; return
	GOMP_INTEROP_IFR_UNKNOWN not 0 if not found.
	(omp_get_name_from_fr_id): Return "<unknown>" not NULL
	if not found (used for dumps).
	* tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_DESTROY,
	OMP_CLAUSE_USE, and OMP_CLAUSE_INIT.
	* tree-pretty-print.cc (dump_omp_init_prefer_type): New.
	(dump_omp_clause): Handle init, use and destroy clauses.
	(dump_generic_node): Handle interop directive.
	* tree.cc (omp_clause_num_ops, omp_clause_code_name): Add new
	init/use/destroy clauses.
	* tree.def (OACC_LOOP): Fix comment.
	(OMP_INTEROP): Add.
	* tree.h (OMP_INTEROP_CLAUSES, OMP_CLAUSE_INIT_TARGET,
	OMP_CLAUSE_INIT_TARGETSYNC, OMP_CLAUSE_INIT_PREFER_TYPE): New.

include/ChangeLog:

	* gomp-constants.h (GOMP_INTEROP_IFR_NONE): Rename ...
	(GOMP_INTEROP_IFR_UNKNOWN): ... to this. And change value.
	(GOMP_INTEROP_IFR_SEPARATOR): Likewise.

gcc/testsuite/ChangeLog:

	* gfortran.dg/gomp/interop-1.f90: Update for parser changes,
	spec changes and add new tests.
	* gfortran.dg/gomp/interop-2.f90: Likewise.
	* gfortran.dg/gomp/interop-3.f90: Likewise.
	* c-c++-common/gomp/interop-1.c: New test.
	* c-c++-common/gomp/interop-2.c: New test.
	* c-c++-common/gomp/interop-3.c: New test.
	* c-c++-common/gomp/interop-4.c: New test.
	* g++.dg/gomp/interop-5.C: New test.
	* gfortran.dg/gomp/interop-4.f90: New test.
2024-11-22 15:30:53 +01:00
..
cuda OpenMP: Add get_device_from_uid/omp_get_uid_from_device routines 2024-09-20 09:25:33 +02:00
gdb Update copyright years. 2024-01-03 12:19:35 +01:00
ansidecl.h Update copyright years. 2024-01-03 12:19:35 +01:00
btf.h btf: Protect BTF_KIND_INFO against invalid kind 2024-08-09 08:55:23 -07:00
ChangeLog Daily bump. 2024-11-22 00:20:01 +00:00
ChangeLog-9103
ChangeLog.jit
collectorAPI.h Update copyright years. 2024-01-03 12:19:35 +01:00
COPYING
COPYING3
ctf.h Update copyright years. 2024-01-03 12:19:35 +01:00
demangle.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
dwarf2.def Update copyright years. 2024-01-03 12:19:35 +01:00
dwarf2.h include: Add new post-DWARF 5 DW_LANG_* enumerators 2024-11-21 10:17:03 +01:00
dyn-string.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
environ.h Update copyright years. 2024-01-03 12:19:35 +01:00
fibheap.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
filenames.h Update copyright years. 2024-01-03 12:19:35 +01:00
floatformat.h Update copyright years. 2024-01-03 12:19:35 +01:00
fnmatch.h Update copyright years. 2024-01-03 12:19:35 +01:00
gcc-c-fe.def Fix PR libcc1/113977 2024-02-29 08:50:06 -07:00
gcc-c-interface.h Fix PR libcc1/113977 2024-02-29 08:50:06 -07:00
gcc-cp-fe.def Update copyright years. 2024-01-03 12:19:35 +01:00
gcc-cp-interface.h Fix PR libcc1/113977 2024-02-29 08:50:06 -07:00
gcc-interface.h Update copyright years. 2024-01-03 12:19:35 +01:00
getopt.h Update copyright years. 2024-01-03 12:19:35 +01:00
gomp-constants.h OpenMP: 'interop' construct - add C/C++ parser support, improve Fortran parsing 2024-11-22 15:30:53 +01:00
hashtab.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
hsa_ext_amd.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
hsa_ext_image.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
hsa.h libgomp: Enable USM for AMD APUs and MI200 devices 2024-05-29 15:29:06 +02:00
leb128.h Update copyright years. 2024-01-03 12:19:35 +01:00
libcollector.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
libfcollector.h Update copyright years. 2024-01-03 12:19:35 +01:00
libiberty.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
longlong.h [committed] Adding missing prototype for __clzhi2 to xstormy port 2024-01-09 10:21:28 -07:00
lto-symtab.h Update copyright years. 2024-01-03 12:19:35 +01:00
md5.h Update copyright years. 2024-01-03 12:19:35 +01:00
objalloc.h Update copyright years. 2024-01-03 12:19:35 +01:00
obstack.h Update copyright years. 2024-01-03 12:19:35 +01:00
partition.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
plugin-api.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
safe-ctype.h libiberty: Fix comment typos 2024-10-31 22:07:18 +01:00
sha1.h Update copyright years. 2024-01-03 12:19:35 +01:00
simple-object.h Update copyright years. 2024-01-03 12:19:35 +01:00
sort.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
spincount.h Update copyright years. 2024-01-03 12:19:35 +01:00
splay-tree.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
symcat.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
timeval-utils.h Update copyright years. 2024-01-03 12:19:35 +01:00
vtv-change-permission.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
xregex2.h Update copyright years. 2024-01-03 12:19:35 +01:00
xregex.h non-gcc: Remove trailing whitespace 2024-10-25 10:03:17 +02:00
xtensa-config.h Update copyright years. 2024-01-03 12:19:35 +01:00
xtensa-dynconfig.h Update copyright years. 2024-01-03 12:19:35 +01:00