/* { dg-do compile { target le } } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-options "-mdejagnu-cpu=power8 -O3 -ffast-math" } */
/* { dg-final { scan-assembler "lxvd2x" } } */
/* { dg-final { scan-assembler-not "xxpermdi" { target le } } } */

/* Verify that swap optimization works correctly in the presence of
   a V2DFmode reduction.  */

extern double optvalue;
extern void obfuscate (double, unsigned int);

void
foo (double *x, double *y, unsigned int n, unsigned int m)
{
  unsigned int i, j;
  double sacc;
  for (j = 0; j < m; ++j)
    {
      sacc = 0.0;
      for (i = 0; i < n; ++i)
	sacc += x[i] * y[i];
      obfuscate (sacc, n);
    }
  optvalue = n * 2.0 * m;
}
