diff options
author | Tom de Vries <tdevries@suse.de> | 2022-01-21 21:46:05 +0100 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2022-02-01 19:28:24 +0100 |
commit | e0451f93d9faa13495132f4e246e9bef30b51417 (patch) | |
tree | 22d002b52a5921f93d4d4e48c82280c3094f1216 /gcc/tree.h | |
parent | ca902055d056773bd0ca80f68bca4b20ad0e183f (diff) | |
download | gcc-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