https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107546
Bug ID: 107546
Summary: simd, redundant pcmpeqb and pxor
Product: gcc
Version: 12.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: i.nixman at autistici dot org
Target Milestone: ---
Hello,
this code sample(https://godbolt.org/z/TnGMsfMs6):
```
#include <x86intrin.h>
auto foo(const char *p) {
const auto substr = _mm_loadu_si128((const __m128i *)p);
return _mm_cmplt_epi8(substr, _mm_set1_epi8('0'));
}
```
produces the following ASM code:
```
1: foo(char const*):
2: movdqu xmm0, XMMWORD PTR [rdi]
3: pxor xmm1, xmm1
4: pcmpgtb xmm0, XMMWORD PTR .LC0[rip]
5: pcmpeqb xmm0, xmm1
6: ret
```
please look at line 5.
is there any reason for `pcmpeqb` and `pxor` instruction?
just for info, clang's output(https://godbolt.org/z/MPnvEMdhr):
```
1: foo(char const*):
2: movdqu xmm1, xmmword ptr [rdi]
3: movdqa xmm0, xmmword ptr [rip + .LCPI0_0]
4: pcmpgtb xmm0, xmm1
5: ret
```
it looks like the issue started at version 9 and up to the current trunk.