/* { dg-options "-O3 -fno-vect-cost-model" } */
struct {
    float real;
    float img;
} g[11];

float __attribute__ ((noclone))
foo_11 (void)
{
  float sum = 0.0;
  for (int i = 0; i < 11; ++i)
    sum += g[i].real;
  return sum;
}

float __attribute__ ((noclone))
foo_10 (void)
{
  float sum = 0.0;
  for (int i = 0; i < 10; ++i)
    sum += g[i].real;
  return sum;
}

int main (void)
{
  float check_10 = 0.0;
  float check_11 = 0.0;
  for (int i = 0; i < 11; ++i)
    {
      asm volatile ("" : : : "memory");
      g[i].real = (float) i;
      g[i].img = (float) -i;
      if (i < 10)
	check_10 += (float) i;
      check_11 += (float) i;
    }

  if (foo_10 () != check_10)
    __builtin_abort ();
  if (foo_11 () != check_11)
    __builtin_abort ();

  return 0;
}
