https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117053
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Reduced testcase: int foo (int x, int y) { int v; if (x == 0) v = 0; else if (x > 0) v = 1; else v = -1; return v == y; } Seems -march=i486 and -march=i586 are TARGET_ZERO_EXTEND_WITH_AND targets and the movzbl emitted doesn't work there. Guess either I can use the UNSPEC setcc that is used for the jp float comparison case, or simply make the spaceship int patterns use !TARGET_ZERO_EXTEND_WITH_AND condition and for floating point always emits the branches. Who cares about i486 or i586 code performance these days...