[PATCH] D122352: [OpenMP] Do not create offloading entries for internal or hidden symbols
Joseph Huber via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 23 15:27:29 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rG0d16c23af1da: [OpenMP] Do not create offloading entries for internal or hidden symbols (authored by jhuber6).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D122352/new/
https://reviews.llvm.org/D122352
Files:
clang/lib/CodeGen/CGOpenMPRuntime.cpp
clang/test/OpenMP/declare_target_visibility_codegen.cpp
clang/test/OpenMP/nvptx_declare_target_var_ctor_dtor_codegen.cpp
Index: clang/test/OpenMP/nvptx_declare_target_var_ctor_dtor_codegen.cpp
===================================================================
--- clang/test/OpenMP/nvptx_declare_target_var_ctor_dtor_codegen.cpp
+++ clang/test/OpenMP/nvptx_declare_target_var_ctor_dtor_codegen.cpp
@@ -72,8 +72,6 @@
// DEVICE-DAG: call void
// DEVICE-DAG: ret void
-// HOST-DAG: @.omp_offloading.entry_name{{.*}} = internal unnamed_addr constant [{{[0-9]+}} x i8] c"[[C_ADDR]]\00"
-// HOST-DAG: @.omp_offloading.entry.[[C_ADDR]] = weak{{.*}} constant %struct.__tgt_offload_entry { i8* bitcast (i32* @[[C_ADDR]] to i8*), i8* getelementptr inbounds ([{{[0-9]+}} x i8], [{{[0-9]+}} x i8]* @.omp_offloading.entry_name{{.*}}, i32 0, i32 0), i64 4, i32 0, i32 0 }, section "omp_offloading_entries", align 1
// HOST-DAG: @.omp_offloading.entry_name{{.*}} = internal unnamed_addr constant [{{[0-9]+}} x i8] c"[[CD_ADDR]]\00"
// HOST-DAG: @.omp_offloading.entry.[[CD_ADDR]] = weak{{.*}} constant %struct.__tgt_offload_entry { i8* bitcast (%struct.S* @[[CD_ADDR]] to i8*), i8* getelementptr inbounds ([{{[0-9]+}} x i8], [{{[0-9]+}} x i8]* @.omp_offloading.entry_name{{.*}}, i32 0, i32 0), i64 4, i32 0, i32 0 }, section "omp_offloading_entries", align 1
// HOST-DAG: @.omp_offloading.entry_name{{.*}} = internal unnamed_addr constant [{{[0-9]+}} x i8] c"[[C_CTOR]]\00"
Index: clang/test/OpenMP/declare_target_visibility_codegen.cpp
===================================================================
--- /dev/null
+++ clang/test/OpenMP/declare_target_visibility_codegen.cpp
@@ -0,0 +1,30 @@
+// RUN: %clang_cc1 -verify -fopenmp -fopenmp-version=45 -fopenmp-targets=powerpc64le-ibm-linux-gnu -x c++ -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s --check-prefix=HOST
+
+// expected-no-diagnostics
+class C {
+public:
+//.
+// HOST: @[[C:.+]] = internal global %class.C zeroinitializer, align 4
+// HOST: @[[X:.+]] = internal global i32 0, align 4
+// HOST: @y = hidden global i32 0
+// HOST: @z = global i32 0
+// HOST-NOT: @.omp_offloading.entry.c
+// HOST-NOT: @.omp_offloading.entry.x
+// HOST-NOT: @.omp_offloading.entry.y
+// HOST: @.omp_offloading.entry.z
+ C() : x(0) {}
+
+ int x;
+};
+
+static C c;
+#pragma omp declare target(c)
+
+static int x;
+#pragma omp declare target(x)
+
+int __attribute__((visibility("hidden"))) y;
+#pragma omp declare target(y)
+
+int z;
+#pragma omp declare target(z)
Index: clang/lib/CodeGen/CGOpenMPRuntime.cpp
===================================================================
--- clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -3325,6 +3325,13 @@
}
break;
}
+
+ // Hidden or internal symbols on the device are not externally visible. We
+ // should not attempt to register them by creating an offloading entry.
+ if (auto *GV = dyn_cast<llvm::GlobalValue>(CE->getAddress()))
+ if (GV->hasLocalLinkage() || GV->hasHiddenVisibility())
+ continue;
+
createOffloadEntry(CE->getAddress(), CE->getAddress(),
CE->getVarSize().getQuantity(), Flags,
CE->getLinkage());
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D122352.417765.patch
Type: text/x-patch
Size: 3150 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220323/56a234f2/attachment.bin>
More information about the cfe-commits
mailing list