On Tue, Jun 01, 2021 at 11:53:12AM +0200, Tobias Burnus wrote: > Fortran/OpenMP: Support (parallel) master taskloop (simd) [PR99928] > > PR middle-end/99928 > > gcc/fortran/ChangeLog: > > * dump-parse-tree.c (show_omp_node, show_code_node): Handle > (parallel) master taskloop (simd). > * frontend-passes.c (gfc_code_walker): Set in_omp_workshare > to false for parallel master taskloop (simd). > * gfortran.h (enum gfc_statement): > Add ST_OMP_(END_)(PARALLEL_)MASTER_TASKLOOP(_SIMD). > (enum gfc_exec_op): EXEC_OMP_(PARALLEL_)MASTER_TASKLOOP(_SIMD). > * match.h (gfc_match_omp_master_taskloop, > gfc_match_omp_master_taskloop_simd, > gfc_match_omp_parallel_master_taskloop, > gfc_match_omp_parallel_master_taskloop_simd): New prototype. > * openmp.c (gfc_match_omp_parallel_master_taskloop, > gfc_match_omp_parallel_master_taskloop_simd, > gfc_match_omp_master_taskloop, > gfc_match_omp_master_taskloop_simd): New. > (gfc_match_omp_taskloop_simd): Permit 'reduction' clause. > (resolve_omp_clauses): Handle new combined directives; remove > inscan-reduction check to reduce multiple errors; add > task-reduction error for 'taskloop simd'. > (gfc_resolve_omp_parallel_blocks, > resolve_omp_do, omp_code_to_statement, > gfc_resolve_omp_directive): Handle new combined constructs. > * parse.c (decode_omp_directive, next_statement, > gfc_ascii_statement, parse_omp_do, parse_omp_structured_block, > parse_executable): Likewise. > * resolve.c (gfc_resolve_blocks, gfc_resolve_code): Likewise. > * st.c (gfc_free_statement): Likewise. > * trans.c (trans_code): Likewise. > * trans-openmp.c (gfc_split_omp_clauses, > gfc_trans_omp_directive): Likewise. > (gfc_trans_omp_parallel_master): Move after > gfc_trans_omp_master_taskloop; > handle parallel master taskloop (simd) as well. > (gfc_trans_omp_taskloop): Take gfc_exec_op as arg. > (gfc_trans_omp_master_taskloop): New. > > gcc/testsuite/ChangeLog: > > * gfortran.dg/gomp/reduction5.f90: Remove dg-error the issue is > now diagnosed with error output less.
The above sentence is weird. I'd expect semicolon or comma before the and less error output instead of error output less. > * gfortran.dg/gomp/scan-1.f90: Likewise. > * gfortran.dg/gomp/pr99928-3.f90: New test. > * gfortran.dg/gomp/taskloop-1.f90: New test. Otherwise LGTM. Jakub