mirror of
https://github.com/intel/llvm.git
synced 2026-01-16 13:35:38 +08:00
[CUDA][HIP] Skip setting externally_initialized for static device variables.
Summary: - By declaring device variables as `static`, we assume they won't be addressable from the host side. Thus, no `externally_initialized` is required. Reviewers: yaxunl Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D62603 llvm-svn: 361994
This commit is contained in:
@@ -3869,7 +3869,8 @@ void CodeGenModule::EmitGlobalVarDefinition(const VarDecl *D,
|
||||
// / cudaMemcpyToSymbol() / cudaMemcpyFromSymbol())."
|
||||
if (GV && LangOpts.CUDA) {
|
||||
if (LangOpts.CUDAIsDevice) {
|
||||
if (D->hasAttr<CUDADeviceAttr>() || D->hasAttr<CUDAConstantAttr>())
|
||||
if (Linkage != llvm::GlobalValue::InternalLinkage &&
|
||||
(D->hasAttr<CUDADeviceAttr>() || D->hasAttr<CUDAConstantAttr>()))
|
||||
GV->setExternallyInitialized(true);
|
||||
} else {
|
||||
// Host-side shadows of external declarations of device-side
|
||||
|
||||
@@ -33,6 +33,16 @@ __device__ int d_v_i = 1;
|
||||
// DEVICE: @d_v_i = addrspace(1) externally_initialized global i32 1,
|
||||
// HOST: @d_v_i = internal global i32 undef,
|
||||
|
||||
// For `static` device variables, assume they won't be addressed from the host
|
||||
// side.
|
||||
static __device__ int d_s_v_i = 1;
|
||||
// DEVICE: @_ZL7d_s_v_i = internal addrspace(1) global i32 1,
|
||||
|
||||
// Dummy function to keep static variables referenced.
|
||||
__device__ int foo() {
|
||||
return d_s_v_i;
|
||||
}
|
||||
|
||||
// trivial constructor -- allowed
|
||||
__device__ T d_t;
|
||||
// DEVICE: @d_t = addrspace(1) externally_initialized global %struct.T zeroinitializer
|
||||
|
||||
Reference in New Issue
Block a user