blob: d6977f0020878c043376b7e7bfdc6a0e85ac2663 [file] [log] [blame]
/* 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;
}