<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/137188>137188</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[DirectX] Legalize memcpy
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:DirectX
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
farzonl
</td>
</tr>
</table>
<pre>
## Problem
Currently we are emitting memcpys both 64bit and 32bit versions
The DML shaders will have errors like so:
`error: Unsupported intrinsic llvm.memcpy.p3.p3.i32 for DXIL lowering`
We emit this error because the memcpy intrinsic is not valid DXIL.
These memcpys tend to be in the `hlsl_groupshared` ie `addressspace(3)`. This might make the memcpy more involved to serialize into a set of store calls.
## Example
```llvm
tail call void @llvm.memcpy.p3.p3.i32(ptr addrspace(3) align 4 %scevgep, ptr addrspace(3) align 4 %scevgep19, i32 %38, i1 false)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyMk01v5DYMhn-NfCEykOWP8Rx8mGY6QIEU6CFFcytki2OzkSVDlJ0mv76QPc1mgT0sIMAfIl8-fAlqZhocYiuqX0R1yfQSRx_amw4f3tms8-a9FaoQqoA_gu8sTiDk-XEJAV207_CGoAMCThQjuQEmnPr5naHzcYS67CiCdgYKld5WDEzesZDn5xHh8vsT8KgNBoY3shZGvSJgCD4wWHpFYC-Ks5DbqeV2I4oz_Ol4mWcfIhogFwM5ph6sXafDXv8wF-lQoeDmA1xefnsC698wkBtELXfFv3ZsiCPxXhU67PXCCHHEeydf9InB-QirtmQ2ycOu8zwi42fjEZ2B6KFDILcJiVqOlu3fQ_DLzKMOaEQtgbYbbUxAZp51j0I1hVAnUcsDPCeoiYYxwqRfvyOafEjaq7crbqUYA2lLH-lv9KCBMYK_AccU2Wtr-Y56n-Sv_-pptvhp7H6Sf0Keoya7JcHqyYAo5Q-NFaqZY4DE_xUetKXBQQlCVdzjOuAs1CP8ZGh-SsFpbEJVRbN95HDTljEZ8wU2M21hTsVJZ9jmx7KqZK3yUza2VXE7Sol9ro3MVd7pHPtOHStZmdw0usuoVVJVslRlXlYyPx2KrtF93tdl1egTdkaUEidN9rD17cOQEfOCbV4c86bJrO7Q8rYvSnW6f0VnRHG-UMA-vgil0hqFNiU_dMvAyUDiyN_kIkW7Ldz_OdUFnnDYR7j7nC3BtmOMM6cFUFehrgPFcekOvZ-Eum6z2h8Pc_D_YB-Fum6cLNT1jrq26r8AAAD__9aeP5Y">