(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
goacc/
declare-1.c
       1  /* Test valid use of the OpenACC 'declare' directive.  */
       2  
       3  
       4  int v0;
       5  #pragma acc declare create(v0)
       6  
       7  int v1;
       8  #pragma acc declare copyin(v1)
       9  
      10  int *v2;
      11  #pragma acc declare deviceptr(v2)
      12  
      13  int v3;
      14  #pragma acc declare device_resident(v3)
      15  
      16  int v4;
      17  #pragma acc declare link(v4)
      18  
      19  int v5, v6, v7, v8;
      20  #pragma acc declare create(v5, v6) copyin(v7, v8)
      21  
      22  int v9;
      23  #pragma acc declare present_or_copyin(v9)
      24  
      25  int v10;
      26  #pragma acc declare present_or_create(v10)
      27  
      28  
      29  void
      30  f (void)
      31  {
      32    int va0;
      33  #pragma acc declare create(va0)
      34  
      35    int va1;
      36  #pragma acc declare copyin(va1)
      37  
      38    int *va2;
      39  #pragma acc declare deviceptr(va2)
      40  
      41    int va3;
      42  #pragma acc declare device_resident(va3)
      43  
      44    extern int ve0;
      45  #pragma acc declare create(ve0)
      46  
      47    extern int ve1;
      48  #pragma acc declare copyin(ve1)
      49  
      50    extern int *ve2;
      51  #pragma acc declare deviceptr(ve2)
      52  
      53    extern int ve3;
      54  #pragma acc declare device_resident(ve3)
      55  
      56    extern int ve4;
      57  #pragma acc declare link(ve4)
      58  
      59    extern int ve5;
      60  #pragma acc declare present_or_copyin(ve5)
      61   
      62    extern int ve6;
      63  #pragma acc declare present_or_create(ve6)
      64  
      65    int va5;
      66  #pragma acc declare copy(va5)
      67  
      68    int va6;
      69  #pragma acc declare copyout(va6)
      70  
      71    int va7;
      72  #pragma acc declare present(va7)
      73  
      74    int va8;
      75  #pragma acc declare present_or_copy(va8)
      76  
      77    int va9;
      78  #pragma acc declare present_or_copyin(va9)
      79  
      80    int va10;
      81  #pragma acc declare present_or_copyout(va10)
      82  
      83    int va11;
      84  #pragma acc declare present_or_create(va11)
      85  
      86   a:
      87    {
      88      int va0;
      89  #pragma acc declare create(va0)
      90      if (v1)
      91        goto a;
      92      else
      93        goto b;
      94    }
      95   b:;
      96  }
      97  
      98  
      99  /* The same as 'f'.  */
     100  
     101  void
     102  f_2 (void)
     103  {
     104    int va0;
     105  #pragma acc declare create(va0)
     106  
     107    int va1;
     108  #pragma acc declare copyin(va1)
     109  
     110    int *va2;
     111  #pragma acc declare deviceptr(va2)
     112  
     113    int va3;
     114  #pragma acc declare device_resident(va3)
     115  
     116  #ifndef __cplusplus
     117    /* TODO PR90868
     118  
     119       C: "error: variable '[...]' used more than once with '#pragma acc declare'".  */
     120  #else
     121    extern int ve0;
     122  #pragma acc declare create(ve0)
     123  
     124    extern int ve1;
     125  #pragma acc declare copyin(ve1)
     126  
     127    extern int *ve2;
     128  #pragma acc declare deviceptr(ve2)
     129  
     130    extern int ve3;
     131  #pragma acc declare device_resident(ve3)
     132  
     133    extern int ve4;
     134  #pragma acc declare link(ve4)
     135  
     136    extern int ve5;
     137  #pragma acc declare present_or_copyin(ve5)
     138   
     139    extern int ve6;
     140  #pragma acc declare present_or_create(ve6)
     141  #endif
     142  
     143    int va5;
     144  #pragma acc declare copy(va5)
     145  
     146    int va6;
     147  #pragma acc declare copyout(va6)
     148  
     149    int va7;
     150  #pragma acc declare present(va7)
     151  
     152    int va8;
     153  #pragma acc declare present_or_copy(va8)
     154  
     155    int va9;
     156  #pragma acc declare present_or_copyin(va9)
     157  
     158    int va10;
     159  #pragma acc declare present_or_copyout(va10)
     160  
     161    int va11;
     162  #pragma acc declare present_or_create(va11)
     163  
     164   a:
     165    {
     166      int va0;
     167  #pragma acc declare create(va0)
     168      if (v1)
     169        goto a;
     170      else
     171        goto b;
     172    }
     173   b:;
     174  }
     175  
     176  
     177  /* The same as 'f' but everything contained in an OpenACC 'data' construct.  */
     178  
     179  void
     180  f_data (void)
     181  {
     182  #pragma acc data
     183    {
     184      int va0;
     185  # pragma acc declare create(va0)
     186  
     187      int va1;
     188  # pragma acc declare copyin(va1)
     189  
     190      int *va2;
     191  # pragma acc declare deviceptr(va2)
     192  
     193      int va3;
     194  # pragma acc declare device_resident(va3)
     195  
     196  #if 0
     197      /* TODO PR90868
     198  
     199         C: "error: variable '[...]' used more than once with '#pragma acc declare'".
     200         C++: ICE during gimplification.  */
     201  
     202      extern int ve0;
     203  # pragma acc declare create(ve0)
     204  
     205      extern int ve1;
     206  # pragma acc declare copyin(ve1)
     207  
     208      extern int *ve2;
     209  # pragma acc declare deviceptr(ve2)
     210  
     211      extern int ve3;
     212  # pragma acc declare device_resident(ve3)
     213  
     214      extern int ve4;
     215  # pragma acc declare link(ve4)
     216  
     217      extern int ve5;
     218  # pragma acc declare present_or_copyin(ve5)
     219   
     220      extern int ve6;
     221  # pragma acc declare present_or_create(ve6)
     222  #endif
     223  
     224      int va5;
     225  # pragma acc declare copy(va5)
     226  
     227      int va6;
     228  # pragma acc declare copyout(va6)
     229  
     230      int va7;
     231  # pragma acc declare present(va7)
     232  
     233      int va8;
     234  # pragma acc declare present_or_copy(va8)
     235  
     236      int va9;
     237  # pragma acc declare present_or_copyin(va9)
     238  
     239      int va10;
     240  # pragma acc declare present_or_copyout(va10)
     241  
     242      int va11;
     243  # pragma acc declare present_or_create(va11)
     244  
     245    a:
     246      {
     247        int va0;
     248  # pragma acc declare create(va0)
     249        if (v1)
     250  	goto a;
     251        else
     252  	goto b;
     253      }
     254    b:;
     255    }
     256  }