(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-c-c++-common/
nested-2.c
       1  /* { dg-do run } */
       2  
       3  #include <stdlib.h>
       4  
       5  int
       6  main (int argc, char *argv[])
       7  {
       8  #define N 10
       9      char a[N];
      10      int i;
      11  
      12      for (i = 0; i < N; ++i)
      13         a[i] = 0;
      14  
      15  #pragma acc data copy (a)
      16      {
      17  #pragma acc parallel present (a)
      18          {
      19              int j;
      20  
      21              for (j = 0; j < N; ++j)
      22                  a[j] = j;
      23          }
      24      }
      25  
      26      for (i = 0; i < N; ++i)
      27      {
      28          if (a[i] != i)
      29              abort ();
      30      }
      31  
      32      for (i = 0; i < N; ++i)
      33         a[i] = 0;
      34  
      35  #pragma acc data copy (a)
      36      {
      37  #pragma acc kernels present (a)
      38          {
      39              int j;
      40  
      41              for (j = 0; j < N; ++j)
      42                  a[j] = j;
      43          }
      44      }
      45  
      46      for (i = 0; i < N; ++i)
      47      {
      48          if (a[i] != i)
      49              abort ();
      50      }
      51  
      52      for (i = 0; i < N; ++i)
      53          a[i] = 0;
      54  
      55  #pragma acc data copy (a)
      56      {
      57  #pragma acc data present (a)
      58          {
      59  #pragma acc parallel present (a)
      60              {
      61                  int j;
      62  
      63                  for (j = 0; j < N; ++j)
      64                      a[j] = j;
      65              }
      66          }
      67      }
      68  
      69      for (i = 0; i < N; ++i)
      70      {
      71          if (a[i] != i)
      72              abort ();
      73      }
      74  
      75  #pragma acc data copy (a)
      76      {
      77  #pragma acc data present (a)
      78          {
      79  #pragma acc kernels present (a)
      80              {
      81                  int j;
      82  
      83                  for (j = 0; j < N; ++j)
      84                      a[j] = j;
      85              }
      86          }
      87      }
      88  
      89      for (i = 0; i < N; ++i)
      90      {
      91          if (a[i] != i)
      92              abort ();
      93      }
      94  
      95      for (i = 0; i < N; ++i)
      96          a[i] = 0;
      97  
      98  #pragma acc enter data copyin (a)
      99  
     100  #pragma acc data present (a)
     101      {
     102  #pragma acc parallel present (a)
     103          {
     104              int j;
     105  
     106              for (j = 0; j < N; ++j)
     107                  a[j] = j;
     108          }
     109      }
     110  
     111  #pragma acc exit data copyout (a)
     112  
     113      for (i = 0; i < N; ++i)
     114      {
     115          if (a[i] != i)
     116              abort ();
     117      }
     118  
     119  #pragma acc enter data copyin (a)
     120  
     121  #pragma acc data present (a)
     122      {
     123  #pragma acc kernels present (a)
     124          {
     125              int j;
     126  
     127              for (j = 0; j < N; ++j)
     128                  a[j] = j;
     129          }
     130      }
     131  
     132  #pragma acc exit data copyout (a)
     133  
     134      for (i = 0; i < N; ++i)
     135      {
     136          if (a[i] != i)
     137              abort ();
     138      }
     139  
     140  
     141  #pragma acc enter data create (a)
     142  
     143  #pragma acc parallel default (present)
     144      {
     145        for (int j = 0; j < N; ++j)
     146  	a[j] = j + 1;
     147      }
     148  
     149  #pragma acc update host (a)
     150  
     151      for (i = 0; i < N; ++i)
     152        {
     153          if (a[i] != i + 1)
     154  	  abort ();
     155        }
     156  
     157  #pragma acc kernels default (present)
     158      {
     159        for (int j = 0; j < N; ++j)
     160  	a[j] = j + 2;
     161      }
     162  
     163  #pragma acc exit data copyout (a)
     164  
     165      for (i = 0; i < N; ++i)
     166        {
     167          if (a[i] != i + 2)
     168  	  abort ();
     169        }
     170  
     171      return 0;
     172  }