<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">