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

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Another testcase from a different PR:

__attribute__((noinline)) static int
foo (int a, int b)
{
  return a == b;
}

int
bar (int a, int b)
{
  return foo (a, b) != 0;
}

__attribute__((noinline)) static int
baz (int a)
{
  if (a > 10 || a < -10)
    return 0;
  return a;
}

int
qux (int a)
{
  return baz (a) == 42;
}

where if we determine that foo always returns [0, 1] and baz [-10, 10], then we
can
optimize that return ret != 0; into return ret; and ret == 42 into 0.

Reply via email to