1db39021cSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp -ast-print %s | FileCheck %s
2db39021cSAlexey Bataev // RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -emit-pch -o %t %s
3db39021cSAlexey Bataev // RUN: %clang_cc1 -fopenmp -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
4a8a9153aSAlexey Bataev 
5a8a9153aSAlexey Bataev // RUN: %clang_cc1 -verify -fopenmp-simd -ast-print %s | FileCheck %s
6a8a9153aSAlexey Bataev // RUN: %clang_cc1 -fopenmp-simd -x c++ -std=c++11 -emit-pch -o %t %s
7a8a9153aSAlexey Bataev // RUN: %clang_cc1 -fopenmp-simd -std=c++11 -include-pch %t -fsyntax-only -verify %s -ast-print | FileCheck %s
89fb6e647SAlexey Bataev // expected-no-diagnostics
99fb6e647SAlexey Bataev 
109fb6e647SAlexey Bataev #ifndef HEADER
119fb6e647SAlexey Bataev #define HEADER
129fb6e647SAlexey Bataev 
foo()139fb6e647SAlexey Bataev void foo() {}
149fb6e647SAlexey Bataev 
15a636c7f9SAlexey Bataev template <class T, int N>
tmain(T argc)169fb6e647SAlexey Bataev T tmain (T argc) {
179fb6e647SAlexey Bataev   T b = argc, c, d, e, f, g;
189fb6e647SAlexey Bataev   static T a;
199fb6e647SAlexey Bataev   #pragma omp for ordered
209fb6e647SAlexey Bataev   for (int i =0 ; i < argc; ++i)
219fb6e647SAlexey Bataev   #pragma omp ordered
229fb6e647SAlexey Bataev   {
239fb6e647SAlexey Bataev     a=2;
249fb6e647SAlexey Bataev   }
25346265e3SAlexey Bataev   #pragma omp for ordered
26346265e3SAlexey Bataev   for (int i =0 ; i < argc; ++i)
27346265e3SAlexey Bataev   #pragma omp ordered threads
28346265e3SAlexey Bataev   {
29346265e3SAlexey Bataev     a=2;
30346265e3SAlexey Bataev   }
31d14d1e6fSAlexey Bataev   #pragma omp simd
32d14d1e6fSAlexey Bataev   for (int i =0 ; i < argc; ++i)
33d14d1e6fSAlexey Bataev   #pragma omp ordered simd
34d14d1e6fSAlexey Bataev   {
35d14d1e6fSAlexey Bataev     a=2;
36d14d1e6fSAlexey Bataev   }
37d14d1e6fSAlexey Bataev   #pragma omp for simd
38d14d1e6fSAlexey Bataev   for (int i =0 ; i < argc; ++i)
39d14d1e6fSAlexey Bataev   #pragma omp ordered simd
40d14d1e6fSAlexey Bataev   {
41d14d1e6fSAlexey Bataev     a=2;
42d14d1e6fSAlexey Bataev   }
43d14d1e6fSAlexey Bataev   #pragma omp parallel for simd
44d14d1e6fSAlexey Bataev   for (int i =0 ; i < argc; ++i)
45d14d1e6fSAlexey Bataev   #pragma omp ordered simd
46d14d1e6fSAlexey Bataev   {
47d14d1e6fSAlexey Bataev     a=2;
48d14d1e6fSAlexey Bataev   }
49eb482350SAlexey Bataev   #pragma omp parallel for ordered(1)
50eb482350SAlexey Bataev   for (int i =0 ; i < argc; ++i) {
51eb482350SAlexey Bataev   #pragma omp ordered depend(source)
52a636c7f9SAlexey Bataev   #pragma omp ordered depend(sink:i+N)
53eb482350SAlexey Bataev     a = 2;
54eb482350SAlexey Bataev   }
559fb6e647SAlexey Bataev   return (0);
569fb6e647SAlexey Bataev }
579fb6e647SAlexey Bataev 
589fb6e647SAlexey Bataev // CHECK: static T a;
599fb6e647SAlexey Bataev // CHECK-NEXT: #pragma omp for ordered
609fb6e647SAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i)
61*cbecfdfeSAlexey Bataev // CHECK-NEXT: #pragma omp ordered{{$}}
629fb6e647SAlexey Bataev // CHECK-NEXT: {
639fb6e647SAlexey Bataev // CHECK-NEXT: a = 2;
649fb6e647SAlexey Bataev // CHECK-NEXT: }
65346265e3SAlexey Bataev // CHECK-NEXT: #pragma omp for ordered
66346265e3SAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i)
67346265e3SAlexey Bataev // CHECK-NEXT: #pragma omp ordered threads
68346265e3SAlexey Bataev // CHECK-NEXT: {
69346265e3SAlexey Bataev // CHECK-NEXT: a = 2;
70346265e3SAlexey Bataev // CHECK-NEXT: }
71d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp simd
72d14d1e6fSAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i)
73d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp ordered simd
74d14d1e6fSAlexey Bataev // CHECK-NEXT: {
75d14d1e6fSAlexey Bataev // CHECK-NEXT: a = 2;
76d14d1e6fSAlexey Bataev // CHECK-NEXT: }
77d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp for simd
78d14d1e6fSAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i)
79d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp ordered simd
80d14d1e6fSAlexey Bataev // CHECK-NEXT: {
81d14d1e6fSAlexey Bataev // CHECK-NEXT: a = 2;
82d14d1e6fSAlexey Bataev // CHECK-NEXT: }
83d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp parallel for simd
84d14d1e6fSAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i)
85d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp ordered simd
86d14d1e6fSAlexey Bataev // CHECK-NEXT: {
87d14d1e6fSAlexey Bataev // CHECK-NEXT: a = 2;
88d14d1e6fSAlexey Bataev // CHECK-NEXT: }
89eb482350SAlexey Bataev // CHECK-NEXT: #pragma omp parallel for ordered(1)
90eb482350SAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i) {
91eb482350SAlexey Bataev // CHECK-NEXT: #pragma omp ordered depend(source)
92a636c7f9SAlexey Bataev // CHECK-NEXT: #pragma omp ordered depend(sink : i + N)
93eb482350SAlexey Bataev // CHECK-NEXT: a = 2;
94eb482350SAlexey Bataev // CHECK-NEXT: }
95a67a4d2fSSerge Pavlov // CHECK: static int a;
96a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp for ordered
97a67a4d2fSSerge Pavlov // CHECK-NEXT: for (int i = 0; i < argc; ++i)
98a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp ordered
99a67a4d2fSSerge Pavlov // CHECK-NEXT: {
100a67a4d2fSSerge Pavlov // CHECK-NEXT: a = 2;
101a67a4d2fSSerge Pavlov // CHECK-NEXT: }
102a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp for ordered
103a67a4d2fSSerge Pavlov // CHECK-NEXT: for (int i = 0; i < argc; ++i)
104a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp ordered threads
105a67a4d2fSSerge Pavlov // CHECK-NEXT: {
106a67a4d2fSSerge Pavlov // CHECK-NEXT: a = 2;
107a67a4d2fSSerge Pavlov // CHECK-NEXT: }
108a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp simd
109a67a4d2fSSerge Pavlov // CHECK-NEXT: for (int i = 0; i < argc; ++i)
110a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp ordered simd
111a67a4d2fSSerge Pavlov // CHECK-NEXT: {
112a67a4d2fSSerge Pavlov // CHECK-NEXT: a = 2;
113a67a4d2fSSerge Pavlov // CHECK-NEXT: }
114a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp for simd
115a67a4d2fSSerge Pavlov // CHECK-NEXT: for (int i = 0; i < argc; ++i)
116a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp ordered simd
117a67a4d2fSSerge Pavlov // CHECK-NEXT: {
118a67a4d2fSSerge Pavlov // CHECK-NEXT: a = 2;
119a67a4d2fSSerge Pavlov // CHECK-NEXT: }
120a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp parallel for simd
121a67a4d2fSSerge Pavlov // CHECK-NEXT: for (int i = 0; i < argc; ++i)
122a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp ordered simd
123a67a4d2fSSerge Pavlov // CHECK-NEXT: {
124a67a4d2fSSerge Pavlov // CHECK-NEXT: a = 2;
125a67a4d2fSSerge Pavlov // CHECK-NEXT: }
126a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp parallel for ordered(1)
127a67a4d2fSSerge Pavlov // CHECK-NEXT: for (int i = 0; i < argc; ++i) {
128a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp ordered depend(source)
129a67a4d2fSSerge Pavlov // CHECK-NEXT: #pragma omp ordered depend(sink : i + 3)
130a67a4d2fSSerge Pavlov // CHECK-NEXT: a = 2;
131a67a4d2fSSerge Pavlov // CHECK-NEXT: }
1329fb6e647SAlexey Bataev 
133eb482350SAlexey Bataev // CHECK-LABEL: int main(
main(int argc,char ** argv)1349fb6e647SAlexey Bataev int main (int argc, char **argv) {
1359fb6e647SAlexey Bataev   int b = argc, c, d, e, f, g;
1369fb6e647SAlexey Bataev   static int a;
1379fb6e647SAlexey Bataev // CHECK: static int a;
1389fb6e647SAlexey Bataev   #pragma omp for ordered
1399fb6e647SAlexey Bataev   for (int i =0 ; i < argc; ++i)
1409fb6e647SAlexey Bataev   #pragma omp ordered
1419fb6e647SAlexey Bataev   {
1429fb6e647SAlexey Bataev     a=2;
1439fb6e647SAlexey Bataev   }
144346265e3SAlexey Bataev   #pragma omp for ordered
145346265e3SAlexey Bataev   for (int i =0 ; i < argc; ++i)
146346265e3SAlexey Bataev   #pragma omp ordered threads
147346265e3SAlexey Bataev   {
148346265e3SAlexey Bataev     a=2;
149346265e3SAlexey Bataev   }
150d14d1e6fSAlexey Bataev   #pragma omp simd
151d14d1e6fSAlexey Bataev   for (int i =0 ; i < argc; ++i)
152d14d1e6fSAlexey Bataev   #pragma omp ordered simd
153d14d1e6fSAlexey Bataev   {
154d14d1e6fSAlexey Bataev     a=2;
155d14d1e6fSAlexey Bataev   }
156d14d1e6fSAlexey Bataev   #pragma omp for simd
157d14d1e6fSAlexey Bataev   for (int i =0 ; i < argc; ++i)
158d14d1e6fSAlexey Bataev   #pragma omp ordered simd
159d14d1e6fSAlexey Bataev   {
160d14d1e6fSAlexey Bataev     a=2;
161d14d1e6fSAlexey Bataev   }
162d14d1e6fSAlexey Bataev   #pragma omp parallel for simd
163d14d1e6fSAlexey Bataev   for (int i =0 ; i < argc; ++i)
164d14d1e6fSAlexey Bataev   #pragma omp ordered simd
165d14d1e6fSAlexey Bataev   {
166d14d1e6fSAlexey Bataev     a=2;
167d14d1e6fSAlexey Bataev   }
168eb482350SAlexey Bataev   #pragma omp parallel for ordered(1)
169eb482350SAlexey Bataev   for (int i =0 ; i < argc; ++i) {
170eb482350SAlexey Bataev   #pragma omp ordered depend(source)
171a636c7f9SAlexey Bataev   #pragma omp ordered depend(sink: i - 5)
172eb482350SAlexey Bataev     a = 2;
173eb482350SAlexey Bataev   }
1749fb6e647SAlexey Bataev // CHECK-NEXT: #pragma omp for ordered
1759fb6e647SAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i)
1769fb6e647SAlexey Bataev // CHECK-NEXT: #pragma omp ordered
1779fb6e647SAlexey Bataev // CHECK-NEXT: {
1789fb6e647SAlexey Bataev // CHECK-NEXT: a = 2;
1799fb6e647SAlexey Bataev // CHECK-NEXT: }
180346265e3SAlexey Bataev // CHECK-NEXT: #pragma omp for ordered
181346265e3SAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i)
182346265e3SAlexey Bataev // CHECK-NEXT: #pragma omp ordered threads
183346265e3SAlexey Bataev // CHECK-NEXT: {
184346265e3SAlexey Bataev // CHECK-NEXT: a = 2;
185346265e3SAlexey Bataev // CHECK-NEXT: }
186d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp simd
187d14d1e6fSAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i)
188d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp ordered simd
189d14d1e6fSAlexey Bataev // CHECK-NEXT: {
190d14d1e6fSAlexey Bataev // CHECK-NEXT: a = 2;
191d14d1e6fSAlexey Bataev // CHECK-NEXT: }
192d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp for simd
193d14d1e6fSAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i)
194d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp ordered simd
195d14d1e6fSAlexey Bataev // CHECK-NEXT: {
196d14d1e6fSAlexey Bataev // CHECK-NEXT: a = 2;
197d14d1e6fSAlexey Bataev // CHECK-NEXT: }
198d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp parallel for simd
199d14d1e6fSAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i)
200d14d1e6fSAlexey Bataev // CHECK-NEXT: #pragma omp ordered simd
201d14d1e6fSAlexey Bataev // CHECK-NEXT: {
202d14d1e6fSAlexey Bataev // CHECK-NEXT: a = 2;
203d14d1e6fSAlexey Bataev // CHECK-NEXT: }
204eb482350SAlexey Bataev // CHECK-NEXT: #pragma omp parallel for ordered(1)
205eb482350SAlexey Bataev // CHECK-NEXT: for (int i = 0; i < argc; ++i) {
206eb482350SAlexey Bataev // CHECK-NEXT: #pragma omp ordered depend(source)
207a636c7f9SAlexey Bataev // CHECK-NEXT: #pragma omp ordered depend(sink : i - 5)
208eb482350SAlexey Bataev // CHECK-NEXT: a = 2;
209eb482350SAlexey Bataev // CHECK-NEXT: }
210a636c7f9SAlexey Bataev   return tmain<int, 3>(argc);
2119fb6e647SAlexey Bataev }
2129fb6e647SAlexey Bataev 
2139fb6e647SAlexey Bataev #endif
214