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

--- Comment #5 from Cassio Neri <cassio.neri at gmail dot com> ---
There's a (fragile) workaround:

void use(unsigned);
#define VERSION 0
bool f(unsigned x, unsigned y) {
#if VERSION == 0
    return x < 1111 + (y <= 2222);
#else
    bool b = y <= 2222;
    return x < 1111 + b;
#endif
}
void test_f(unsigned x, unsigned y) {
    for (unsigned i = 0; i < 3333; ++i)
        use(f(x++, y++));
}

f is till the same. Version 0 of test_f has 4 jumps whereas version 1 has only
one.

https://godbolt.org/z/gZZQ2f

Reply via email to