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/test/CodeGenCUDA/device-var-init.cu | |
parent | 39e5137f43917417a2ce6bb663de39af005bd452 (diff) | |
download | bcm5719-llvm-a4005e13f72ece696cce5d190fb73abec116d18a.tar.gz bcm5719-llvm-a4005e13f72ece696cce5d190fb73abec116d18a.zip |
[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/test/CodeGenCUDA/device-var-init.cu')
-rw-r--r-- | clang/test/CodeGenCUDA/device-var-init.cu | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/clang/test/CodeGenCUDA/device-var-init.cu b/clang/test/CodeGenCUDA/device-var-init.cu index 9f788b764fb..f96e42d9711 100644 --- a/clang/test/CodeGenCUDA/device-var-init.cu +++ b/clang/test/CodeGenCUDA/device-var-init.cu @@ -112,6 +112,9 @@ __constant__ EC_I_EC c_ec_i_ec; // CHECK: @_ZZ2dfvE4s_ec = internal addrspace(3) global %struct.EC undef // CHECK: @_ZZ2dfvE5s_etc = internal addrspace(3) global %struct.ETC undef +// CHECK: @_ZZ2dfvE11const_array = internal addrspace(4) constant [5 x i32] [i32 1, i32 2, i32 3, i32 4, i32 5] +// CHECK: @_ZZ2dfvE9const_int = internal addrspace(4) constant i32 123 + // We should not emit global initializers for device-side variables. // CHECK-NOT: @__cxx_global_var_init @@ -234,6 +237,9 @@ __device__ void df() { static __shared__ ETC s_etc; // CHECK-NOT: call void @_ZN3ETCC1IJEEEDpT_(%struct.ETC* addrspacecast (%struct.ETC addrspace(3)* @_ZZ2dfvE5s_etc to %struct.ETC*)) + static const int const_array[] = {1, 2, 3, 4, 5}; + static const int const_int = 123; + // anchor point separating constructors and destructors df(); // CHECK: call void @_Z2dfv() |