https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92492
--- Comment #1 from Hongtao.liu <crazylht at gmail dot com> ---
Much more simple case, exclude disturb of point alias and unknown loop count
cat test.c:
typedef unsigned char uint8_t;
static inline uint8_t x264_clip_uint8( int x )
{
return x&(~63) ? (-x)>>7 : x;
}
void mc_weight( uint8_t *__restrict dst, uint8_t *__restrict src)
{
for( int x = 0; x < 16; x++ )
dst[x] = x264_clip_uint8(src[x]);
}
Refer to https://godbolt.org/z/YJXWRD
Gcc failed to vectorize loop, icc succeed.