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

--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Larger testcase with more cases.  Some of them, e.g. in f3, are predicted
roughly reasonably, but the > 95% predictions are just wrong in these cases.

int
f1 (long long a, long long b)
{
  return a < b ? -1 : a > b;
}

int
f2 (int a, int b)
{
  if (a < b)
    return -1;
  if (a > b)
    return 1;
  return 0;
}

int
f3 (int *a, int *b)
{
  if (a[0] != b[0])
    return a[0] > b[0] ? 1 : -1;
  if (a[1] != b[1])
    return a[1] > b[1] ? 1 : -1;
  return 0;
}

int
f4 (int *a, int *b)
{
  if (a[0] > b[0])
    return -1;
  if (a[0] < b[0])
    return 1;

  if (a[1] > b[1])
    return -1;
  if (a[1] < b[1])
    return 1;

  if (a[2] > b[2])
    return -1;
  if (a[2] < b[2])
    return 1;
  return 0;
}

Reply via email to