1  
       2  // Tile parititioning
       3  
       4  void Ok ()
       5  {
       6  #pragma acc parallel num_gangs (10) num_workers(32) vector_length(32)
       7    {
       8      
       9  #pragma acc loop tile(*) gang vector
      10      for (int ix = 0; ix < 10; ix++)
      11        {
      12        }
      13  
      14  #pragma acc loop tile(*)
      15      for (int ix = 0; ix < 10; ix++)
      16        {
      17        }
      18  
      19  #pragma acc loop tile(*) gang
      20      for (int ix = 0; ix < 10; ix++)
      21        {
      22  	#pragma acc loop vector
      23  	for (int jx = 0; jx < 10; jx++)
      24  	  ;
      25        }
      26  
      27  #pragma acc loop tile(*)
      28      for (int ix = 0; ix < 10; ix++)
      29        {
      30  	#pragma acc loop vector
      31  	for (int jx = 0; jx < 10; jx++)
      32  	  ;
      33        }
      34  
      35  #pragma acc loop gang
      36      for (int jx = 0; jx < 10; jx++)
      37        {
      38  #pragma acc loop tile(*) vector
      39  	for (int ix = 0; ix < 10; ix++)
      40  	  {
      41  	  }
      42  
      43  #pragma acc loop tile(*)
      44  	for (int ix = 0; ix < 10; ix++)
      45  	  {
      46  	  }
      47        }
      48  
      49  #pragma acc loop tile(*) worker
      50      for (int ix = 0; ix < 10; ix++)
      51        {
      52  	#pragma acc loop vector
      53  	for (int jx = 0; jx < 10; jx++)
      54  	  ;
      55        }
      56    }
      57  }
      58  
      59  void Bad ()
      60  {
      61  #pragma acc parallel num_gangs (10) num_workers(32) vector_length(32)
      62    {
      63      
      64  #pragma acc loop tile(*) gang vector /* { dg-message "containing loop" } */
      65      for (int ix = 0; ix < 10; ix++)
      66        {
      67  #pragma acc loop vector /* { dg-error "uses same" } */
      68  	for (int jx = 0; jx < 10; jx++)
      69  	  ;
      70        }
      71  
      72  #pragma acc loop tile(*) gang vector
      73      for (int ix = 0; ix < 10; ix++)
      74        {
      75  	#pragma acc loop auto /* { dg-warning "insufficient partitioning" } */
      76  	for (int jx = 0; jx < 10; jx++)
      77  	  ;
      78        }
      79  
      80  #pragma acc loop tile(*) auto /* { dg-warning "insufficient partitioning" } */
      81      for (int ix = 0; ix < 10; ix++)
      82        {
      83  	#pragma acc loop worker
      84  	for (int jx = 0; jx < 10; jx++)
      85  	  ;
      86        }
      87  
      88  #pragma acc loop worker /* { dg-message "containing loop" } */
      89      for (int jx = 0; jx < 10; jx++)
      90        {
      91  #pragma acc loop tile(*) gang vector /* { dg-error "incorrectly nested" } */
      92  	for (int ix = 0; ix < 10; ix++)
      93  	  {
      94  	  }
      95  
      96  #pragma acc loop tile(*) vector /* { dg-warning "insufficient partitioning" } */
      97  	for (int ix = 0; ix < 10; ix++)
      98  	  {
      99  	  }
     100  
     101  #pragma acc loop tile(*) /* { dg-warning "insufficient partitioning" } */
     102  	for (int ix = 0; ix < 10; ix++)
     103  	  {
     104  	  }
     105        }
     106    }
     107  }