/* PR c/59984 */
/* { dg-require-effective-target vect_simd_clones } */
/* { dg-additional-options "-fopenmp-simd" } */

#include "tree-vect.h"

#define N 128

int a[N];

#pragma omp declare simd
__attribute__((noinline)) void
foo (int in, int *out1, int *out2)
{
  *out1 = in * in - 1;
  *out2 = in * in + 1;
}

#pragma omp declare simd linear (out1, out2)
__attribute__((noinline)) void
bar (int in, int *out1, int *out2)
{
  *out1 = in * in - 1;
  *out2 = in * in + 1;
}

__attribute__((noinline)) void
test (void)
{
  int i;
  for (i = 0; i < N; i++)
    a[i] = i;
#pragma omp simd
  for (i = 0; i < N; i++)
    {
      int v1, v2;
      foo (a[i], &v1, &v2);
      a[i] = v1 * v2;
    }
  for (i = 0; i < N; i++)
    if (a[i] != i * i * i * i - 1)
      __builtin_abort ();
  for (i = 0; i < N; i++)
    a[i] = i;
#pragma omp simd
  for (i = 0; i < N; i++)
    {
      int v1, v2;
      bar (a[i], &v1, &v2);
      a[i] = v1 * v2;
    }
  for (i = 0; i < N; i++)
    if (a[i] != i * i * i * i - 1)
      __builtin_abort ();
}

int
main ()
{
  check_vect ();
  test ();
  return 0;
}

