/* { dg-do compile } */
/* { dg-options "-O2" } */

#define TEN(x) x x x x x x x x x x
#define THOUSAND(x) TEN (TEN (TEN (x)))

int
foo (int x, int y)
{
  register int a = y + 57;
  register int b = y + 31;

  while (x-- > 0)
    {
      THOUSAND (a += b; b -= a;)
    }
  return a + b;
}