Viewing file: pr59984.c (1.06 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* 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; }
|