diff options
| author | Alexey Bataev <a.bataev@hotmail.com> | 2019-12-31 12:41:57 -0500 |
|---|---|---|
| committer | Alexey Bataev <a.bataev@hotmail.com> | 2019-12-31 14:11:36 -0500 |
| commit | 8be5a0fe12bb9114bb82986b1dcb9205699aa085 (patch) | |
| tree | 0a92eacadf0e967555cf4acb053e49a272f4d1ec /clang/test/OpenMP/taskloop_reduction_codegen.cpp | |
| parent | 7544cb8807b2ecb2f5186ab18d0ffa865a493a47 (diff) | |
| download | bcm5719-llvm-8be5a0fe12bb9114bb82986b1dcb9205699aa085.tar.gz bcm5719-llvm-8be5a0fe12bb9114bb82986b1dcb9205699aa085.zip | |
[OPENMP]Emit artificial threprivate vars as threadlocal, if possible.
It may improve performance for declare reduction constructs.
Diffstat (limited to 'clang/test/OpenMP/taskloop_reduction_codegen.cpp')
| -rw-r--r-- | clang/test/OpenMP/taskloop_reduction_codegen.cpp | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/clang/test/OpenMP/taskloop_reduction_codegen.cpp b/clang/test/OpenMP/taskloop_reduction_codegen.cpp index 16bafb3acf7..fec3e62114e 100644 --- a/clang/test/OpenMP/taskloop_reduction_codegen.cpp +++ b/clang/test/OpenMP/taskloop_reduction_codegen.cpp @@ -4,6 +4,10 @@ // SIMD-ONLY0-NOT: {{__kmpc|__tgt}} // expected-no-diagnostics +// CHECK: [[RED_SIZE1:@reduction_size[.].+]] = common thread_local global i64 0 +// CHECK: [[RED1:@reduction[.].+]] = common thread_local global i8* null +// CHECK: [[RED_SIZE2:@reduction_size[.].+]] = common thread_local global i64 0 + struct S { float a; S() : a(0.0f) {} @@ -163,10 +167,7 @@ sum = 0.0; // CHECK: ret void // CHECK: define internal void @[[RED_INIT2]](i8* %0) -// CHECK: call i8* @__kmpc_threadprivate_cached( -// CHECK: [[ORIG_PTR_ADDR:%.+]] = call i8* @__kmpc_threadprivate_cached( -// CHECK: [[ORIG_PTR_REF:%.+]] = bitcast i8* [[ORIG_PTR_ADDR]] to i8** -// CHECK: load i8*, i8** [[ORIG_PTR_REF]], +// CHECK: load i8*, i8** [[RED1]], // CHECK: call void [[OMP_INIT1:@.+]]( // CHECK: ret void @@ -177,12 +178,12 @@ sum = 0.0; // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64( // CHECK: define internal void @[[RED_FINI2]](i8* %0) -// CHECK: call i8* @__kmpc_threadprivate_cached( +// CHECK: load i64, i64* [[RED_SIZE1]] // CHECK: call void @ // CHECK: ret void // CHECK: define internal void @[[RED_COMB2]](i8* %0, i8* %1) -// CHECK: call i8* @__kmpc_threadprivate_cached( +// CHECK: load i64, i64* [[RED_SIZE1]] // CHECK: call void [[OMP_COMB1]]( // CHECK: ret void @@ -196,26 +197,20 @@ sum = 0.0; // CHECK: ret void // CHECK: define internal void @[[RED_INIT4]](i8* %0) -// CHECK: call i8* @__kmpc_threadprivate_cached( +// CHECK: load i64, i64* [[RED_SIZE2]] // CHECK: store float 0.000000e+00, float* % // CHECK: ret void // CHECK: define internal void @[[RED_COMB4]](i8* %0, i8* %1) -// CHECK: call i8* @__kmpc_threadprivate_cached( +// CHECK: load i64, i64* [[RED_SIZE2]] // CHECK: fadd float % // CHECK: store float %{{.+}}, float* % // CHECK: ret void -// CHECK-NOT: call i8* @__kmpc_threadprivate_cached( // CHECK: call i8* @__kmpc_task_reduction_get_th_data( -// CHECK: call i8* @__kmpc_threadprivate_cached( -// CHECK: call i8* @__kmpc_threadprivate_cached( // CHECK: call i8* @__kmpc_task_reduction_get_th_data( -// CHECK-NOT: call i8* @__kmpc_threadprivate_cached( // CHECK: call i8* @__kmpc_task_reduction_get_th_data( -// CHECK: call i8* @__kmpc_threadprivate_cached( // CHECK: call i8* @__kmpc_task_reduction_get_th_data( -// CHECK-NOT: call i8* @__kmpc_threadprivate_cached( // CHECK-DAG: distinct !DISubprogram(linkageName: "[[TASK]]", scope: ! // CHECK-DAG: !DISubprogram(linkageName: "[[RED_INIT1]]" |

