aboutsummaryrefslogtreecommitdiff
path: root/gcc/d/expr.cc
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2022-02-18 17:38:50 +0100
committerTom de Vries <tdevries@suse.de>2022-02-19 19:57:12 +0100
commit9ed52438b8ca99a0dffe74da96c2281cbc9cbb4b (patch)
treed90c1198bbc833573d4b2a688ad49f7d699a4b6e /gcc/d/expr.cc
parent8e5c34ab45f34aadea65c5ba33ec685264b6ec66 (diff)
downloadgcc-9ed52438b8ca99a0dffe74da96c2281cbc9cbb4b.zip
gcc-9ed52438b8ca99a0dffe74da96c2281cbc9cbb4b.tar.gz
gcc-9ed52438b8ca99a0dffe74da96c2281cbc9cbb4b.tar.bz2
[nvptx] Don't skip atomic insns in nvptx_reorg_uniform_simt
In nvptx_reorg_uniform_simt we have a loop: ... for (insn = get_insns (); insn; insn = next) { next = NEXT_INSN (insn); if (!(CALL_P (insn) && nvptx_call_insn_is_syscall_p (insn)) && !(NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == PARALLEL && get_attr_atomic (insn))) continue; ... that intends to handle syscalls and atomic insns. However, this also silently skips the atomic insn nvptx_atomic_store, which has GET_CODE (PATTERN (insn)) == SET. This does not cause problems, because the nvptx_atomic_store actually maps onto a "st" insn, and therefore is not atomic and doesn't need to be handled by nvptx_reorg_uniform_simt. Fix this by: - explicitly setting nvptx_atomic_store's atomic attribute to false, - rewriting the skip condition to make sure all insn with atomic attribute are handled, and - asserting that all handled insns are PARALLEL. Tested on nvptx. gcc/ChangeLog: 2022-02-19 Tom de Vries <tdevries@suse.de> * config/nvptx/nvptx.cc (nvptx_reorg_uniform_simt): Handle all insns with atomic attribute. Assert that all handled insns are PARALLELs. * config/nvptx/nvptx.md (define_insn "nvptx_atomic_store<mode>"): Set atomic attribute to false. gcc/testsuite/ChangeLog: 2022-02-19 Tom de Vries <tdevries@suse.de> * gcc.target/nvptx/uniform-simt-3.c: New test.
Diffstat (limited to 'gcc/d/expr.cc')
0 files changed, 0 insertions, 0 deletions