diff options
| author | Yaxun Liu <Yaxun.Liu@amd.com> | 2018-07-28 03:05:25 +0000 |
|---|---|---|
| committer | Yaxun Liu <Yaxun.Liu@amd.com> | 2018-07-28 03:05:25 +0000 |
| commit | a4005e13f72ece696cce5d190fb73abec116d18a (patch) | |
| tree | 99111c1e5acba99421c03668201f96acaba2e38e /clang/lib/CodeGen/CodeGenModule.cpp | |
| parent | 39e5137f43917417a2ce6bb663de39af005bd452 (diff) | |
| download | llvm-a4005e13f72ece696cce5d190fb73abec116d18a.zip llvm-a4005e13f72ece696cce5d190fb73abec116d18a.tar.gz llvm-a4005e13f72ece696cce5d190fb73abec116d18a.tar.bz2 | |
[CUDA][HIP] Allow function-scope static const variable
CUDA 8.0 E.3.9.4 says: Within the body of a __device__ or __global__
function, only __shared__ variables or variables without any device
memory qualifiers may be declared with static storage class.
It is unclear how a function-scope non-const static variable
without device memory qualifier is implemented, therefore only static
const variable without device memory qualifier is allowed, which
can be emitted as a global variable in constant address space.
Currently clang only allows function-scope static variable with
__shared__ qualifier.
This patch also allows function-scope static const variable without
device memory qualifier and emits it as a global variable in constant
address space.
Differential Revision: https://reviews.llvm.org/D49931
llvm-svn: 338188
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index ecdf78d..ae2c134 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -3176,6 +3176,10 @@ LangAS CodeGenModule::GetGlobalVarAddressSpace(const VarDecl *D) { return LangAS::cuda_constant; else if (D && D->hasAttr<CUDASharedAttr>()) return LangAS::cuda_shared; + else if (D && D->hasAttr<CUDADeviceAttr>()) + return LangAS::cuda_device; + else if (D && D->getType().isConstQualified()) + return LangAS::cuda_constant; else return LangAS::cuda_device; } |
