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

    <tr>
        <th>Summary</th>
        <td>
            [InstCombine] Failure to fold (and %x, (sext i1 %m)) -> (select %m, %x, 0) with multiple uses of %m
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:instcombine,
            missed-optimization
      </td>
    </tr>

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

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

<pre>
    Godbolt: https://simd.godbolt.org/z/ndz15vGjW

```ll
define <2 x i64> @src(<2 x i64> %x, <2 x i64> %y, <2 x i64> %a, <2 x i64> %b) {
entry:
  %cmp.i8 = icmp sgt <2 x i64> %x, %y
  %sext.i9 = sext <2 x i1> %cmp.i8 to <2 x i64>
  %and.i7 = and <2 x i64> %sext.i9, %a
  %and.i = and <2 x i64> %sext.i9, %b
  %add.i = add <2 x i64> %and.i7, %and.i
  ret <2 x i64> %add.i
}

define <2 x i64> @tgt(<2 x i64> %x, <2 x i64> %y, <2 x i64> %a, <2 x i64> %b) {
entry:
  %0 = icmp sgt <2 x i64> %x, %y
 %1 = add <2 x i64> %b, %a
  %add.i = select <2 x i1> %0, <2 x i64> %1, <2 x i64> zeroinitializer
  ret <2 x i64> %add.i
}
```

The tgt version gives better codegen:
```asm
src: # @src
        pcmpgtq %xmm1, %xmm0
        pand    %xmm0, %xmm2
        pand    %xmm3, %xmm0
        paddq   %xmm2, %xmm0
 retq
tgt:                                    # @tgt
        pcmpgtq %xmm1, %xmm0
        paddq   %xmm3, %xmm2
        pand    %xmm2, %xmm0
        retq
```

I can try and address this in DAG but middle end seems to be the better choice.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVc2OozgQfhpzsRqBHXfgwCHT2bRGe9tdac8GV6BG_klj09udp18ZCJ1JmNbMXtaKApTrq5-vXGXpPbYWoCLiCxH7RA6hc331x-9_onE2qZ16r56dqp0OhO9oF8LJE74j7EDYwaNRaTvtpq5vCTucCTtYdc7F6_O3v0m2J9lu_n_Mpp_Wk0DBES1Qwp8YfaP4uCH8N0o2me8bwoobMRNvhD3dKjPxviqVq9KasJKS7ZfJPdjQv8dMxi8aFRpzSrGghO8pNuZEfRvurUxxRM8fQA9vIcVyRMb3BZXPoNlycN_buzIhrUpxO1qQVt27nV3MzuUt8meB9TVQLUC1ApwiujiMHxdsDyu8jNbmUm_315X_UaFDG_6nQme_WGPCRP5jouq1oizcetDQ3J-IbDXy_F56ht6hxYBS4xn6X6_Bpe-uS_JXBzS0gb5C79FZ2uIreFpDCNDTxilowS6ULRakN5MktiiPtPBLw85RTevUmFMbXkYmjclnet6MyW704oGldNlc9NhnevwTe0q9LHrsXq-H8DK9xrPHF-Bna04yAv5jktdB8Z9MciX4eX3ksFrZr7SRlob-fZwGUqkevKehQ0_R0v3umdZDoAaV0kDBKuoBjI-TqQYaOlgOQeewgTRRFVclL2UCVb7NtiLjbCOSrio3x0IJsSmbspBCybKut6rmOVcqF-WjSLBiGdtkLCvzgm2ZSAvViMf8mPFGAJe1IpsMjESdav1q4u2RoPcDVEXOiiLRsgbtx1uJsahB-A6tD40zNVogLDJEGDPoPagHdwpo8CwDOhv3xD7pqwh7qIfWk02m0Qf_4Spg0OOd99X68DTbFHt6kKiHHiIfR6cVJawYp-oyE4pxvmMeRYawMo6ah6n9ikurjztPCyiLOv9g6KgZdMCTBjp48NQdR9Vk6HX1_b3aYuiGOm2cIewwJj89Hk69-wZNIOwwcuUJO4x0_RsAAP__Su4SOA">