https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87853
--- Comment #4 from Terry Guo <xuepeng.guo at intel dot com> --- Thanks Derek for reporting. I can reproduce what Derek described and do think this is a bug. _mm_cmpgt_epi8 (__m128i __A, __m128i __B) { return (__m128i) ((__v16qi)__A > (__v16qi)__B); } This one performs signed comparison. But the below definition of __v16qi could be signed char by default or implicitly changed to be unsigned char with option -funsigned-char. typedef char __v16qi __attribute__ ((__vector_size__ (16))); We may need a new definition in gcc like: typedef signed char __v16qs __attribute__ ((__vector_size__ (16))); I will sort out a patch to test this idea.