From 07710e95e6ae30016fb3f5239cc661e6c5594e75 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Wed, 15 Nov 2017 17:51:08 +0000 Subject: Merging r315578: ------------------------------------------------------------------------ r315578 | abataev | 2017-10-12 06:51:32 -0700 (Thu, 12 Oct 2017) | 7 lines [OPENMP] Fix PR34925: Fix getting thread_id lvalue for inlined regions in C. If we try to get the lvalue for thread_id variables in inlined regions, we did not use the correct version of function. Fixed this bug by adding overrided version of the function getThreadIDVariableLValue for inlined regions. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_50@318315 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGOpenMPRuntime.cpp | 7 +++++++ test/OpenMP/task_codegen.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 test/OpenMP/task_codegen.c diff --git a/lib/CodeGen/CGOpenMPRuntime.cpp b/lib/CodeGen/CGOpenMPRuntime.cpp index ef9ef19a9e..9f8aa6c8d9 100644 --- a/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/lib/CodeGen/CGOpenMPRuntime.cpp @@ -264,6 +264,13 @@ public: return nullptr; } + /// \brief Get an LValue for the current ThreadID variable. + LValue getThreadIDVariableLValue(CodeGenFunction &CGF) override { + if (OuterRegionInfo) + return OuterRegionInfo->getThreadIDVariableLValue(CGF); + llvm_unreachable("No LValue for inlined OpenMP construct"); + } + /// \brief Get the name of the capture helper. StringRef getHelperName() const override { if (auto *OuterRegionInfo = getOldCSI()) diff --git a/test/OpenMP/task_codegen.c b/test/OpenMP/task_codegen.c new file mode 100644 index 0000000000..579a6f1b92 --- /dev/null +++ b/test/OpenMP/task_codegen.c @@ -0,0 +1,30 @@ +// RUN: %clang_cc1 -verify -triple x86_64-apple-darwin10 -fopenmp -x c -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -fopenmp -x c -triple x86_64-apple-darwin10 -emit-pch -o %t %s +// RUN: %clang_cc1 -fopenmp -x c -triple x86_64-apple-darwin10 -include-pch %t -verify %s -emit-llvm -o - | FileCheck %s +// expected-no-diagnostics +#ifndef HEADER +#define HEADER + +void foo(); + +// CHECK-LABEL: @main +int main() { + // CHECK: call i32 @__kmpc_global_thread_num( + // CHECK: call i8* @__kmpc_omp_task_alloc( + // CHECK: call i32 @__kmpc_omp_task( +#pragma omp task + { +#pragma omp taskgroup + { +#pragma omp task + foo(); + } + } + // CHECK: ret i32 0 + return 0; +} +// CHECK: call void @__kmpc_taskgroup( +// CHECK: call i8* @__kmpc_omp_task_alloc( +// CHECK: call i32 @__kmpc_omp_task( +// CHECK: call void @__kmpc_end_taskgroup( +#endif -- cgit v1.2.3