https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109885
--- Comment #4 from Hongtao Liu <liuhongt at gcc dot gnu.org> --- int sum() { int ret = 0; for (int i=0; i<8; ++i) ret +=(0==v[i]); return ret; } int sum2() { int ret = 0; auto m = v==0; for (int i=0; i<8; ++i) ret += m[i]; return ret; } For sum, gcc tries to reduce for an {0/1, 0/1, ...} vector, for sum2, it tries to reduce {0/-1,0/-1,...} vector. But LLVM tries to reduce {0/1, 0/1, ... } vector for both sum and sum2. Not sure which is correct?