/* This code is from the beginning of combine_reloads in reload.c in
   GCC 3.1-20020117, with simplifications.  It compiled incorrectly
   for -O2 -fprefetch-loop-arrays for ix86 targets.  */

/* { dg-do run } */
/* { dg-options "-O2 -fprefetch-loop-arrays -w" } */
/* { dg-options "-O2 -fprefetch-loop-arrays -mtune=pentium3 -w" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */


struct reload
{
  int first_member;
  int out;
  int final_member;
};

int n_reloads;
struct reload rld[10];

static int
combine_reloads ()
{
  int i;
  int output_reload = -1;
  int secondary_out = -1;

  for (i = 0; i < n_reloads; i++)
    if (rld[i].out != 0)
      {
	if (output_reload >= 0)
	  return output_reload;
	output_reload = i;
      }
  return output_reload;
}

int
main ()
{
  n_reloads = 4;
  rld[2].out = 2;
  if (combine_reloads () != 2)
    abort ();
  exit (0);
}
