aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.h
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2022-01-21 21:46:05 +0100
committerTom de Vries <tdevries@suse.de>2022-02-01 19:28:24 +0100
commite0451f93d9faa13495132f4e246e9bef30b51417 (patch)
tree22d002b52a5921f93d4d4e48c82280c3094f1216 /gcc/tree.h
parentca902055d056773bd0ca80f68bca4b20ad0e183f (diff)
downloadgcc-e0451f93d9faa13495132f4e246e9bef30b51417.zip
gcc-e0451f93d9faa13495132f4e246e9bef30b51417.tar.gz
gcc-e0451f93d9faa13495132f4e246e9bef30b51417.tar.bz2
[nvptx] Add some support for .local atomics
The ptx insn atom doesn't support local memory. In case of doing an atomic operation on local memory, we run into: ... operation not supported on global/shared address space ... This is the cuGetErrorString message for CUDA_ERROR_INVALID_ADDRESS_SPACE. The message is somewhat confusing given that actually the operation is not supported on local address space. Fix this by falling back on a non-atomic version when detecting a frame-related memory operand. This only solves some cases that are detected at compile-time. It does however fix the openacc private-atomic-* test-cases. Tested on x86_64 with nvptx accelerator. gcc/ChangeLog: 2022-01-27 Tom de Vries <tdevries@suse.de> * config/nvptx/nvptx.md (define_insn "atomic_compare_and_swap<mode>_1") (define_insn "atomic_exchange<mode>") (define_insn "atomic_fetch_add<mode>") (define_insn "atomic_fetch_addsf") (define_insn "atomic_fetch_<logic><mode>"): Output non-atomic version if memory operands is frame-relative. gcc/testsuite/ChangeLog: 2022-01-31 Tom de Vries <tdevries@suse.de> * gcc.target/nvptx/stack-atomics-run.c: New test. libgomp/ChangeLog: 2022-01-27 Tom de Vries <tdevries@suse.de> * testsuite/libgomp.oacc-c-c++-common/private-atomic-1.c: Remove PR83812 workaround. * testsuite/libgomp.oacc-fortran/private-atomic-1-vector.f90: Same. * testsuite/libgomp.oacc-fortran/private-atomic-1-worker.f90: Same.
Diffstat (limited to 'gcc/tree.h')
0 files changed, 0 insertions, 0 deletions