1 // RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=50 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s
2 // RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-ibm-linux-gnu -emit-pch -o %t %s
3 // RUN: %clang_cc1 -fopenmp -fopenmp-version=50 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s
4 
5 // RUN: %clang_cc1 -verify -fopenmp-simd -fopenmp-version=50 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix SIMD-ONLY
6 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=50 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -std=c++11 -triple powerpc64le-ibm-linux-gnu -emit-pch -o %t %s
7 // RUN: %clang_cc1 -fopenmp-simd -fopenmp-version=50 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple powerpc64le-ibm-linux-gnu -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s --check-prefix SIMD-ONLY
8 // SIMD-ONLY-NOT: {{__kmpc|__tgt}}
9 // REQUIRES: powerpc-registered-target
10 
11 // expected-no-diagnostics
12 #ifndef HEADER
13 #define HEADER
14 
15 // CHECK-LABEL: define {{.*}}void @{{.+}}gtid_test
gtid_test()16 void gtid_test() {
17 // CHECK: call void @__kmpc_push_target_tripcount_mapper(%struct.ident_t* @{{.+}}, i64 -1, i64 100)
18 // CHECK: %0 = call i32 @__tgt_target_teams_mapper(%struct.ident_t* @{{.+}}, i64 -1, i8* @{{.+}}, i32 0, i8** null, i8** null, i64* null, i64* null, i8** null, i8** null, i32 0, i32 0)
19 // CHECK: call void [[TARGET_OUTLINE:@.+]]()
20 // CHECK: ret void
21 #pragma omp target teams distribute parallel for order(concurrent)
22   for(int i = 0 ; i < 100; i++) {}
23 }
24 
25 // CHECK: define internal void [[TARGET_OUTLINE]]()
26 // CHECK: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_teams(%struct.ident_t* @{{.+}}, i32 0, void (i32*, i32*, ...)* bitcast (void (i32*, i32*)* [[TEAMS_OUTLINE:@.+]] to void (i32*, i32*, ...)*))
27 // CHECK: ret void
28 
29 // CHECK: define internal void [[TEAMS_OUTLINE]](i32* {{.+}}, i32* {{.+}})
30 // CHECK: call void @__kmpc_for_static_init_4(
31 // CHECK-NOT: {{store|load}}{{.+}}!llvm.access.group !
32 // CHECK: call void (%struct.ident_t*, i32, void (i32*, i32*, ...)*, ...) @__kmpc_fork_call(%struct.ident_t* @{{.+}}, i32 2, void (i32*, i32*, ...)* bitcast (void (i32*, i32*, i64, i64)* [[PARALLEL_OUTLINE:@.+]] to void (i32*, i32*, ...)*), i64 %{{.+}}, i64 %{{.+}})
33 // CHECK-NOT: {{store|load}}{{.+}}!llvm.access.group !
34 // CHECK: call void @__kmpc_for_static_fini(
35 
36 // CHECK: define internal void [[PARALLEL_OUTLINE]](i32* {{.+}}, i32* {{.+}}, i64 {{.+}}, i64 {{.+}})
37 // CHECK: call void @__kmpc_for_static_init_4(
38 // CHECK: {{store|load}}{{.+}}!llvm.access.group ![[AG:[0-9]+]]
39 // CHECK: call void @__kmpc_for_static_fini(
40 // CHECK: ret void
41 
42 // CHECK: ![[AG]] = distinct !{}
43 // CHECK: !{!"llvm.loop.parallel_accesses", ![[AG]]}
44 #endif
45