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

    <tr>
        <th>Summary</th>
        <td>
            `xor r8d, r8d` followed by `setne r8b` is redundant
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </td>
    </tr>

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

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

<pre>
    ```zig
export fn foo(unescaped_quotes: u64, unescaped_apostrophes: u64, newlines: u64, comment_starts: u64, line_string_starts: u64) extern struct { a: u64, b: u8 } {
    const all_ored = unescaped_quotes | unescaped_apostrophes | comment_starts | line_string_starts;
    const lsb = all_ored & (~all_ored +% 1);

    var bitstr: u64 = newlines;
    var id: u8 = 0;

 if ((unescaped_apostrophes & lsb) != 0) {
        bitstr = unescaped_apostrophes;
        bitstr &= bitstr -% 1;
        id = 1;
    }

    if ((unescaped_quotes & lsb) != 0) {
        bitstr = unescaped_quotes;
        bitstr &= bitstr -% 1;
        id = 2;
 }

    return .{ .a = @ctz(bitstr), .b = id };
}
```

Compiled for Zen 4, generates: ([Godbolt link](https://godbolt.org/z/51d9hfP5a))  (Ctrl+F in the assembly window for 'r8')

```asm
foo:
        mov     rax, rdi
        or rcx, r8
        or      rax, rsi
        xor     r8d, r8d
        or rax, rcx
        blsr    rcx, rsi
        neg     rax
 test    rax, rsi
        cmove   rcx, rdx
        setne   r8b
 blsr    rsi, rdi
        test    rax, rdi
        mov     edx, 2
 cmove   rsi, rcx
        cmove   rdx, r8
        tzcnt   rax, rsi
        ret
```

I believe the highlighted line should be removed.

```diff
foo:
        mov     rax, rdi
        or rcx, r8
        or      rax, rsi
-       xor     r8d, r8d
 or      rax, rcx
        blsr    rcx, rsi
        neg     rax
 test    rax, rsi
        cmove   rcx, rdx
        setne   r8b
 blsr    rsi, rdi
        test    rax, rdi
        mov     edx, 2
 cmove   rsi, rcx
        cmove   rdx, r8
        tzcnt   rax, rsi
        ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsVk1v4zYQ_TX0ZRBDpvV50CGO4aK3nnroJSDFkcQuRbok5Tg59LcXlOQPKd70sGhPGwSQzMc382bmkRBzTjYasSTJjiT7Fet9a2z5O1NSMPttxY14L0kajf8fsiHRnkTPeD4a66HWUBtDaN5rdBU7onj9qzceHdk-Q5_GhL7ADWJH47w1x3aGa3xTUs-WKtN1qP2r88z6eyBsfHXeSt0swQLw7NFqcN72lQeS7YDdUfnwngPJ9gEbywAAqIx2HphSr8aiALLdw7IaINl36hiQudxh6ZHQTzmV40O6W26aAqH533cLO0IT2BBaXPm3KCdmgUvvvJ3qHKLd-rmbb5Xi0oLtHqJlPFmH1LNRzuqkadAb-kzoZowQ3u87Gf5GPYsuzgb_HQJNA2f69TRWvdwrx_HMAZLtl415UMtlkD9SxsXaP14BvQEP5Fv0vdWwDhZes4FA4qjyH4Tm07xpETy9Hv0Tgmb720CvES_H9j7Bi-mOUqGA2lj4AzUMp6NBjZZNBzf0Ltn9YgQ3ygcrfyPJntC89f4YNhB6IPTQjPja2IbQwwehh2Qjirb-LWGDvAJCoBdvFaG7A0gNvkVgzmHH1Tu8SS3M26CC0MzmhGaBdqf0Kp-5blwJd832ed7RzpyGp2XnUIgVco4bC7YaofwTMmO6BfM8bbC5GOnic-SJWp0XllBu4F4yL0NrbK6pR8Cj81-JqTpzwruIYpHRodcDnvMJuGpw8mFjlhmX-KWxKAacTuhVyBR2WfoVFw-b7j8q7b-o06L_wry_Akcl8YSDl1rZtEo2rUcxXLjgWtMrARzBYpAh1g_9JGRd_5-Gevo3Qy2JP-3039lpJcqtKLYFW2G5yeg23sZJka3akhZJXcXFpuBVGotNnAvOEkw50ijP-DZeyZJGNI7yDY22cZFka54LnlY0jSgr6ozlJI6wY1KtlTp14V5cSed6LDcRzeNkpRhH5S4fWrYMu5543zgSR0o67248L73C8NkVLHNnlzSC2ihl3lAAfweSRuOgwpjSCKQDi6LXgmm_6q0qFze29G3P15XpCD2EXNPj6WjNn1h5Qg-DYEfoYdJ8Kuk_AQAA___qZcxs">