(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.oacc-c-c++-common/
routine-1.c
       1  // Defaults, if not "#include"d from ../libgomp.oacc-c++/routine-1-*.C.
       2  #ifndef TEMPLATE
       3  # define TEMPLATE
       4  # define TYPE int
       5  # define RETURN_1 TYPE
       6  # define RETURN_2 
       7  #endif
       8  
       9  #include <stdlib.h>
      10  
      11  #pragma acc routine
      12  TEMPLATE
      13  RETURN_1 fact(TYPE n) RETURN_2
      14  {
      15    if (n == 0 || n == 1)
      16      return 1;
      17    else
      18      return n * fact (n - 1);
      19  }
      20  
      21  int main()
      22  {
      23    int *s, *g, *w, *v, *gw, *gv, *wv, *gwv, i, n = 10;
      24  
      25    s = (int *) malloc (sizeof (int) * n);
      26    g = (int *) malloc (sizeof (int) * n);
      27    w = (int *) malloc (sizeof (int) * n);
      28    v = (int *) malloc (sizeof (int) * n);
      29    gw = (int *) malloc (sizeof (int) * n);
      30    gv = (int *) malloc (sizeof (int) * n);
      31    wv = (int *) malloc (sizeof (int) * n);
      32    gwv = (int *) malloc (sizeof (int) * n);
      33  
      34  #pragma acc parallel loop async copyout(s[0:n]) seq
      35    for (i = 0; i < n; i++)
      36      s[i] = fact (i);
      37  
      38  #pragma acc parallel loop async copyout(g[0:n]) gang
      39    for (i = 0; i < n; i++)
      40      g[i] = fact (i);
      41  
      42  #pragma acc parallel loop async copyout(w[0:n]) worker
      43    for (i = 0; i < n; i++)
      44      w[i] = fact (i);
      45  
      46  #pragma acc parallel loop async copyout(v[0:n]) vector
      47    for (i = 0; i < n; i++)
      48      v[i] = fact (i);
      49  
      50  #pragma acc parallel loop async copyout(gw[0:n]) gang worker
      51    for (i = 0; i < n; i++)
      52      gw[i] = fact (i);
      53  
      54  #pragma acc parallel loop async copyout(gv[0:n]) gang vector
      55    for (i = 0; i < n; i++)
      56      gv[i] = fact (i);
      57  
      58  #pragma acc parallel loop async copyout(wv[0:n]) worker vector
      59    for (i = 0; i < n; i++)
      60      wv[i] = fact (i);
      61  
      62  #pragma acc parallel loop async copyout(gwv[0:n]) gang worker vector
      63    for (i = 0; i < n; i++)
      64      gwv[i] = fact (i);
      65  
      66  #pragma acc wait
      67  
      68    for (i = 0; i < n; i++)
      69      if (s[i] != fact (i))
      70        abort ();
      71    for (i = 0; i < n; i++)
      72      if (g[i] != s[i])
      73        abort ();
      74    for (i = 0; i < n; i++)
      75      if (w[i] != s[i])
      76        abort ();
      77    for (i = 0; i < n; i++)
      78      if (v[i] != s[i])
      79        abort ();
      80    for (i = 0; i < n; i++)
      81      if (gw[i] != s[i])
      82        abort ();
      83    for (i = 0; i < n; i++)
      84      if (gv[i] != s[i])
      85        abort ();
      86    for (i = 0; i < n; i++)
      87      if (wv[i] != s[i])
      88        abort ();
      89    for (i = 0; i < n; i++)
      90      if (gwv[i] != s[i])
      91        abort ();
      92  
      93    return 0;
      94  }