|
| 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 |
| 16 | +void gtid_test() { |
| 17 | +// CHECK: call void @__kmpc_push_target_tripcount(i64 -1, i64 100) |
| 18 | +// CHECK: %0 = call i32 @__tgt_target_teams(i64 -1, i8* @{{.+}}, i32 0, i8** null, i8** null, i64* null, i64* 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 |
0 commit comments