<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/125698>125698</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [HLSL][SPIRV] Handle atomic operations on RWBuffers
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            HLSL,
            backend:SPIR-V
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            s-perron
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          s-perron
      </td>
    </tr>
</table>

<pre>
    In HLSL, RWBuffer can be used in atomic operations. The existing code can handle only direct loads and stores.

See https://godbolt.org/z/9s3sfen4h for an example. The HLSL source is:

```
RWBuffer<int> b : register(u0);

[numthreads(1,1,1)]
void main()
{
    int a;
 InterlockedAdd(b[0], 1, a);
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJxkkkFr6zgQxz_N-DIkKGMrtg8-OMmGFnpY2qV7lqVJrK0iBUku7X76hxP39fEeSAgG_r-ZET-Vkj175g7kDojS6soxBg9EIA-FmvIYYvdVLYZgPrtHjw9PL09Ae3z-dzedThxRK48D45TYoPWocrhYjeHKUWUbfFrjPyMjf9iUrT-jDoZvmVF54xiDd59obGSd0QVlEipvMOUQOa1B9CD6F2Ycc74mKHugI9DxHMwQXF6HeAY6_g90bFOZTuyrEU8hovLIH-pydXzvPg-NKUxRM9ob5gaGrViO6L_2gXJvfYbyLxwQyh4jn23KHIGaSQC1UO6WsNz56ZLHyMokoGYDtF9uC_IAon8P1uBFWQ_UzEXRQz2HERGtz6juLHz0maML-o1NbwxQM4DciZlBe5yRqL4b14dfBy9MV5q2bFXB3aYum21DTS2LsdNDrbWRTT2UJ7VhrrZ1RdS0otUnapUobEeCpCBRbSTVslpzTcyb6qS0kbqRLVSCL8q6tXPvl_mnC5vSxN2G5LZtCqcGdmlx5y4FAe2BaFD6jb2Bsn_5-_F59boIFbsZtBqmc4JKOJty-kZnm91NxBtJHkDu5vAryAM-3EX5QywM_qeFqZii636TxOZxGtY6XICOc6flWV1j-I91BjreNkpAx2Wp945-BAAA__-i6u9w">