(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
goacc/
orphan-reductions-3.c
       1  /* Verify that the error message for gang reduction on orphaned OpenACC loops
       2     is not reported for non-orphaned loops. */
       3  
       4  /* { dg-additional-options "-Wopenacc-parallelism" } */
       5  
       6  int
       7  kernels (int n)
       8  {
       9    int i, s1 = 0, s2 = 0;
      10  #pragma acc kernels
      11    {
      12  #pragma acc loop gang reduction(+:s1) /* { dg-bogus "gang reduction on an orphan loop" } */
      13    for (i = 0; i < n; i++)
      14      s1 = s1 + 2;
      15  
      16  #pragma acc loop gang reduction(+:s2) /* { dg-bogus "gang reduction on an orphan loop" } */
      17    for (i = 0; i < n; i++)
      18      s2 = s2 + 2;
      19    }
      20    return s1 + s2;
      21  }
      22  
      23  int
      24  parallel (int n)
      25  {
      26    int i, s1 = 0, s2 = 0;
      27  #pragma acc parallel
      28    {
      29  #pragma acc loop gang reduction(+:s1) /* { dg-bogus "gang reduction on an orphan loop" } */
      30    for (i = 0; i < n; i++)
      31      s1 = s1 + 2;
      32  
      33  #pragma acc loop gang reduction(+:s2) /* { dg-bogus "gang reduction on an orphan loop" } */
      34    for (i = 0; i < n; i++)
      35      s2 = s2 + 2;
      36    }
      37    return s1 + s2;
      38  }
      39  
      40  int
      41  serial (int n)
      42  {
      43    int i, s1 = 0, s2 = 0;
      44  #pragma acc serial /* { dg-warning "region contains gang partitioned code but is not gang partitioned" } */
      45    {
      46  #pragma acc loop gang reduction(+:s1) /* { dg-bogus "gang reduction on an orphan loop" } */
      47    for (i = 0; i < n; i++)
      48      s1 = s1 + 2;
      49  
      50  #pragma acc loop gang reduction(+:s2) /* { dg-bogus "gang reduction on an orphan loop" } */
      51    for (i = 0; i < n; i++)
      52      s2 = s2 + 2;
      53    }
      54    return s1 + s2;
      55  }
      56  
      57  int
      58  serial_combined (int n)
      59  {
      60    int i, s1 = 0, s2 = 0;
      61  #pragma acc serial loop gang reduction(+:s1) /* { dg-bogus "gang reduction on an orphan loop" } */
      62    /* { dg-warning "region contains gang partitioned code but is not gang partitioned" "" { target *-*-* } .-1 } */
      63    for (i = 0; i < n; i++)
      64      s1 = s1 + 2;
      65  
      66  #pragma acc serial loop gang reduction(+:s2) /* { dg-bogus "gang reduction on an orphan loop" } */
      67    /* { dg-warning "region contains gang partitioned code but is not gang partitioned" "" { target *-*-* } .-1 } */
      68    for (i = 0; i < n; i++)
      69      s2 = s2 + 2;
      70  
      71    return s1 + s2;
      72  }
      73  
      74  int
      75  parallel_combined (int n)
      76  {
      77    int i, s1 = 0, s2 = 0;
      78  #pragma acc parallel loop gang reduction(+:s1) /* { dg-bogus "gang reduction on an orphan loop" } */
      79    for (i = 0; i < n; i++)
      80      s1 = s1 + 2;
      81  
      82  #pragma acc parallel loop gang reduction(+:s2) /* { dg-bogus "gang reduction on an orphan loop" } */
      83    for (i = 0; i < n; i++)
      84      s2 = s2 + 2;
      85  
      86    return s1 + s2;
      87  }
      88  
      89  int
      90  kernels_combined (int n)
      91  {
      92    int i, s1 = 0, s2 = 0;
      93  #pragma acc kernels loop gang reduction(+:s1) /* { dg-bogus "gang reduction on an orphan loop" } */
      94    for (i = 0; i < n; i++)
      95      s1 = s1 + 2;
      96  
      97  #pragma acc kernels loop gang reduction(+:s2) /* { dg-bogus "gang reduction on an orphan loop" } */
      98    for (i = 0; i < n; i++)
      99      s2 = s2 + 2;
     100  
     101    return s1 + s2;
     102  }