(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-c-c++-common/
kernels-loop-data-enter-exit-2.c
       1  #include <stdlib.h>
       2  
       3  #define N (1024 * 512)
       4  #define COUNTERTYPE unsigned int
       5  
       6  int
       7  main (void)
       8  {
       9    unsigned int *__restrict a;
      10    unsigned int *__restrict b;
      11    unsigned int *__restrict c;
      12  
      13    a = (unsigned int *__restrict)malloc (N * sizeof (unsigned int));
      14    b = (unsigned int *__restrict)malloc (N * sizeof (unsigned int));
      15    c = (unsigned int *__restrict)malloc (N * sizeof (unsigned int));
      16  
      17  #pragma acc enter data create (a[0:N])
      18  #pragma acc kernels present (a[0:N])
      19    {
      20      for (COUNTERTYPE i = 0; i < N; i++)
      21        a[i] = i * 2;
      22    }
      23  #pragma acc exit data copyout (a[0:N])
      24  
      25  #pragma acc enter data create (b[0:N])
      26  #pragma acc kernels present (b[0:N])
      27    {
      28      for (COUNTERTYPE i = 0; i < N; i++)
      29        b[i] = i * 4;
      30    }
      31  #pragma acc exit data copyout (b[0:N])
      32  
      33  
      34  #pragma acc enter data copyin (a[0:N], b[0:N]) create (c[0:N])
      35  #pragma acc kernels present (a[0:N], b[0:N], c[0:N])
      36    {
      37      for (COUNTERTYPE ii = 0; ii < N; ii++)
      38        c[ii] = a[ii] + b[ii];
      39    }
      40  #pragma acc exit data copyout (c[0:N])
      41  
      42    for (COUNTERTYPE i = 0; i < N; i++)
      43      if (c[i] != a[i] + b[i])
      44        abort ();
      45  
      46    free (a);
      47    free (b);
      48    free (c);
      49  
      50    return 0;
      51  }