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.

Reply via email to