[clang] b4c1ded - [clang] Recover necessary AddrSpaceCast (#119246)

via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 17 05:38:34 PST 2024


Author: Youngsuk Kim
Date: 2024-12-17T08:38:31-05:00
New Revision: b4c1ded7d54858972c27250f4b6b882e74da1444

URL: https://github.com/llvm/llvm-project/commit/b4c1ded7d54858972c27250f4b6b882e74da1444
DIFF: https://github.com/llvm/llvm-project/commit/b4c1ded7d54858972c27250f4b6b882e74da1444.diff

LOG: [clang] Recover necessary AddrSpaceCast (#119246)

A necessary AddrSpaceCast was wrongfully deleted in
5c91b2886f6bf400b60ca7839069839ac3980f8f . Recover the AddrSpaceCast.

This fixes #86791 .

Added: 
    clang/test/OpenMP/amdgpu_threadprivate.cpp

Modified: 
    clang/lib/CodeGen/ItaniumCXXABI.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/CodeGen/ItaniumCXXABI.cpp b/clang/lib/CodeGen/ItaniumCXXABI.cpp
index 8cbd09d02c7556..cf9e338236e556 100644
--- a/clang/lib/CodeGen/ItaniumCXXABI.cpp
+++ b/clang/lib/CodeGen/ItaniumCXXABI.cpp
@@ -3302,6 +3302,7 @@ void ItaniumCXXABI::EmitThreadLocalInitFuncs(
       CharUnits Align = CGM.getContext().getDeclAlign(VD);
       Val = Builder.CreateAlignedLoad(Var->getValueType(), Val, Align);
     }
+    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..f7061f42bbe7cb
--- /dev/null
+++ b/clang/test/OpenMP/amdgpu_threadprivate.cpp
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-linux-gnu -target-cpu gfx906 -fopenmp -nogpulib -fopenmp-is-target-device -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;
+}
+


        


More information about the cfe-commits mailing list