https://github.com/JOE1994 updated https://github.com/llvm/llvm-project/pull/119246
>From 9dbcf65775a979553bee2c95b16e3e2328e957a1 Mon Sep 17 00:00:00 2001 From: Youngsuk Kim <youngsuk....@hpe.com> Date: Mon, 9 Dec 2024 10:33:18 -0600 Subject: [PATCH 1/3] [clang] Recover necessary AddrSpaceCast A necessary AddrSpaceCast was wrongfully deleted in 5c91b2886f6bf400b60ca7839069839ac3980f8f . Recover the AddrSpaceCast. This fixes #86791 . --- clang/lib/CodeGen/ItaniumCXXABI.cpp | 3 +++ clang/test/OpenMP/amdgpu_threadprivate.cpp | 11 +++++++++++ 2 files changed, 14 insertions(+) create mode 100644 clang/test/OpenMP/amdgpu_threadprivate.cpp diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp index 8cbd09d02c7556..0abea335ad69e4 100644 --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -3302,6 +3302,9 @@ void ItaniumCXXABI::EmitThreadLocalInitFuncs( CharUnits Align = CGM.getContext().getDeclAlign(VD); Val = Builder.CreateAlignedLoad(Var->getValueType(), Val, Align); } + if (Val->getType() != Wrapper->getReturnType()) { + Val = Builder.CreateAddrSpaceCast(Val, Wrapper->getReturnType()); + } Builder.CreateRet(Val); } diff --git a/clang/test/OpenMP/amdgpu_threadprivate.cpp b/clang/test/OpenMP/amdgpu_threadprivate.cpp new file mode 100644 index 00000000000000..5b15255ee62d4a --- /dev/null +++ b/clang/test/OpenMP/amdgpu_threadprivate.cpp @@ -0,0 +1,11 @@ +// REQUIRES: asserts + +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -target-cpu x86-64 -disable-llvm-passes -fopenmp-targets=amdgcn-amd-amdhsa -x c++ -emit-llvm-bc %s -o %t-x86-host.bc +// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-linux-gnu -target-cpu gfx906 -fopenmp -nogpulib -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -x c++ %s + +// Don't crash with assertions build. +int MyGlobVar; +#pragma omp threadprivate(MyGlobVar) +int main() { + MyGlobVar = 1; +} >From 4af1ba587d01ab74f222efaa1a14cf95c652964a Mon Sep 17 00:00:00 2001 From: Youngsuk Kim <youngsuk....@hpe.com> Date: Thu, 12 Dec 2024 10:00:53 -0600 Subject: [PATCH 2/3] Avoid redundant type check before AddrSpaceCast As per feedback from reviewers. --- clang/lib/CodeGen/ItaniumCXXABI.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp index 0abea335ad69e4..cf9e338236e556 100644 --- a/clang/lib/CodeGen/ItaniumCXXABI.cpp +++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp @@ -3302,9 +3302,7 @@ void ItaniumCXXABI::EmitThreadLocalInitFuncs( CharUnits Align = CGM.getContext().getDeclAlign(VD); Val = Builder.CreateAlignedLoad(Var->getValueType(), Val, Align); } - if (Val->getType() != Wrapper->getReturnType()) { - Val = Builder.CreateAddrSpaceCast(Val, Wrapper->getReturnType()); - } + Val = Builder.CreateAddrSpaceCast(Val, Wrapper->getReturnType()); Builder.CreateRet(Val); } >From 64664374f53a788938e72e6160fa8f843d6541a3 Mon Sep 17 00:00:00 2001 From: Youngsuk Kim <youngsuk....@hpe.com> Date: Sun, 15 Dec 2024 17:24:06 -0600 Subject: [PATCH 3/3] Add FileCheck checks --- clang/test/OpenMP/amdgpu_threadprivate.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/clang/test/OpenMP/amdgpu_threadprivate.cpp b/clang/test/OpenMP/amdgpu_threadprivate.cpp index 5b15255ee62d4a..9828f3e375b356 100644 --- a/clang/test/OpenMP/amdgpu_threadprivate.cpp +++ b/clang/test/OpenMP/amdgpu_threadprivate.cpp @@ -1,11 +1,17 @@ -// REQUIRES: asserts - // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -target-cpu x86-64 -disable-llvm-passes -fopenmp-targets=amdgcn-amd-amdhsa -x c++ -emit-llvm-bc %s -o %t-x86-host.bc -// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-linux-gnu -target-cpu gfx906 -fopenmp -nogpulib -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -x c++ %s +// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-linux-gnu -target-cpu gfx906 -fopenmp -nogpulib -fopenmp-is-target-device -fopenmp-host-ir-file-path %t-x86-host.bc -x c++ -emit-llvm %s -o - | FileCheck %s // Don't crash with assertions build. + +// CHECK: @MyGlobVar = external thread_local addrspace(1) global i32, align 4 +// CHECK: define weak_odr hidden noundef ptr @_ZTW9MyGlobVar() #0 comdat { +// CHECK-NEXT: %1 = call align 4 ptr addrspace(1) @llvm.threadlocal.address.p1(ptr addrspace(1) align 4 @MyGlobVar) +// CHECK-NEXT: %2 = addrspacecast ptr addrspace(1) %1 to ptr +// CHECK-NEXT: ret ptr %2 +// CHECK-NEXT: } int MyGlobVar; #pragma omp threadprivate(MyGlobVar) int main() { MyGlobVar = 1; } + _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits