https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107563
Bug ID: 107563
Summary: __builtin_shufflevector fails to use pshufb and pshufd
instructions under default x86_64 compilation toggle
which is the sse2 one
Product: gcc
Version: 13.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: rtl-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: unlvsur at live dot com
Target Milestone: ---
#if defined(__SSE2__)
using temp_vec_type [[__gnu__::__vector_size__ (16)]] = char;
void foo(temp_vec_type& v) noexcept
{
v=__builtin_shufflevector(v,v,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0);
}
#endif
g++ -S pq.cc -Ofast
proves sse2 is enabled by default, but it does not call
https://www.felixcloutier.com/x86/pshufb
neither
https://www.felixcloutier.com/x86/pshufd
while g++ -S pq.cc -Ofast -msse4.2 will generate them correctly. Which is buggy