]> git.ipfire.org Git - thirdparty/gcc.git/commit
OpenMP: Enable has_device_addr clause for 'dispatch' in C/C++
authorTobias Burnus <tburnus@baylibre.com>
Thu, 12 Dec 2024 17:58:59 +0000 (18:58 +0100)
committerTobias Burnus <tburnus@baylibre.com>
Thu, 12 Dec 2024 17:58:59 +0000 (18:58 +0100)
commit2cbb2408a830a63fbd901a4da3bfd341cec4b6ef
treef981a207e2c1b3619298c66bc1855473949e2709
parentd4330ff9bc9a2995e79d88b09a2ee76673167661
OpenMP: Enable has_device_addr clause for 'dispatch' in C/C++

The 'has_device_addr' of 'dispatch' has to be seen in conjunction with the
'need_device_addr' modifier to the 'adjust_args' clause of 'declare variant'.
As the latter has not yet been implemented, 'has_device_addr' has no real
effect. However, to prepare for 'need_device_addr' and as service to the user:

For C, where 'need_device_addr' is not permitted (contrary to C++ and Fortran),
a note is output when then the user tries to use it (alongside the existing
error that either 'nothing' or 'need_device_ptr' was expected).

And, on the ME side, is is lightly handled by diagnosing when - for the
same argument - there is a mismatch between the variant's adjust_args
'need_device_ptr' modifier and dispatch having an 'has_device_addr' clause
(or likewise for need_device_addr with is_device_ptr) as, according to the
spec, those are completely separate.
Thus, 'dispatch' will still do the host to device pointer conversion for
a 'need_device_ptr' argument, even if it appeared in a 'has_device_addr'
clause.

gcc/c/ChangeLog:

* c-parser.cc (OMP_DISPATCH_CLAUSE_MASK): Add has_device_addr clause.
(c_finish_omp_declare_variant): Add an 'inform' telling the user that
'need_device_addr' is invalid for C.

gcc/cp/ChangeLog:

* parser.cc (OMP_DISPATCH_CLAUSE_MASK): Add has_device_addr clause.

gcc/ChangeLog:

* gimplify.cc (gimplify_call_expr): When handling OpenMP's dispatch,
add diagnostic when there is a ptr vs. addr mismatch between
need_device_{addr,ptr} and {is,has}_device_{ptr,addr}, respectively.

gcc/testsuite/ChangeLog:

* c-c++-common/gomp/adjust-args-3.c: New test.
* gcc.dg/gomp/adjust-args-2.c: New test.
gcc/c/c-parser.cc
gcc/cp/parser.cc
gcc/gimplify.cc
gcc/testsuite/c-c++-common/gomp/adjust-args-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/gomp/adjust-args-2.c [new file with mode: 0644]