/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-pre -fno-ipa-sra" } */

typedef struct {
    unsigned int key;
} S;
typedef struct s1  {
    unsigned int key;
    unsigned int bits;
    struct s1 *left, *right;
}S1;
extern S a[1024];
static inline int bar( S* p, S1* n )
{
  S1 *curr;
  S1 *next;

  if ( n->left == n )
    return (int)(p->key == n->key);

  curr = n;
  next = n->left;

  while (curr->bits > next->bits ) {
      curr = next;
      if (p->key & (1 << curr->bits))
	next = curr->right;
      else
	next = curr->left;
  }

  return (int)(p->key == next->key);

}

int foo (S1 *root, int N)
{
  volatile int r;
  int i,j;
  for (i=0; i<N; i++)
    for (j=0;j<1024; j++)
      r = bar(&a[j], root);
  return 0;
} 

/* { dg-final { scan-tree-dump-times "key" 3 "pre" } } */
