1*80256605SAlexey Bataev // RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -x c++ -emit-llvm %s -o - | FileCheck %s
2*80256605SAlexey Bataev // RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-apple-darwin10 -emit-pch -o %t %s
3*80256605SAlexey Bataev // RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-apple-darwin10 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s
4*80256605SAlexey Bataev 
5*80256605SAlexey Bataev // RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp-simd -x c++ -emit-llvm %s -o - | FileCheck --check-prefix SIMD-ONLY0 %s
6*80256605SAlexey Bataev // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple x86_64-apple-darwin10 -emit-pch -o %t %s
7*80256605SAlexey Bataev // RUN: %clang_cc1 -fopenmp-simd -x c++ -triple x86_64-apple-darwin10 -include-pch %t -verify %s -emit-llvm -o - | FileCheck --check-prefix SIMD-ONLY0 %s
8*80256605SAlexey Bataev // SIMD-ONLY0-NOT: {{__kmpc|__tgt}}
9*80256605SAlexey Bataev // expected-no-diagnostics
10*80256605SAlexey Bataev #ifndef HEADER
11*80256605SAlexey Bataev #define HEADER
12*80256605SAlexey Bataev 
13*80256605SAlexey Bataev void foo() {}
14*80256605SAlexey Bataev 
15*80256605SAlexey Bataev template <class T>
16*80256605SAlexey Bataev T tmain(T &argc) {
17*80256605SAlexey Bataev   static T a;
18*80256605SAlexey Bataev   #pragma omp taskwait depend(in:argc)
19*80256605SAlexey Bataev   return a + argc;
20*80256605SAlexey Bataev }
21*80256605SAlexey Bataev int main(int argc, char **argv) {
22*80256605SAlexey Bataev   int n = 0;
23*80256605SAlexey Bataev   #pragma omp task shared(n,argc) depend(out:n)
24*80256605SAlexey Bataev      n = argc;
25*80256605SAlexey Bataev   return tmain(n);
26*80256605SAlexey Bataev }
27*80256605SAlexey Bataev 
28*80256605SAlexey Bataev // CHECK-LABEL: @main
29*80256605SAlexey Bataev // CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num(%{{.+}}* @{{.+}})
30*80256605SAlexey Bataev // CHECK: [[ALLOC:%.+]] = call i8* @__kmpc_omp_task_alloc(%{{.+}}* @{{.+}}, i32 [[GTID]], i32 1, i64 40, i64 16, i32 (i32, i8*)* bitcast (i32 (i32, %{{.+}}*)* @{{.+}} to i32 (i32, i8*)*))
31*80256605SAlexey Bataev // CHECK: %{{.+}} = call i32 @__kmpc_omp_task_with_deps(%{{.+}}* @{{.+}}, i32 [[GTID]], i8* [[ALLOC]], i32 1, i8* %{{[0-9]*}}, i32 0, i8* null)
32*80256605SAlexey Bataev 
33*80256605SAlexey Bataev // CHECK-LABEL: tmain
34*80256605SAlexey Bataev // CHECK: [[GTID:%.+]] = call i32 @__kmpc_global_thread_num(%{{.+}}* @{{.+}})
35*80256605SAlexey Bataev // CHECK: call void @__kmpc_omp_wait_deps(%{{.+}}* @{{.+}}, i32 [[GTID]], i32 1, i8* %{{.}}, i32 0, i8* null)
36*80256605SAlexey Bataev 
37*80256605SAlexey Bataev 
38*80256605SAlexey Bataev #endif
39