https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101756
--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note with my patch for PR 101805, we are able to get the scalar version of this function to: xorl %eax, %eax testl %edx, %edx sete %al orl %esi, %eax ret _23 = kk_13(D) == 0; _18 = (int) _23; of_33 = of_10(D) | _18; return of_33; This is because MAX<ea!=-1, ea!=-2> (ea != -1 | ea != -2) will always be 1. ICC, clang nor MSVC is able to figure this out either.