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

    <tr>
        <th>Summary</th>
        <td>
            Missed optimization: eliminate redundant and+zext+or reconstruction in select arm
        </td>
    </tr>

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

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

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

<pre>
    ```llvm
define i40 @src(i40 %arg0) {
  %1 = trunc i40 %arg0 to i8
  %2 = icmp eq i8 %1, 2
  %3 = and i40 %arg0, -256
 %4 = select i1 %2, i8 0, i8 %1
  %5 = select i1 %2, i40 0, i40 %3
  %6 = zext i8 %4 to i40
  %7 = or disjoint i40 %5, %6
  ret i40 %7
}

define i40 @tgt(i40 %arg0) {
  %1 = trunc i40 %arg0 to i8
  %2 = icmp eq i8 %1, 2
  %3 = select i1 %2, i40 0, i40 %arg0
  ret i40 %3
}
```
alive2: https://alive2.llvm.org/ce/z/URiF_Y
godbolt: https://godbolt.org/z/Kj3qEv453

Occurrences in llvm-opt-benchmarks:
typst-rs/optimized/2i78fvbm4wocuesi.ll
%1 = trunc i40 %arg0 to i8  ->  %.sroa.05.0.extract.trunc = trunc i40 %3 to i8
%2 = icmp eq i8 %1, 2  ->  %4 = icmp eq i8 %.sroa.05.0.extract.trunc, 2
%3 = and i40 %arg0, -256  ->  %.sroa.46.0.extract.shift = and i40 %3, -256
%4 = select i1 %2, i8 0, i8 %1  ->  %.sroa.0.0 = select i1 %4, i8 0, i8 %.sroa.05.0.extract.trunc
%5 = select i1 %2, i40 0, i40 %3  -> %.sroa.3.0.insert.ext = select i1 %4, i40 0, i40 %.sroa.46.0.extract.shift
%6 = zext i8 %4 to i40  ->  %.sroa.0.0.insert.ext = zext i8 %.sroa.0.0 to i40
%7 = or disjoint i40 %5, %6  -> %.sroa.0.0.insert.insert = or disjoint i40 %.sroa.3.0.insert.ext, %.sroa.0.0.insert.ext

typst-rs/optimized/m09o5qr68f5khss.ll
%1 = trunc i40 %arg0 to i8  ->  %.sroa.05.0.extract.trunc.i.i = trunc i40 %35 to i8
%2 = icmp eq i8 %1, 2  ->  %36 = icmp eq i8 %.sroa.05.0.extract.trunc.i.i, 2
%3 = and i40 %arg0, -256  ->  %.sroa.46.0.extract.shift.i.i = and i40 %35, -256
%4 = select i1 %2, i8 0, i8 %1  ->  %.sroa.0.0.i.i = select i1 %36, i8 0, i8 %.sroa.05.0.extract.trunc.i.i
%5 = select i1 %2, i40 0, i40 %3  -> %.sroa.3.0.insert.ext.i.i = select i1 %36, i40 0, i40 %.sroa.46.0.extract.shift.i.i
%6 = zext i8 %4 to i40  -> %.sroa.0.0.insert.ext.i.i = zext i8 %.sroa.0.0.i.i to i40
%7 = or disjoint i40 %5, %6  ->  %.sroa.0.0.insert.insert.i.i = or disjoint i40 %.sroa.3.0.insert.ext.i.i, %.sroa.0.0.insert.ext.i.i
2 Occurrences
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8VsFu4zYQ_Rr6Qligh6RkH3RQktWlKAoU6KGngqbGNrOS6JCUdzdfX4iWFa9tJd4iKBBEsDjvzZsR35DKe7NtEXMiH4h8mqku7KzLH1Wrsa7r2dpWP3KSsuNfXR8awooKN6ZFagSjRDDvNIFl_AFSuS0jsKIkeyCsoP2rBSX8iQbXtZqeRdFgqVmegiAGGd3sKb5Qs4xAAo8UThE8Rqi2oj-leqRzkGkfRECKGOOxRh2oWUTiPsQsKRuekXeglFPhgg3xx0z8BEgj4BW_h4FKxCoEOwVkMcA6Whn_bE0bThSypyODUupwXMgIK0j21P-_bGzYhv-vsR93ISq4UM_f1J_2CGGFqs0BgfCC7kLYe8ILAiWB8vg-6XdRYt2WQKmRQPlKoPzrT1P-8zdhxdZWa1uHa_CwMAB7zG_P_OXLQRxFsOIPrTvnsNXoqWlpn2Vu92G-xlbvGuW-Ri5WhB97H-bOEyjtPpjGvGJFoASTLTeHdSO-Wd2hN0ld97wftJnSOeFfYh8T76xKmExYgt-DUzokR9AVnI-f6N0PdMYtbgRN5Tt93I88cyVdpGdUfmc24RLOz_x2v92ue5Swa6S4Rk5WGLPf7d4h_0jIE5aY1qMLPe2UkguWqRYdtUwOhlu1XyY_g731Z5wrd02VyxLPshwfUwy3OjKQ3tJ7dNqEgxq2svLFpcuN_Lrz_tMMlJjE3DCR_GUX8fQXbNRn_UQrjUWc20l-mp9G-p_QPL3fVLHezzTWu5LudNebqI8cNrFhRxG3TBYX_5PR3nHamPFOt5322TsFEFYAPTveZlXOqxVfqRnmi0ysshWXSznb5WslIVOQcqVRbNI1rBYKF-lCSi4YQDUzOTCQLF1wJkUKMsEs3UjkK73ZIGaKE8GwUaYeD-mZ8b7DfCEEAzar1RprHy-LAC1-o3GVAPR3R5fHM3fdbT0RrDY--DeaYEKN-e_Ge6zoMDVUMLbtT3qsTWNaFZA6rLq2Um3ofULg4TXOowfrqENtWx9cp3tUf8IP-0q5Zta5Or-4Lpiw69aJtg2BMt5bj4_53tln1IFAGbX3Q2wo7pDDvwEAAP__N3oS4Q">