(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-c-c++-common/
routine-4.c
       1  /* { dg-additional-options "-fopt-info-note-omp" }
       2     { dg-additional-options "--param=openacc-privatization=noisy" }
       3     { dg-additional-options "-foffload=-fopt-info-note-omp" }
       4     { dg-additional-options "-foffload=--param=openacc-privatization=noisy" }
       5     for testing/documenting aspects of that functionality.  */
       6  
       7  #include <stdlib.h>
       8  #include <stdio.h>
       9  
      10  #define M 8
      11  #define N 32
      12  
      13  #pragma acc routine vector
      14  void
      15  vector (int *a)
      16  {
      17    int i;
      18  
      19  #pragma acc loop vector
      20    /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
      21    for (i = 0; i < N; i++)
      22      a[i] -= a[i]; 
      23  }
      24  
      25  #pragma acc routine worker
      26  void
      27  worker (int *b)
      28  {
      29    int i, j;
      30  
      31  #pragma acc loop worker
      32    /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
      33    for (i = 0; i < N; i++)
      34      {
      35  #pragma acc loop vector
      36        /* { dg-note {variable 'j' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
      37        for (j = 0; j < M; j++)
      38          b[i * M + j] += b[i  * M + j]; 
      39      }
      40  }
      41  
      42  #pragma acc routine gang
      43  void
      44  gang (int *a)
      45  {
      46    int i;
      47  
      48  #pragma acc loop gang worker vector
      49    /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
      50    for (i = 0; i < N; i++)
      51      a[i] -= i; 
      52  }
      53  
      54  #pragma acc routine seq
      55  void
      56  seq (int *a)
      57  {
      58    int i;
      59  
      60    for (i = 0; i < N; i++)
      61      a[i] += 1;
      62  }
      63  
      64  int
      65  main(int argc, char **argv)
      66  {
      67    int i;
      68    int a[N];
      69    int b[M * N];
      70  
      71    i = 0;
      72  
      73    for (i = 0; i < N; i++)
      74      a[i] = 0;
      75  
      76  #pragma acc parallel copy (a[0:N])
      77    {
      78  #pragma acc loop seq
      79      /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
      80      for (i = 0; i < N; i++)
      81        seq (&a[0]);
      82    }
      83  
      84    for (i = 0; i < N; i++)
      85      {
      86        if (a[i] != N)
      87  	abort ();
      88      }
      89  
      90  #pragma acc parallel copy (a[0:N])
      91    {
      92  #pragma acc loop seq
      93      /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
      94      for (i = 0; i < N; i++)
      95        gang (&a[0]);
      96    }
      97  
      98    for (i = 0; i < N; i++)
      99      {
     100        if (a[i] != N + (N * (-1 * i)))
     101  	abort ();
     102      }
     103  
     104    for (i = 0; i < N; i++)
     105      a[i] = i;
     106  
     107  #pragma acc parallel copy (b[0:M*N])
     108    {
     109      worker (&b[0]);
     110    }
     111  
     112    for (i = 0; i < N; i++)
     113      {
     114        if (a[i] != i)
     115  	abort ();
     116      }
     117  
     118    for (i = 0; i < N; i++)
     119      a[i] = i;
     120  
     121  #pragma acc parallel copy (a[0:N])
     122    {
     123  #pragma acc loop
     124      /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } .-1 } */
     125      for (i = 0; i < N; i++)
     126        vector (&a[0]);
     127    }
     128  
     129    for (i = 0; i < N; i++)
     130      {
     131        if (a[i] != 0)
     132  	abort ();
     133      }
     134  
     135    return 0;
     136  }