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

    <tr>
        <th>Summary</th>
        <td>
            [WASM] Suboptimal `memcmp` expansion for odd lengths
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    # Example ([godbolt](https://godbolt.org/z/jMo4f9G18))
Calls to `memcmp(a, b, n) == 0`, where `n` is odd is suboptimal for `wasm32` target where such call didn't lower to expansion and calls `memcpy` routine even for small lengths (`n` <= 14)

Here codegen for  `memcmp(a, "abc", 3) == 0`:
### x64
```asm
movzx   eax, word ptr [rdi]
xor     eax, 25185
movzx ecx, byte ptr [rdi + 2]
xor     ecx, 99
or      cx, ax
sete al
ret
```
### wasm32
```wat
local.get  0
i32.const .L.str.2
i32.const  3
call       memcmp
i32.eqz
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJxkU81yszgQfJrhMvVRYsTvgUMcr789bE457FlIik1KIFYSMc7TbwnYOOtQKihaPa0ezYzwvj-PWrdQHKA4JmIOF-vaF7H8dkLfks6qWwvE8Y9FDJPRCFRDcThb1VkToDgC1ZcQJg_8CegEdNq3UuvOQKdPoNP7i83fmt9ZDdTExY7Anp6FMR6DRSjZoAc5TEC1AHrGLr5GoAaBH4EfkUHJIna9aKcjf4SSYe_RKhU_fu7sFPpBGHyzLhKuwg-cIisId9ZhD_WzvKAUxqDq1QhUBTT2ql20oZdJjL63I4pRrST_n7XpFpWcnUM_atQfelzP8UNUMno8h4tf72V3Bvw52s7yr2S395_Rg7RKn3eFn7kDkegkEMUf_ngHfBcC4tvCpcx3qGTbEn7YkMF-fC6IqMWyXp51CqfgEIqDU32s3Epboo87jYqsLr4LaLni3S3ob-EIdED6KbKRmz3tHcUNFcuGeh00CrP9OB0eEnhMca_l_0lXsYcZK4VJY4lxj-w5pdKOPmD6V-qDS-kRR74haydsz16FL6L-5_PhxES1XDW8EYlus7Kqq7qoOSWXllSVF0Q6y6pKdgUXb7zsZKWqqpa87HjSt8SIM57lrCFeUJpTTkyUSqpaUSM7yJkeRG9SYz6GODdJ7_2s2zLLGUuM6LTx63wSjfqK62ZskeKYuDbG_Orms4ecmd4Hf1cJfTDrYP_99PoCxRFf74Ny77ySfev92JVxqvauTmZn2ofx7sNl7lJpB6BTPGr__JqcfdcyAJ1Wgx7otCbwbwAAAP__ALxEdg">