<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/140693>140693</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[X86] Poor emulation of cmpss pattern
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:X86,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
RKSimon
</td>
</tr>
</table>
<pre>
https://simd.godbolt.org/z/nqP1WxY1q
Inspired by #140563
```c
#include <x86intrin.h>
__m128 test_cmpeqss(__m128 x, __m128 y) {
int cmp = y[0] == x[0];
return _mm_setr_ps(__builtin_bit_cast(float, -cmp), x[1], x[2], x[3]);
}
```
We never quite manage to recreate the single (v)cmpeqss
-march=x86-64
```asm
test_cmpeqss: # @test_cmpeqss
# %bb.0: # %entry
cmpeqss %xmm0, %xmm1
movss %xmm1, %xmm0 # xmm0 = xmm1[0],xmm0[1,2,3]
retq
```
-march=x86-64-v3
```asm
test_cmpeqss: # @test_cmpeqss
# %bb.0: # %entry
vcmpeqss %xmm0, %xmm1, %xmm1
vmovd %xmm1, %eax
vmovd %eax, %xmm1
vblendps $1, %xmm1, %xmm0, %xmm0 # xmm0 = xmm1[0],xmm0[1,2,3]
retq
```
-march=x86-64-v4
```asm
test_cmpeqss: # @test_cmpeqss
# %bb.0: # %entry
vcmpeqss %xmm0, %xmm1, %k0
kmovw %k0, %eax
negl %eax
vmovd %eax, %xmm1
vblendps $1, %xmm1, %xmm0, %xmm0 # xmm0 = xmm1[0],xmm0[1,2,3]
retq
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMVcGu6jYQ_ZrJxgLZ44SERRZcKFLVzVO7eO0KOckA7o3tYDspvK-vHHjv3UurdnWrSkicmTOc4ZxEtgpBnyxRDcULFLtMjfHsfP3zT79o42zWuO5Wn2McAsgN4B5wH7TplifXNa6PS-dPgPsvgHt7-SQ-X38TF-Ab4JsfbRi0p441NwYoRc6LlbxTsOL3T5sKlNq2_dgRA7m9Vitto9d2eQb5w338cDACKxYpxENrBrqEAFg9ulfALXvgG-CaQfkCfMMYY9pG1pqBgdyxGxQvHIpdKlJ9fdQgv057iqO37GDMIVD0h-G-pBl1H7U9NDoeWhUiYHXsnYpp7aI1A-A6waQnkt4D4xssZ7y-r4Jy9zaBu8PPxCxN5Nll1JGYUVadiEXHPLWeVCQWz8SCtqeeGGA1Aa6_JjELLIzy7Rnk7lqtFqv87QYVDPDNu_DkJj0RBjl_156fBQMsmmbJvw1hQTb625zSYzI1r8bwZPAOxUwbN30jxXeSz0J3kKJP5CN93M46KTvcIuB2zippeYqXvwb15HMxyY-yOv2D1yfbk3FT90SSur7nUuP5d01PthvSilz8rT7_b0L8sPfl30N85fPgq3HTH4_6fYCWTv3_N9Csq2W3lmuVUS3KvCylEKLMzjVWoiy5WqmqpFIWdJRNXpDAao0dV3mb6Ro5FrxAzqtCFOWyO5YCRV4dFeaKpICck1G6X_b9ZNIxm-kQRqpFzldrmfWqoT7MhzZio9pXsh3Iza_VCjD9ZUA0OgTqFm6I2ugvKmpnE1fsMl8n0UUzngLkvNchhu9roo79fBskrWLHPjnnGZmxnxWYO6ZjIAQ2qBjJ22z0_dMFcdLxPDbL1hnAfdJ9fC0G736nNgLuZy8BcP-wM9X4ZwAAAP__4V3ZjQ">