/* Test for ICE arising from VSX code generation.  */
/* { dg-do compile } */
/* { dg-options "-O3 -mdejagnu-cpu=power7 -funroll-loops" } */
/* { dg-require-effective-target powerpc_vsx_ok } */

int sourcenode;
int ARCHelems;
int *source_elms;
void vv12x12 (double *, double *, double *);
void
foo (int argc, char **argv)
{
  int i, j;
  int cor[4];
  double Ke[12][12], Me[12], Ce[12], Mexv[12], Cexv[12], v[12];
  for (i = 0; i < ARCHelems; i++)
    {
      for (j = 0; j < 12; j++)
	Me[j] = 0.0;
      if (cor[j] == sourcenode)
	vv12x12 (Me, v, Mexv);
      vv12x12 (Ce, v, Cexv);
      if (source_elms[i] == 3)
	for (j = 0; j < 12; j++)
	  {
	    v[j] = -v[j];
	    Mexv[j] = -Mexv[j];
	    Cexv[j] = -Cexv[j];
	  }
    }
}
