On Mon, Aug 30, 2021 at 8:27 AM Jakub Jelinek via Gcc-patches <
gcc-patc...@gcc.gnu.org> wrote:
> 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.
>
The last new test fails on aarch64:
/gcc/testsuite/gfortran.dg/gomp/target-device-ancestor-4.f90:7:15: Error:
Sorry, 'reverse_offload' clause at (1) on REQUIRES directive is not yet
supported
compiler exited with status 1
PASS: gfortran.dg/gomp/target-device-ancestor-4.f90 -O (test for
errors, line 7)
XFAIL: gfortran.dg/gomp/target-device-ancestor-4.f90 -O sorry,
unimplemented: 'ancestor' not yet supported (test for warnings, line 9)
PASS: gfortran.dg/gomp/target-device-ancestor-4.f90 -O (test for excess
errors)
gfortran.dg/gomp/target-device-ancestor-4.f90 -O : dump file does not
exist
UNRESOLVED: gfortran.dg/gomp/target-device-ancestor-4.f90 -O
scan-tree-dump original "pragma omp target [^\n\r)]*device\\(ancestor:1\\)"
Can you fix it?
Thanks,
Christophe
> Ok, thanks.
>
> Jakub
>
>