1 // RUN: %clang_cc1 %s -fopenacc -verify
3 template<typename T
, unsigned I
>
6 #pragma acc parallel loop vector
7 for(int j
= 0; j
< 5; ++j
);
9 #pragma acc parallel loop vector(I)
10 for(int j
= 0; j
< 5; ++j
);
12 #pragma acc parallel loop vector(length:I)
13 for(int j
= 0; j
< 5; ++j
);
15 #pragma acc serial loop vector
16 for(int j
= 0; j
< 5; ++j
);
18 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
19 #pragma acc serial loop vector(I)
20 for(int j
= 0; j
< 5; ++j
);
22 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
23 #pragma acc serial loop vector(length:I)
24 for(int j
= 0; j
< 5; ++j
);
26 #pragma acc kernels loop vector
27 for(int j
= 0; j
< 5; ++j
);
29 #pragma acc kernels loop vector(I)
30 for(int j
= 0; j
< 5; ++j
);
32 #pragma acc kernels loop vector(length:I)
33 for(int j
= 0; j
< 5; ++j
);
35 #pragma acc kernels loop vector vector_length(t)
36 for(int j
= 0; j
< 5; ++j
);
38 #pragma acc kernels loop vector_length(t) vector
39 for(int j
= 0; j
< 5; ++j
);
41 // expected-error@+2{{'vector_length' clause not allowed on a 'kernels loop' construct that has a 'vector' clause with an argument}}
42 // expected-note@+1{{previous clause is here}}
43 #pragma acc kernels loop vector(I) vector_length(t)
44 for(int j
= 0; j
< 5; ++j
);
46 // expected-error@+2{{'length' argument to 'vector' clause not allowed on a 'kernels loop' construct that has a 'vector_length' clause}}
47 // expected-note@+1{{previous clause is here}}
48 #pragma acc kernels loop vector_length(t) vector(I)
49 for(int j
= 0; j
< 5; ++j
);
51 #pragma acc parallel loop vector
52 for(int j
= 0; j
< 5; ++j
) {
53 // expected-error@+4{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}
54 // expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'vector' clause}}
55 // expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'vector' clause}}
56 // expected-note@-5 3{{previous clause is here}}
57 #pragma acc loop vector worker, gang
58 for(int j
= 0; j
< 5; ++j
);
60 #pragma acc parallel loop vector
61 for(int j
= 0; j
< 5; ++j
) {
62 #pragma acc serial loop vector worker, gang
63 for(int j
= 0; j
< 5; ++j
);
66 #pragma acc loop vector
67 for(int j
= 0; j
< 5; ++j
) {
68 #pragma acc serial loop vector worker, gang
69 for(int j
= 0; j
< 5; ++j
);
72 #pragma acc kernels vector_length(t)
73 for(int j
= 0; j
< 5; ++j
) {
74 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
75 #pragma acc serial loop vector(I)
76 for(int j
= 0; j
< 5; ++j
);
79 #pragma acc kernels vector_length(t)
80 for(int j
= 0; j
< 5; ++j
) {
81 #pragma acc parallel loop vector(I)
82 for(int j
= 0; j
< 5; ++j
);
92 #pragma acc parallel loop vector
93 for(int j
= 0; j
< 5; ++j
);
95 #pragma acc parallel loop vector(I)
96 for(int j
= 0; j
< 5; ++j
);
98 #pragma acc parallel loop vector(length:I)
99 for(int j
= 0; j
< 5; ++j
);
101 #pragma acc serial loop vector
102 for(int j
= 0; j
< 5; ++j
);
104 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
105 #pragma acc serial loop vector(I)
106 for(int j
= 0; j
< 5; ++j
);
108 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
109 #pragma acc serial loop vector(length:I)
110 for(int j
= 0; j
< 5; ++j
);
112 #pragma acc kernels loop vector
113 for(int j
= 0; j
< 5; ++j
);
115 #pragma acc kernels loop vector(I)
116 for(int j
= 0; j
< 5; ++j
);
118 #pragma acc kernels loop vector(length:I)
119 for(int j
= 0; j
< 5; ++j
);
121 #pragma acc kernels loop vector vector_length(t)
122 for(int j
= 0; j
< 5; ++j
);
124 #pragma acc kernels loop vector_length(t) vector
125 for(int j
= 0; j
< 5; ++j
);
127 // expected-error@+2{{'vector_length' clause not allowed on a 'kernels loop' construct that has a 'vector' clause with an argument}}
128 // expected-note@+1{{previous clause is here}}
129 #pragma acc kernels loop vector(I) vector_length(t)
130 for(int j
= 0; j
< 5; ++j
);
132 // expected-error@+2{{'length' argument to 'vector' clause not allowed on a 'kernels loop' construct that has a 'vector_length' clause}}
133 // expected-note@+1{{previous clause is here}}
134 #pragma acc kernels loop vector_length(t) vector(I)
135 for(int j
= 0; j
< 5; ++j
);
137 #pragma acc parallel loop vector
138 for(int j
= 0; j
< 5; ++j
) {
139 // expected-error@+4{{loop with a 'vector' clause may not exist in the region of a 'vector' clause}}
140 // expected-error@+3{{loop with a 'worker' clause may not exist in the region of a 'vector' clause}}
141 // expected-error@+2{{loop with a 'gang' clause may not exist in the region of a 'vector' clause}}
142 // expected-note@-5 3{{previous clause is here}}
143 #pragma acc loop vector worker, gang
144 for(int j
= 0; j
< 5; ++j
);
146 #pragma acc parallel loop vector
147 for(int j
= 0; j
< 5; ++j
) {
148 #pragma acc serial loop vector worker, gang
149 for(int j
= 0; j
< 5; ++j
);
152 #pragma acc loop vector
153 for(int j
= 0; j
< 5; ++j
) {
154 #pragma acc serial loop vector worker, gang
155 for(int j
= 0; j
< 5; ++j
);
158 #pragma acc kernels vector_length(t)
159 for(int j
= 0; j
< 5; ++j
) {
160 #pragma acc parallel loop vector(I)
161 for(int j
= 0; j
< 5; ++j
);
164 #pragma acc kernels vector_length(t)
165 for(int j
= 0; j
< 5; ++j
) {
166 // expected-error@+1{{'length' argument on 'vector' clause is not permitted on a 'serial loop' construct}}
167 #pragma acc serial loop vector(I)
168 for(int j
= 0; j
< 5; ++j
);