1 
2 // Tile parititioning
3 
Ok()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 
Bad()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 }
108