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

    <tr>
        <th>Summary</th>
        <td>
            [X86] Improve KnownBits for X86ISD::PSADBW nodes
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            backend:X86
      </td>
    </tr>

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

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

<pre>
    X86TargetLowering::computeKnownBitsForTargetNode currently just sets the upper 48-bits to be zero and makes no attempt to determine the remaining active bits.

```cpp
typedef uint8_t __v2qu __attribute__((__vector_size__(2)));
auto sum_of_bits(__m128i x) {
  x = _mm_and_si128(x, _mm_set1_epi8(1));
  x = _mm_sad_epu8(x, _mm_setzero_si128());
  return __builtin_convertvector(x, __v2qu);
}
```
https://godbolt.org/z/74bYbTMh8
```asm
sum_of_bits(long long vector[2]):                   # @sum_of_bits(long long vector[2])
 pand    .LCPI0_0(%rip), %xmm0    # v16i8 values: 0-1
        pxor %xmm1, %xmm1
        psadbw  %xmm0, %xmm1             # v2i64 values: 0-8
        pand    .LCPI0_1(%rip), %xmm1    # unneccessary
 packuswb        %xmm1, %xmm1
        packuswb        %xmm1, %xmm1
 packuswb        %xmm1, %xmm1
        movd    %xmm1, %eax
 retq
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVE1v4zgM_TXyhWhgy585-JA2CFDM7GKwHWC7J0G2mURTS_JIlJv21y9sp1_pAjtjCArCvPdIvtCU3quDQaxZfs3ybSQDHa2r__pyp7Q1UWO7p_q-Kr5Ld0D6ah_RKXNg6Yalm9bqIRB-MfbRXCvyO-sW2J-2Q2iDc2iof4IfwRN4JA90RAjDgA6y6qpRU8RCg_CMzoI0HWj5gB6MBUmEeqDp9w4JnVYGZ7pDLZVR5gCyJTUiTDIrFm9ZvDnfRbycdhiWCD0N2OEegjJUCQIhRv4zgBCSyKkmEArBeMV4JcSILVknvHpegpzx9fmk14ucDGTBBy3sXkzZZ55OeKXgxPgaWHkGApyApVsQWgtpOuFVMmc5MX4zBz1SInBQUzC5yPKe7GUncAiX3Mm2V9FPdIcUnAEhmqB6Uka01ozoaOnwVWr24j2TldsLI5evR6LBT_883zG-O9iusT2trDswvntmfFdmzT_N9z-O1QVber1EPlrWW3OA-ToXlF9zlm_nSjbw-WE8BZbFvyyyuDBMUwUAq683325jEc9G5U4Ns103wHh-0jp-STAmhapglH3AqVWIr5IXO5dnOFl3JiVv_EuQl13zCC_i73CfOhq5KrIPCasLrY8NJP_dQPKiF4zBtkXvpXt6taB9CP6xeUv7P9X_Kv53hbUdu884lKczzCH9vJidqKvTbp2uZYR1UsblOo3LooiOdZI22TrmZdN05b7COMsqnu7TIq94W-TlOlI1j3kW8yRLyoRn6SrNM4myzNKsy6s2TVkWT6ukX_X9qKcxjpT3AesqKYs86mWDvZ-XIueNbB_QdCzd3FcF49OERa6eeFdNOHiWxb3y5N-USFE_b9QJn2_hVg_OjgivqxL21sF9VdzebZdd-u1us73-G4zt0EfB9fXF26boGJpVazXjuynN-eNqcPYHtsT4bq7eM76bG_g3AAD__4_osmA">