https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87355

--- Comment #2 from Marc Glisse <glisse at gcc dot gnu.org> ---
For f, this is a classic case where gcc canonicalizes n>=100 as n>99, and thus
cannot as easily merge it with the other comparison n==100.

For g, n >= 103 || n == 100 || n == 101 || n == 102 is replaced in the
front-end with (n > 102 || n == 100) || (unsigned int) n + 4294967195 <= 1,
that's a bit strange. Merging comparisons into a range test is normal, but why
merge precisely tests 3 and 4? Inserting || n == 99 before n == 100 yields the
even stranger ((n > 102 || n == 99) || (unsigned int) n + 4294967196 <= 1) || n
== 102...

Reply via email to