[PATCH, OpenACC] Fortran "declare create"/allocate support for OpenACC

Jakub Jelinek jakub@redhat.com
Fri Dec 7 14:05:00 GMT 2018


On Thu, Oct 04, 2018 at 02:04:13PM +0100, Julian Brown wrote:
> 	gcc/
> 	* omp-low.c (scan_sharing_clauses): Update handling of OpenACC declare
> 	create, declare copyin and declare deviceptr to have local lifetimes.
> 	(convert_to_firstprivate_int): Handle pointer types.
> 	(convert_from_firstprivate_int): Likewise.  Create local storage for
> 	the values being pointed to.  Add new orig_type argument.
> 	(lower_omp_target): Handle GOMP_MAP_DECLARE_{ALLOCATE,DEALLOCATE}.
> 	Add orig_type argument to convert_from_firstprivate_int call.
> 	Allow pointer types with GOMP_MAP_FIRSTPRIVATE_INT.  Don't privatize
> 	firstprivate VLAs.
> 	* tree-pretty-print.c (dump_omp_clause): Handle
> 	GOMP_MAP_DECLARE_{ALLOCATE,DEALLOCATE}.
> 
> 	gcc/fortran/
> 	* gfortran.h (enum gfc_omp_map_op): Add OMP_MAP_DECLARE_ALLOCATE,
> 	OMP_MAP_DECLARE_DEALLOCATE.
> 	(gfc_omp_clauses): Add update_allocatable.
> 	* trans-array.c (gfc_array_allocate): Call
> 	gfc_trans_oacc_declare_allocate for decls that have oacc_declare_create
> 	attribute set.
> 	* trans-decl.c (add_attributes_to_decl): Enable lowering of OpenACC
> 	declare create, declare copyin and declare deviceptr clauses.
> 	(find_module_oacc_declare_clauses): Relax oacc_declare_create to
> 	OMP_MAP_ALLOC, and oacc_declare_copyin to OMP_MAP_TO, in order to
> 	match OpenACC 2.5 semantics.
> 	(finish_oacc_declare): Reset module_oacc_clauses before scanning each
> 	namespace.
> 	* trans-openmp.c (gfc_trans_omp_clauses): Use GOMP_MAP_ALWAYS_POINTER
> 	(for update directive) or GOMP_MAP_FIRSTPRIVATE_POINTER (otherwise) for
> 	allocatable scalar decls.  Handle OMP_MAP_DECLARE_{ALLOCATE,DEALLOCATE}
> 	clauses.
> 	(gfc_trans_oacc_executable_directive): Use GOMP_MAP_ALWAYS_POINTER
> 	for allocatable scalar data clauses inside acc update directives.
> 	(gfc_trans_oacc_declare_allocate): New function.
> 	* trans-stmt.c (gfc_trans_allocate): Call
> 	gfc_trans_oacc_declare_allocate for decls with oacc_declare_create
> 	attribute set.
> 	(gfc_trans_deallocate): Likewise.
> 	* trans.h (gfc_trans_oacc_declare_allocate): Declare.
> 
> 	gcc/testsuite/
> 	* gfortran.dg/goacc/declare-allocatable-1.f90: New test.
> 
> 	include/
> 	* gomp-constants.h (enum gomp_map_kind): Define
> 	GOMP_MAP_DECLARE_{ALLOCATE,DEALLOCATE} and GOMP_MAP_FLAG_SPECIAL_4.
> 
> 	libgomp/
> 	* oacc-mem.c (gomp_acc_declare_allocate): New function.
> 	* oacc-parallel.c (GOACC_enter_exit_data): Handle
> 	GOMP_MAP_DECLARE_{ALLOCATE,DEALLOCATE}.
> 	* testsuite/libgomp.oacc-fortran/allocatable-array.f90: New test.
> 	* testsuite/libgomp.oacc-fortran/allocatable-scalar.f90: New test.
> 	* testsuite/libgomp.oacc-fortran/declare-allocatable-1.f90: New test.
> 	* testsuite/libgomp.oacc-fortran/declare-allocatable-2.f90: New test.
> 	* testsuite/libgomp.oacc-fortran/declare-allocatable-3.f90: New test.
> 	* testsuite/libgomp.oacc-fortran/declare-allocatable-4.f90: New test.

If Thomas is ok with this, it is fine for me.

	Jakub



More information about the Fortran mailing list