[Bug target/103771] New: Missed vectorization under -mavx512f -mavx512vl after r12-5489
wwwhhhyyy333 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Mon Dec 20 08:59:14 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103771
Bug ID: 103771
Summary: Missed vectorization under -mavx512f -mavx512vl after
r12-5489
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: wwwhhhyyy333 at gmail dot com
Target Milestone: ---
cat vect.c
typedef unsigned char uint8_t;
static uint8_t x264_clip_uint8( int x )
{
return x&(~255) ? (-x)>>31 : x;
}
void mc_weight( uint8_t * __restrict dst, uint8_t * __restrict src, int
i_width, int i_scale)
{
for( int x = 0; x < i_width; x++ )
dst[x] = x264_clip_uint8(src[x] * i_scale);
}
It can not be vectorized with -mavx512f -mavx512vl, but can be vectorized with
-mavx2, See https://godbolt.org/z/M1jx161f6
The commit https://gcc.gnu.org/cgi-bin/gcc-gitref.cgi?r=r12-5489 converts (x &
(~255)) == 0 to x <= 255, which may trigger some missing pattern with
-mavx512vl.
Also an 1.5% regression was found on -march=cascadelake due to missing 128bit
epilogue for this loop.
More information about the Gcc-bugs
mailing list