gcc/include
Paul-Antoine Arras 3560ef45c0 OpenMP: 'interop' construct - add ME support + target-independent libgomp
This patch partially enables use of the OpenMP interop construct by adding
middle end support, mostly in the omplower pass, and in the target-independent
part of the libgomp runtime. It follows up on previous patches for C, C++ and
Fortran front ends support. The full interop feature requires another patch to
enable foreign runtime support in libgomp plugins.

gcc/ChangeLog:

	* builtin-types.def
	(BT_FN_VOID_INT_INT_PTR_PTR_PTR_INT_PTR_INT_PTR_UINT_PTR): New.
	* gimple-low.cc (lower_stmt): Handle GIMPLE_OMP_INTEROP.
	* gimple-pretty-print.cc (dump_gimple_omp_interop): New function.
	(pp_gimple_stmt_1): Handle GIMPLE_OMP_INTEROP.
	* gimple.cc (gimple_build_omp_interop): New function.
	(gimple_copy): Handle GIMPLE_OMP_INTEROP.
	* gimple.def (GIMPLE_OMP_INTEROP): Define.
	* gimple.h (gimple_build_omp_interop): Declare.
	(gimple_omp_interop_clauses): New function.
	(gimple_omp_interop_clauses_ptr): Likewise.
	(gimple_omp_interop_set_clauses): Likewise.
	(gimple_return_set_retval): Handle GIMPLE_OMP_INTEROP.
	* gimplify.cc (gimplify_scan_omp_clauses): Handle OMP_CLAUSE_INIT,
	OMP_CLAUSE_USE and OMP_CLAUSE_DESTROY.
	(gimplify_omp_interop): New function.
	(gimplify_expr): Replace sorry with call to gimplify_omp_interop.
	* omp-builtins.def (BUILT_IN_GOMP_INTEROP): Define.
	* omp-low.cc (scan_sharing_clauses): Handle OMP_CLAUSE_INIT,
	OMP_CLAUSE_USE and OMP_CLAUSE_DESTROY.
	(scan_omp_1_stmt): Handle GIMPLE_OMP_INTEROP.
	(lower_omp_interop_action_clauses): New function.
	(lower_omp_interop): Likewise.
	(lower_omp_1): Handle GIMPLE_OMP_INTEROP.

gcc/c/ChangeLog:

	* c-parser.cc (c_parser_omp_clause_destroy): Make addressable.
	(c_parser_omp_clause_init): Make addressable.

gcc/cp/ChangeLog:

	* parser.cc (cp_parser_omp_clause_init): Make addressable.

gcc/fortran/ChangeLog:

	* trans-openmp.cc (gfc_trans_omp_clauses): Make OMP_CLAUSE_DESTROY and
	OMP_CLAUSE_INIT addressable.
	* types.def (BT_FN_VOID_INT_INT_PTR_PTR_PTR_INT_PTR_INT_PTR_UINT_PTR):
	New.

include/ChangeLog:

	* gomp-constants.h (GOMP_DEVICE_DEFAULT_OMP_61, GOMP_INTEROP_TARGET,
	GOMP_INTEROP_TARGETSYNC, GOMP_INTEROP_FLAG_NOWAIT): Define.

libgomp/ChangeLog:

	* icv-device.c (omp_set_default_device): Check
	GOMP_DEVICE_DEFAULT_OMP_61.
	* libgomp-plugin.h (struct interop_obj_t): New.
	(enum gomp_interop_flag): New.
	(GOMP_OFFLOAD_interop): Declare.
	(GOMP_OFFLOAD_get_interop_int): Declare.
	(GOMP_OFFLOAD_get_interop_ptr): Declare.
	(GOMP_OFFLOAD_get_interop_str): Declare.
	(GOMP_OFFLOAD_get_interop_type_desc): Declare.
	* libgomp.h (_LIBGOMP_OMP_LOCK_DEFINED): Define.
	(struct gomp_device_descr): Add interop_func, get_interop_int_func,
	get_interop_ptr_func, get_interop_str_func, get_interop_type_desc_func.
	* libgomp.map: Add GOMP_interop.
	* libgomp_g.h (GOMP_interop): Declare.
	* target.c (resolve_device): Handle GOMP_DEVICE_DEFAULT_OMP_61.
	(omp_get_interop_int): Replace stub with actual implementation.
	(omp_get_interop_ptr): Likewise.
	(omp_get_interop_str): Likewise.
	(omp_get_interop_type_desc): Likewise.
	(struct interop_data_t): Define.
	(gomp_interop_internal): New function.
	(GOMP_interop): Likewise.
	(gomp_load_plugin_for_device): Load symbols for get_interop_int,
	get_interop_ptr, get_interop_str and get_interop_type_desc.
	* testsuite/libgomp.c-c++-common/interop-1.c: New test.

gcc/testsuite/ChangeLog:

	* c-c++-common/gomp/interop-1.c: Remove dg-prune-output "sorry".
	* c-c++-common/gomp/interop-2.c: Likewise.
	* c-c++-common/gomp/interop-3.c: Likewise.
	* c-c++-common/gomp/interop-4.c: Remove dg-message "not supported".
	* g++.dg/gomp/interop-5.C: Likewise.
	* gfortran.dg/gomp/interop-4.f90: Likewise.
	* c-c++-common/gomp/interop-5.c: New test.
	* gfortran.dg/gomp/interop-5.f90: New test.

Co-authored-by: Tobias Burnus <tburnus@baylibre.com>
(cherry picked from commit 99e2906ae2)
2025-03-22 00:28:19 +01:00
..
cuda OpenMP: Add get_device_from_uid/omp_get_uid_from_device routines 2025-01-23 22:35:31 +01:00
gdb Update copyright years. 2024-01-03 12:19:35 +01:00
COPYING
COPYING3
ChangeLog Update ChangeLog and version files for release 2024-08-01 08:18:20 +00:00
ChangeLog-9103
ChangeLog.jit
ChangeLog.omp OpenMP: 'interop' construct - add ME support + target-independent libgomp 2025-03-22 00:28:19 +01:00
ansidecl.h Update copyright years. 2024-01-03 12:19:35 +01:00
btf.h Update copyright years. 2024-01-03 12:19:35 +01:00
collectorAPI.h Update copyright years. 2024-01-03 12:19:35 +01:00
ctf.h Update copyright years. 2024-01-03 12:19:35 +01:00
demangle.h c++, demangle: Implement https://github.com/itanium-cxx-abi/cxx-abi/issues/148 non-proposal 2024-01-13 10:23:53 +01:00
dwarf2.def Update copyright years. 2024-01-03 12:19:35 +01:00
dwarf2.h Update copyright years. 2024-01-03 12:19:35 +01:00
dyn-string.h Update copyright years. 2024-01-03 12:19:35 +01:00
environ.h Update copyright years. 2024-01-03 12:19:35 +01:00
fibheap.h Update copyright years. 2024-01-03 12:19:35 +01: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 ME support + target-independent libgomp 2025-03-22 00:28:19 +01:00
hashtab.h Update copyright years. 2024-01-03 12:19:35 +01:00
hsa.h Import HSA header files from AMD 2020-12-09 11:10:40 +00:00
hsa_ext_amd.h Import HSA header files from AMD 2020-12-09 11:10:40 +00:00
hsa_ext_image.h Import HSA header files from AMD 2020-12-09 11:10:40 +00:00
leb128.h Update copyright years. 2024-01-03 12:19:35 +01:00
libcollector.h Update copyright years. 2024-01-03 12:19:35 +01:00
libfcollector.h Update copyright years. 2024-01-03 12:19:35 +01:00
libiberty.h Update copyright years. 2024-01-03 12:19:35 +01: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 Update copyright years. 2024-01-03 12:19:35 +01:00
plugin-api.h Update copyright years. 2024-01-03 12:19:35 +01:00
safe-ctype.h Update copyright years. 2024-01-03 12:19:35 +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 Update copyright years. 2024-01-03 12:19:35 +01:00
spincount.h Update copyright years. 2024-01-03 12:19:35 +01:00
splay-tree.h Update copyright years. 2024-01-03 12:19:35 +01:00
symcat.h Update copyright years. 2024-01-03 12:19:35 +01:00
timeval-utils.h Update copyright years. 2024-01-03 12:19:35 +01:00
vtv-change-permission.h Update copyright years. 2024-01-03 12:19:35 +01:00
xregex.h
xregex2.h Update copyright years. 2024-01-03 12:19:35 +01: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