https://gcc.gnu.org/bugzilla/show_bug.cgi?id=40748
--- Comment #7 from Martin Liška <marxin at gcc dot gnu.org> --- > { > if (i == 0) return 0; > if (i == 1) return 1; > if (i == 2) return 2; > if (i == 3) return 3; > if (i == 4) return 4; > if (i == 5) return 4; > if (i == 6) return 4; > return 4; > } Here we produce: <bb 2> [local count: 1073741824]: if (i_2(D) <= 6) goto <bb 3>; [50.00%] else goto <bb 4>; [50.00%] <bb 3> [local count: 536870913]: _4 = CSWTCH.1[i_2(D)]; <bb 4> [local count: 1073741824]: # _1 = PHI <4(2), _4(3)> return _1; Am I right that we can do better with: if (i_2(D) <= 3) ...