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