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.