https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103808
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I think this is a latent bug exposed by my match.pd patch (r12-5392). In GCC 11.2.0 we had: y_18 = iftmp.0_10 > a_14 ? 2 : 0; While on the trunk we have: y_18 = prephitmp_29 * 2; But doing this: void foo (__int128 x, int y) { for (;;) { __int128 a, b; x |= !!y; a = x + 1; b = y ? ++y : ++x; y = a < b; asm("":"+r"(y)); if (x >> 2) y *= 2; if (y == b) __builtin_unreachable (); } } Which causes the IR to be the same out of 11 and 12, does not produce compare debug in 11 but does in 12.