[clang] [clang] Recover necessary AddrSpaceCast (PR #119246)

Youngsuk Kim via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 16 07:31:19 PST 2024


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.kim at hpe.com>
Date: Mon, 9 Dec 2024 10:33:18 -0600
Subject: [PATCH 1/4] [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.kim at hpe.com>
Date: Thu, 12 Dec 2024 10:00:53 -0600
Subject: [PATCH 2/4] 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.kim at hpe.com>
Date: Sun, 15 Dec 2024 17:24:06 -0600
Subject: [PATCH 3/4] 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;
 }
+

>From 169f744b46dc4496282acc713dff5a95fbaf68d5 Mon Sep 17 00:00:00 2001
From: Youngsuk Kim <youngsuk.kim at hpe.com>
Date: Mon, 16 Dec 2024 09:29:03 -0600
Subject: [PATCH 4/4] Remove host RUN line, strip '-x c++'

---
 clang/test/OpenMP/amdgpu_threadprivate.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/clang/test/OpenMP/amdgpu_threadprivate.cpp b/clang/test/OpenMP/amdgpu_threadprivate.cpp
index 9828f3e375b356..f7061f42bbe7cb 100644
--- a/clang/test/OpenMP/amdgpu_threadprivate.cpp
+++ b/clang/test/OpenMP/amdgpu_threadprivate.cpp
@@ -1,5 +1,4 @@
-// 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++ -emit-llvm %s -o - | FileCheck %s
+// 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.
 



More information about the cfe-commits mailing list