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

    <tr>
        <th>Summary</th>
        <td>
            [X86] -x86-use-fsrm-for-memcpy does not ensure DF = false
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          RKSimon
      </td>
    </tr>
</table>

<pre>
    https://simd.godbolt.org/z/MGf1qovrW

If we enable Fast Short Rep Mov memcpy codegen, then we should ensure that the direction flag (DF) has been cleared before calling the REP MOV:
```
define void @doit(ptr %dst, ptr %src, i64 %len) {
  call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %len, i1 0)
  ret void
}
declare void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1 )
```
-mcpu=tigerlake -x86-use-fsrm-for-memcpy
```
doit:
 movq    %rdx, %rcx
        rep;movsb (%rsi), %es:(%rdi)
 retq
```
should be:
```
doit:
        movq    %rdx, %rcx
 cld
        rep;movsb (%rsi), %es:(%rdi)
        retq
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVF9vnT4M_TThxeKKG_4_8NCWHz9NU7Wplba9hsRA1kBoEu7affopwG21rtU2aVEEGGyfcxxjZq3sJ8SKpJckrQO2uEGb6ub9rRz1FLRaPFaDc7Ml8QWhDaGNlaM49Fq0WrmDNj2hzXdCm-v_u-O9PpnPJKpJdLFd33XwDQEn1iqEhlkHt4M2Dm5whmt9ghFHPj8C1wJ7nAi9Ajfg5GPsoBclACe7GAQ3MOc_gZAGuZN6gk6xHggt6obQEgZmoUWcgCtkBgW02GmDwJlScurX2Jv_PsL1h09eyEYxi_a9mgI7OSGctBRAkkho6QgtZmeA0FRY59ntljXcWzJLvKU88xJIfrklghX1KZFSp_GwCT3Mkd8yS_4i8xXII0SElufsBt2afFeR12f-XDGDf4K7A-5IO8QTwou6hCOfFxLXTvZoFLtDCB-KLFwshp01Y9hpE24wr5fV1_Fcchj16R4AvDgjHjyyf-IPZ23bMjiT-HLUJ9v6I_YuVnp-mz9uzbi-F_K5Mgbd_asc9mZq8c2z_4nkvn7DlSvxT1g_Rf9CPhBVLMq4ZAFWxyxP02NU5kkwVBiJPEPaJSmWaZ6zIhMJK7uMthi3IhWBrGhE44hGyfGY0DQ50JLllCZZzoqiY1lMkghHJtVh7RJt-kBau2CVRSnNA8VaVHYdCZS2jN_hJEh88aXICKV-SpjKx4Xt0lvfadI6-5zJSafWeeL90_rNdgGh0cKk3fkvrxsgcQ0dUxaDxagXg6eXbljaA9cjoY1H22_hbPRX5I7QZhVhCW1WHT8CAAD__995ZvU">