[Patch v2] C, C++, Fortran, OpenMP: Add support for device-modifiers for 'omp target device'

Jakub Jelinek jakub@redhat.com
Mon Aug 30 06:26:37 GMT 2021


On Wed, Aug 25, 2021 at 12:14:09PM +0200, Marcel Vollweiler wrote:
> Add support for device-modifiers for 'omp target device'.
> 
> 'device_num' and 'ancestor' are now parsed on target device constructs for C,
> C++, and Fortran (see OpenMP specification 5.0, p. 170). When 'ancestor' is
>  used, then 'sorry, not supported' is output. Moreover, the restrictions for
> 'ancestor' are implemented (see OpenMP specification 5.0, p. 174f).
> 
> gcc/c/ChangeLog:
> 
> 	* c-parser.c (c_parser_omp_clause_device): Parse device-modifiers 'device_num'
> 	and 'ancestor' in 'target device' clauses.
> 
> gcc/cp/ChangeLog:
> 
> 	* parser.c (cp_parser_omp_clause_device): Parse device-modifiers 'device_num'
> 	and 'ancestor' in 'target device' clauses.
> 	* semantics.c (finish_omp_clauses): Error handling. Constant device ids must
> 	evaluate to '1' if 'ancestor' is used.
> 
> gcc/fortran/ChangeLog:
> 
> 	* gfortran.h: Add variable for 'ancestor' in struct gfc_omp_clauses.
> 	* openmp.c (gfc_match_omp_clauses): Parse device-modifiers 'device_num'
>         and 'ancestor' in 'target device' clauses.
> 	* trans-openmp.c (gfc_trans_omp_clauses): Set OMP_CLAUSE_DEVICE_ANCESTOR.
> 
> gcc/ChangeLog:
> 
> 	* gimplify.c (gimplify_scan_omp_clauses): Error handling. 'ancestor' only
> 	allowed on target constructs and only with particular other clauses.
> 	* omp-expand.c (expand_omp_target): Output of 'sorry, not supported' if
> 	'ancestor' is used.
> 	* omp-low.c (check_omp_nesting_restrictions): Error handling. No nested OpenMP
>         structs when 'ancestor' is used.
> 	(scan_omp_1_stmt): No usage of OpenMP runtime routines in a target region when
> 	'ancestor' is used.
> 	* tree-pretty-print.c (dump_omp_clause): Append 'ancestor'.
> 	* tree.h (OMP_CLAUSE_DEVICE_ANCESTOR): Define macro.
> 
> gcc/testsuite/ChangeLog:
> 
> 	* c-c++-common/gomp/target-device-1.c: New test.
> 	* c-c++-common/gomp/target-device-2.c: New test.
> 	* c-c++-common/gomp/target-device-ancestor-1.c: New test.
> 	* c-c++-common/gomp/target-device-ancestor-2.c: New test.
> 	* c-c++-common/gomp/target-device-ancestor-3.c: New test.
> 	* c-c++-common/gomp/target-device-ancestor-4.c: New test.
> 	* gfortran.dg/gomp/target-device-1.f90: New test.
> 	* gfortran.dg/gomp/target-device-2.f90: New test.
> 	* gfortran.dg/gomp/target-device-ancestor-1.f90: New test.
> 	* gfortran.dg/gomp/target-device-ancestor-2.f90: New test.
> 	* gfortran.dg/gomp/target-device-ancestor-3.f90: New test.
> 	* gfortran.dg/gomp/target-device-ancestor-4.f90: New test.

Ok, thanks.

	Jakub



More information about the Gcc-patches mailing list