(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c/
examples-4/
target-2.c
       1  /* { dg-do run } */
       2  
       3  #include <stdlib.h>
       4  
       5  #define N 100000
       6  
       7  void init (char *a1, char *a2)
       8  {
       9    char s = -1;
      10    int i;
      11    for (i = 0; i < N; i++)
      12      {
      13        a1[i] = s;
      14        a2[i] = i;
      15        s = -s;
      16      }
      17  }
      18  
      19  void check (char *a, char *b)
      20  {
      21    int i;
      22    for (i = 0; i < N; i++)
      23      if (a[i] != b[i])
      24        abort ();
      25  }
      26  
      27  void vec_mult_ref (char *p)
      28  {
      29    int i;
      30    char v1[N], v2[N];
      31  
      32    init (v1, v2);
      33  
      34    for (i = 0; i < N; i++)
      35      p[i] = v1[i] * v2[i];
      36  }
      37  
      38  void vec_mult (char *p)
      39  {
      40    int i;
      41    char v1[N], v2[N];
      42  
      43    init (v1, v2);
      44  
      45    #pragma omp target map(from: p[0:N])
      46      #pragma omp parallel for
      47        for (i = 0; i < N; i++)
      48  	p[i] = v1[i] * v2[i];
      49  }
      50  
      51  int main ()
      52  {
      53    char p1[N], p2[N];
      54    char v1[N], v2[N];
      55  
      56    init (v1, v2);
      57  
      58    vec_mult_ref (p1);
      59    vec_mult (p2);
      60  
      61    check (p1, p2);
      62  
      63    return 0;
      64  }