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