diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/OpenMP/for_lastprivate_codegen.cpp | 3 | ||||
-rw-r--r-- | clang/test/OpenMP/for_simd_codegen.cpp | 7 | ||||
-rw-r--r-- | clang/test/OpenMP/loops_explicit_clauses_codegen.cpp | 162 | ||||
-rw-r--r-- | clang/test/OpenMP/simd_codegen.cpp | 8 |
4 files changed, 171 insertions, 9 deletions
diff --git a/clang/test/OpenMP/for_lastprivate_codegen.cpp b/clang/test/OpenMP/for_lastprivate_codegen.cpp index f9a2bccdca8..2b1d6c3cf97 100644 --- a/clang/test/OpenMP/for_lastprivate_codegen.cpp +++ b/clang/test/OpenMP/for_lastprivate_codegen.cpp @@ -188,7 +188,6 @@ int main() { // LAMBDA: store i8 // LAMBDA: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 2 // LAMBDA: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[SS_TY]]*)* [[SS_MICROTASK:@.+]] to void - // LAMBDA: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0 // LAMBDA: call void @__kmpc_for_static_init_4( // LAMBDA-NOT: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0 // LAMBDA: call void {{.+}} [[SS_LAMBDA:@[^ ]+]] @@ -371,7 +370,6 @@ int main() { // BLOCKS: store i8 // BLOCKS: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 2 // BLOCKS: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[SS_TY]]*)* [[SS_MICROTASK:@.+]] to void -// BLOCKS: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0 // BLOCKS: call void @__kmpc_for_static_init_4( // BLOCKS-NOT: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0 // BLOCKS: call void @@ -650,7 +648,6 @@ int main() { // CHECK: store i8 // CHECK: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 2 // CHECK: call void (%{{.+}}*, i{{[0-9]+}}, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)*, ...) @__kmpc_fork_call(%{{.+}}* @{{.+}}, i{{[0-9]+}} 1, void (i{{[0-9]+}}*, i{{[0-9]+}}*, ...)* bitcast (void (i{{[0-9]+}}*, i{{[0-9]+}}*, [[SS_TY]]*)* [[SS_MICROTASK:@.+]] to void -// CHECK: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0 // CHECK: call void @__kmpc_for_static_init_4( // CHECK-NOT: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 0 // CHECK: getelementptr inbounds [[SS_TY]], [[SS_TY]]* %{{.+}}, i32 0, i32 1 diff --git a/clang/test/OpenMP/for_simd_codegen.cpp b/clang/test/OpenMP/for_simd_codegen.cpp index 7c012f02798..1c7291cd8f5 100644 --- a/clang/test/OpenMP/for_simd_codegen.cpp +++ b/clang/test/OpenMP/for_simd_codegen.cpp @@ -582,9 +582,10 @@ void collapsed(float *a, float *b, float *c, float *d) { // i,j,l are updated; k is not updated. // CHECK: call void @__kmpc_for_static_fini(%ident_t* {{.+}}, i32 %{{.+}}) // CHECK: br i1 -// CHECK: store i32 3, i32* [[I:%[^,]+]] -// CHECK-NEXT: store i32 5, i32* [[I:%[^,]+]] -// CHECK-NEXT: store i16 9, i16* [[I:%[^,]+]] +// CHECK: store i32 3, i32* +// CHECK-NEXT: store i32 5, +// CHECK-NEXT: store i32 7, +// CHECK-NEXT: store i16 9, i16* // CHECK: call void @__kmpc_barrier(%ident_t* {{.+}}, i32 %{{.+}}) // CHECK: ret void } diff --git a/clang/test/OpenMP/loops_explicit_clauses_codegen.cpp b/clang/test/OpenMP/loops_explicit_clauses_codegen.cpp new file mode 100644 index 00000000000..dc21fd11af6 --- /dev/null +++ b/clang/test/OpenMP/loops_explicit_clauses_codegen.cpp @@ -0,0 +1,162 @@ +// RUN: %clang_cc1 -verify -fopenmp -x c++ -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -fopenmp -x c++ -std=c++11 -triple x86_64-unknown-unknown -emit-pch -o %t %s +// RUN: %clang_cc1 -fopenmp -x c++ -triple x86_64-unknown-unknown -std=c++11 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s +// expected-no-diagnostics + + +#ifndef HEADER +#define HEADER + +#define N 10 +int foo(); +int bar(); +int k; +// CHECK-LABEL: @main +int main(int argc, char **argv) { + foo(); +// CHECK: @{{.+}}foo +// CHECK: call void @__kmpc_for_static_init_4( +// CHECK-NOT: @k +// CHECK: call void @__kmpc_for_static_fini( +// CHECK-NOT: @k +#pragma omp for private(k) + for (k = 0; k < argc; k++) + ; + foo(); +// CHECK: @{{.+}}foo +// CHECK: call void @__kmpc_for_static_init_8( +// CHECK-NOT: @k +// CHECK: call void @__kmpc_for_static_fini( +// CHECK: store i32 %{{.+}}, i32* @k +#pragma omp for lastprivate(k) collapse(2) + for (int i = 0; i < 2; ++i) + for (k = 0; k < argc; k++) + ; + foo(); +// CHECK: @{{.+}}foo +// CHECK-NOT: @k{{.+}}!llvm.mem.parallel_loop_access +// CHECK: i32 @{{.+}}bar{{.+}}!llvm.mem.parallel_loop_access +// CHECK-NOT: @k{{.+}}!llvm.mem.parallel_loop_access +// CHECK: sdiv i32 +// CHECK: store i32 %{{.+}}, i32* @k, +#pragma omp simd linear(k : 2) + for (k = 0; k < argc; k++) + bar(); +// CHECK: @{{.+}}foo +// CHECK-NOT: @k{{.+}}!llvm.mem.parallel_loop_access +// CHECK: i32 @{{.+}}bar{{.+}}!llvm.mem.parallel_loop_access +// CHECK-NOT: @k{{.+}}!llvm.mem.parallel_loop_access +// CHECK: sdiv i32 +// CHECK: store i32 %{{.+}}, i32* @k, + foo(); +#pragma omp simd lastprivate(k) collapse(2) + for (int i = 0; i < 2; ++i) + for (k = 0; k < argc; k++) + bar() ; + foo(); +// CHECK: @{{.+}}foo +// CHECK-NOT: @k{{.+}}!llvm.mem.parallel_loop_access +// CHECK: i32 @{{.+}}bar{{.+}}!llvm.mem.parallel_loop_access +// CHECK-NOT: @k{{.+}}!llvm.mem.parallel_loop_access +// CHECK: sdiv i32 +// CHECK: store i32 %{{.+}}, i32* @k, +#pragma omp simd + for (k = 0; k < argc; k++) + bar(); + foo(); +// CHECK: @{{.+}}foo +// CHECK-NOT: @k{{.+}}!llvm.mem.parallel_loop_access +// CHECK: i32 @{{.+}}bar{{.+}}!llvm.mem.parallel_loop_access +// CHECK-NOT: @k{{.+}}!llvm.mem.parallel_loop_access +// CHECK: sdiv i32 +// CHECK: store i32 %{{.+}}, i32* @k, +#pragma omp simd collapse(2) + for (int i = 0; i < 2; ++i) + for (k = 0; k < argc; k++) + bar(); +// CHECK: @{{.+}}foo + foo(); + return 0; +} + +struct S { + int k; + S(int argc) { + foo(); +// CHECK: @{{.+}}foo +// CHECK: call void @__kmpc_for_static_init_4( +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: call void @__kmpc_for_static_fini( +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +#pragma omp for private(k) + for (k = 0; k < argc; k++) + ; + foo(); +// CHECK: @{{.+}}foo +// CHECK: call void @__kmpc_for_static_init_8( +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: call void @__kmpc_for_static_fini( +#pragma omp for lastprivate(k) collapse(2) + for (int i = 0; i < 2; ++i) + for (k = 0; k < argc; k++) + ; + foo(); +// CHECK: @{{.+}}foo +// CHECK: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: br i1 +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: i32 @{{.+}}bar{{.+}}!llvm.mem.parallel_loop_access +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: add nsw i32 %{{.+}}, 1 +// CHECK: br label {{.+}}, !llvm.loop +// CHECK: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +#pragma omp simd linear(k : 2) + for (k = 0; k < argc; k++) + bar(); + foo(); +// CHECK: @{{.+}}foo +// CHECK: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: br i1 +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: i32 @{{.+}}bar{{.+}}!llvm.mem.parallel_loop_access +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: add nsw i64 %{{.+}}, 1 +// CHECK: br label {{.+}}, !llvm.loop +// CHECK: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +#pragma omp simd lastprivate(k) collapse(2) + for (int i = 0; i < 2; ++i) + for (k = 0; k < argc; k++) + bar(); + foo(); +// CHECK: @{{.+}}foo +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: br i1 +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: i32 @{{.+}}bar{{.+}}!llvm.mem.parallel_loop_access +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: add nsw i32 %{{.+}}, 1 +// CHECK: br label {{.+}}, !llvm.loop +// CHECK: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +#pragma omp simd + for (k = 0; k < argc; k++) + bar(); + foo(); +// CHECK: @{{.+}}foo +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: br i1 +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: i32 @{{.+}}bar{{.+}}!llvm.mem.parallel_loop_access +// CHECK-NOT: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +// CHECK: add nsw i64 %{{.+}}, 1 +// CHECK: br label {{.+}}, !llvm.loop +// CHECK: getelementptr inbounds %struct.S, %struct.S* %{{.+}}, i32 0, i32 0 +#pragma omp simd collapse(2) + for (int i = 0; i < 2; ++i) + for (k = 0; k < argc; k++) + bar(); +// CHECK: @{{.+}}foo + foo(); + } +} s(N); + +#endif // HEADER diff --git a/clang/test/OpenMP/simd_codegen.cpp b/clang/test/OpenMP/simd_codegen.cpp index a43d9996008..852699d813e 100644 --- a/clang/test/OpenMP/simd_codegen.cpp +++ b/clang/test/OpenMP/simd_codegen.cpp @@ -209,6 +209,7 @@ void simple(float *a, float *b, float *c, float *d) { // CHECK-NEXT: store i64 [[ADD7_2]], i64* [[OMP_IV7]]{{.*}}!llvm.mem.parallel_loop_access ![[SIMPLE_LOOP7_ID]] } // CHECK: [[SIMPLE_LOOP7_END]] +// CHECK-NEXT: store i64 11, i64* // CHECK-NEXT: [[A_PRIV_VAL:%.+]] = load i32, i32* [[A_PRIV]], // CHECK-NEXT: store i32 [[A_PRIV_VAL]], i32* [[A]], int R; @@ -418,9 +419,10 @@ void collapsed(float *a, float *b, float *c, float *d) { // CHECK: [[COLL1_END]] } // i,j,l are updated; k is not updated. -// CHECK: store i32 3, i32* [[I:%[^,]+]] -// CHECK-NEXT: store i32 5, i32* [[I:%[^,]+]] -// CHECK-NEXT: store i16 9, i16* [[I:%[^,]+]] +// CHECK: store i32 3, i32* +// CHECK-NEXT: store i32 5, i32* +// CHECK-NEXT: store i32 7, i32* +// CHECK-NEXT: store i16 9, i16* // CHECK: ret void } |