mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 14:41:07 +08:00
amdgcn: Add waitcnt after LDS write instructions
Data-share write (ds_write) instructions do not necessarily complete the write to LDS immediately. When a write completes, LGKM_CNT is decremented. For now, we wait until LGKM_CNT reaches zero after each ds_write instruction. This fixes a race condition in the case where LDS is read immediately after being written. This can happen with broadcast operations. 2020-09-08 Julian Brown <julian@codesourcery.com> gcc/ * config/gcn/gcn-valu.md (scatter<mode>_insn_1offset_ds<exec_scatter>): Add waitcnt. * config/gcn/gcn.md (*mov<mode>_insn, *movti_insn): Add waitcnt to ds_write alternatives.
This commit is contained in:
parent
3aee3aaf48
commit
e929d65b48
@ -923,7 +923,7 @@
|
||||
{
|
||||
addr_space_t as = INTVAL (operands[3]);
|
||||
static char buf[200];
|
||||
sprintf (buf, "ds_write%%b2\t%%0, %%2 offset:%%1%s",
|
||||
sprintf (buf, "ds_write%%b2\t%%0, %%2 offset:%%1%s\;s_waitcnt\tlgkmcnt(0)",
|
||||
(AS_GDS_P (as) ? " gds" : ""));
|
||||
return buf;
|
||||
}
|
||||
|
@ -554,7 +554,7 @@
|
||||
flat_load_dword\t%0, %A1%O1%g1\;s_waitcnt\t0
|
||||
flat_store_dword\t%A0, %1%O0%g0
|
||||
v_mov_b32\t%0, %1
|
||||
ds_write_b32\t%A0, %1%O0
|
||||
ds_write_b32\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0)
|
||||
ds_read_b32\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0)
|
||||
s_mov_b32\t%0, %1
|
||||
global_load_dword\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0)
|
||||
@ -582,7 +582,7 @@
|
||||
flat_load%o1\t%0, %A1%O1%g1\;s_waitcnt\t0
|
||||
flat_store%s0\t%A0, %1%O0%g0
|
||||
v_mov_b32\t%0, %1
|
||||
ds_write%b0\t%A0, %1%O0
|
||||
ds_write%b0\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0)
|
||||
ds_read%u1\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0)
|
||||
global_load%o1\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0)
|
||||
global_store%s0\t%A0, %1%O0%g0"
|
||||
@ -611,7 +611,7 @@
|
||||
#
|
||||
flat_load_dwordx2\t%0, %A1%O1%g1\;s_waitcnt\t0
|
||||
flat_store_dwordx2\t%A0, %1%O0%g0
|
||||
ds_write_b64\t%A0, %1%O0
|
||||
ds_write_b64\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0)
|
||||
ds_read_b64\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0)
|
||||
global_load_dwordx2\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0)
|
||||
global_store_dwordx2\t%A0, %1%O0%g0"
|
||||
@ -667,7 +667,7 @@
|
||||
#
|
||||
global_store_dwordx4\t%A0, %1%O0%g0
|
||||
global_load_dwordx4\t%0, %A1%O1%g1\;s_waitcnt\tvmcnt(0)
|
||||
ds_write_b128\t%A0, %1%O0
|
||||
ds_write_b128\t%A0, %1%O0\;s_waitcnt\tlgkmcnt(0)
|
||||
ds_read_b128\t%0, %A1%O1\;s_waitcnt\tlgkmcnt(0)"
|
||||
"reload_completed
|
||||
&& REG_P (operands[0])
|
||||
|
Loading…
x
Reference in New Issue
Block a user