/* { dg-do run } */
/* { dg-require-effective-target p9vector_hw } */
/* { dg-options "-O3 -mdejagnu-cpu=power9" } */

/* Verify that we get correct code when we vectorize this SAD loop using
   vabsduh. */

extern void abort ();
extern int abs (int __x) __attribute__ ((__nothrow__, __leaf__)) __attribute__ ((__const__));

static int
foo (unsigned short *w, int i, unsigned short *x, int j)
{
  int tot = 0;
  for (int a = 0; a < 16; a++)
    {
      for (int b = 0; b < 8; b++)
	tot += abs (w[b] - x[b]);
      w += i;
      x += j;
    }
  return tot;
}

void
bar (unsigned short *w, unsigned short *x, int i, int *result)
{
  *result = foo (w, 8, x, i);
}

int
main ()
{
  unsigned short m[128];
  unsigned short n[128];
  int sum, i;

  for (i = 0; i < 128; ++i)
    if (i % 2 == 0)
      {
	m[i] = (i % 8) * 2 + 1;
	n[i] = i % 8;
      }
    else
      {
	m[i] = (i % 8) * 4 - 3;
	n[i] = (i % 8) >> 1;
      }
  
  bar (m, n, 8, &sum);

  if (sum != 992)
    abort ();

  return 0;
}
