<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/54695>54695</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Missed optimization: excessive asm instructions
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
gyakh
</td>
</tr>
</table>
<pre>
Hello,
Recently I have found that x86-64 clang 14.0.0 generates asm code (https://gcc.godbolt.org/z/3YWbrMvvh) with excessive instructions:
```
CheckEq(unsigned char const*, unsigned char): # @CheckEq(unsigned char const*, unsigned char)
vpbroadcastb ymm0, esi
vpcmpeqb k0, ymm0, ymmword ptr [rdi]
kmovd eax, k0
tzcnt eax, eax
kortestd k0, k0
mov rcx, -1
cmovne rcx, rax
mov eax, ecx # necessity of below instructions is not clear
and eax, -2147483648
neg rax
sbb eax, eax
or eax, ecx
vzeroupper
ret
```
Specifically, lines 9-12 are unnecessary. If I explicitly cast variable `size_t i` to `int` in CheckEq at line 25 (C++), then generated code looks fine (https://gcc.godbolt.org/z/ETh17ErG7):
```
CheckEq(unsigned char const*, unsigned char): # @CheckEq(unsigned char const*, unsigned char)
vpbroadcastb ymm0, esi
vpcmpeqb k0, ymm0, ymmword ptr [rdi]
kmovd eax, k0
tzcnt ecx, eax
kortestd k0, k0
mov eax, -1
cmovne eax, ecx
vzeroupper
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztVU2vmzoQ_TVkM0oEDnDDgkV7e_ux6Kat9PRWT8YewI1jU9vkJvn1HZOmt6DXqmq7bEQwZjxzju1zcGPluX6NWtuE3SfpiyR9dr2_Q4Em6DO8gZ4fEVo7Ggmh5wFOu3Jd5iA0Nx1k-SbdpNChQccDeuD-AMJKhITt-hAGn2yfJewlXZ0Qm87Kxuqwsa6jNxf6b__9p3Fvj8c-YRU8qtADngR6rwhUGR_cKIKyZipz5VemX66pe9-j2D98IrTReNUZlCB67ogDJSeMsO9hFiEcqgXf-yVsC0me_lLZidCt0HFonOVScB-a2D8fDmnMQq-WA8VhwE_Nrb-fht2GU_tonYQhOEiK506qpHgxL7A_2KOkFvkpZuzTeThchAlP4djM062jjQtyjr-sQhhT68RUZZ3Nw4LiBr-G3RLkln4jIU4_WH-DkwLCGWwLDWr7OJMCKA_GBlIg0rrPYLiR38KsWZbf5bttme9gPtBgd53OkqhvmhnRZdw6WExksZsXdHYcBlwwcxj-V7_X-_sBhWqV4FqfY1mtDHmpWmcMuENS2nVJuDtv4E1LpsTToJVQ0aFRYXDkTvFGk-3K1KsL_hdA0SMEG98oE2JHGfiiayAfRwxgRTTqfcKeT1cVwUOP5quj5dXN2tq9hzam_KSxHz702d2De3V3Ndxf8_6eecWfMO_NFt8x7-9reiXrray2FV8F0ibWNOnpnKBpw1vlPa23HYI6qAuPVo57-fS5j0fHtz5fjU7XC6nRATE2G2EP1NH6eGvWg7MfUdDmviSUET09FHlZFau-LppStsh2ZVMxybBsdhUyuW2yu6bIWCtWmtM3xkeuRHOlapYyluZplmVFllYb1m5FKgqZyjZPWd6SwPDAld5E4Cj4lasnDs3YeQpq5YN_CnI_CQ1v9fkYeuvq7sz3_WoiW09MPwPtmCm3">