[nvptx] Use _ as destination operand of atom.exch
authorTom de Vries <tdevries@suse.de>
Tue, 15 Feb 2022 13:36:26 +0000 (14:36 +0100)
committerTom de Vries <tdevries@suse.de>
Sat, 19 Feb 2022 19:05:56 +0000 (20:05 +0100)
commit69cb3f2abb911acebfc7ffede2ee7151a3e14a59
tree64d86cc4c708f0aed54b4b2187aca75bc3ec572a
parent9ed52438b8ca99a0dffe74da96c2281cbc9cbb4b
[nvptx] Use _ as destination operand of atom.exch

We currently generate this code for an atomic store:
...
.reg.u32 %r21;
atom.exch.b32 %r21,[%r22],%r23;
...
where %r21 is set but unused.

Use the ptx bit bucket operand '_' instead, such that we have:
...
atom.exch.b32 _,[%r22],%r23;
...

[ Note that the same problem still occurs for this code:
...
void atomic_store (int *ptr, int val) {
  __atomic_exchange_n (ptr, val, MEMMODEL_RELAXED);
}
... ]

Tested on nvptx.

gcc/ChangeLog:

2022-02-19  Tom de Vries  <tdevries@suse.de>

* config/nvptx/nvptx.cc (nvptx_reorg_uniform_simt): Handle SET insn.
* config/nvptx/nvptx.md
(define_insn "nvptx_atomic_store<mode>"): Rename to ...
(define_insn "nvptx_atomic_store_sm70<mode>"): This.
(define_insn "nvptx_atomic_store<mode>"): New define_insn.
(define_expand "atomic_store<mode>"): Handle rename.  Use
nvptx_atomic_store instead of atomic_exchange.

gcc/testsuite/ChangeLog:

2022-02-19  Tom de Vries  <tdevries@suse.de>

* gcc.target/nvptx/atomic-store-1.c: Update.
gcc/config/nvptx/nvptx.cc
gcc/config/nvptx/nvptx.md
gcc/testsuite/gcc.target/nvptx/atomic-store-1.c