/* Test for reload ICE arising from POWER9 Vector Dform code generation.  */
/* { dg-do compile } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-options "-O3 -mpower9-vector -funroll-loops -fno-aggressive-loop-optimizations" } */

typedef double vec[3];
struct vec_t
{
  vec x;
  vec y;
};
int a, j, k, l, m, n, o, p, q;
double b, i;
vec c;
double h[6];
void func1 (vec);

void
func2 (double *b)
{
  for (; k; k--)
    for (; j <= k;)
      for (; m <= q; m++)
	for (; n <= k; n++)
	  for (; o <= l; o++)
	    {
	      j = p + m + n + o;
	      h[j] = i;
	    }
}

void
func3 (void)
{
  struct vec_t d;
  func1 (d.y);
  func2 (&b);
  for (; a;)
    {
      double *e = d.y, *g;
      double f;
      c[0] = g[0] + f * e[0];
      c[1] = g[1] + f * e[1];
      func1 (c);
    }
}
