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