diff options
| author | Yaxun (Sam) Liu <yaxun.liu@amd.com> | 2021-05-11 10:09:38 -0400 |
|---|---|---|
| committer | Yaxun (Sam) Liu <yaxun.liu@amd.com> | 2021-05-12 11:13:29 -0400 |
| commit | 98575708da9544ccab8939fece9c3d638a32f09f (patch) | |
| tree | 51ce0cab79ffa706204ab2bf4337a45258ada30f /clang/lib/CodeGen/CodeGenModule.cpp | |
| parent | 44e0e91db01abb9de1868f5acf3ff4f2648b8fc0 (diff) | |
[CUDA][HIP] Fix device template variables
Currently clang does not emit device template variables
instantiated only in host functions, however, nvcc is
able to do that:
https://godbolt.org/z/fneEfferY
This patch fixes this issue by refactoring and extending
the existing mechanism for emitting static device
var ODR-used by host only. Basically clang records
device variables ODR-used by host code and force
them to be emitted in device compilation. The existing
mechanism makes sure these device variables ODR-used
by host code are added to llvm.compiler-used, therefore
they are guaranteed not to be deleted.
It also fixes non-ODR-use of static device variable by host code
causing static device variable to be emitted and registered,
which should not.
Reviewed by: Artem Belevich
Differential Revision: https://reviews.llvm.org/D102237
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.cpp')
| -rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index c61da1c980a2..e3c843c8e9d3 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -2362,8 +2362,8 @@ void CodeGenModule::EmitDeferred() { } // Emit CUDA/HIP static device variables referenced by host code only. - if (getLangOpts().CUDA) - for (auto V : getContext().CUDAStaticDeviceVarReferencedByHost) + if (getLangOpts().CUDA && getLangOpts().CUDAIsDevice) + for (const auto *V : getContext().CUDADeviceVarODRUsedByHost) DeferredDeclsToEmit.push_back(V); // Stop if we're out of both deferred vtables and deferred declarations. |
