diff options
author | Joseph Huber <jhuber6@vols.utk.edu> | 2022-05-18 09:19:15 -0400 |
---|---|---|
committer | Joseph Huber <jhuber6@vols.utk.edu> | 2022-05-26 09:18:22 -0400 |
commit | 1bae02b77335eb1a01d9a0bb36c2b2a29dfdd5d9 (patch) | |
tree | 65259083d5e58ada7b7da05ef8503eb2128587c6 /clang/lib/CodeGen/CodeGenModule.h | |
parent | 3952c905ef08580de1ddc5d776177497407a6093 (diff) | |
download | llvm-1bae02b77335eb1a01d9a0bb36c2b2a29dfdd5d9.zip llvm-1bae02b77335eb1a01d9a0bb36c2b2a29dfdd5d9.tar.gz llvm-1bae02b77335eb1a01d9a0bb36c2b2a29dfdd5d9.tar.bz2 |
[Cuda] Use fallback method to mangle externalized decls if no CUID given
CUDA requires that static variables be visible to the host when
offloading. However, The standard semantics of a stiatc variable dictate
that it should not be visible outside of the current file. In order to
access it from the host we need to perform "externalization" on the
static variable on the device. This requires generating a semi-unique
name that can be affixed to the variable as to not cause linker errors.
This is currently done using the CUID functionality, an MD5 hash value
set up by the clang driver. This allows us to achieve is mostly unique
ID that is unique even between multiple compilations of the same file.
However, this is not always availible. Instead, this patch uses the
unique ID from the file to generate a unique symbol name. This will
create a unique name that is consistent between the host and device side
compilations without requiring the CUID to be entered by the driver. The
one downside to this is that we are no longer stable under multiple
compilations of the same file. However, this is a very niche use-case
and is not supported by Nvidia's CUDA compiler so it likely to be good
enough.
Reviewed By: tra
Differential Revision: https://reviews.llvm.org/D125904
Diffstat (limited to 'clang/lib/CodeGen/CodeGenModule.h')
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h index 8393d43..a5ec4c8 100644 --- a/clang/lib/CodeGen/CodeGenModule.h +++ b/clang/lib/CodeGen/CodeGenModule.h @@ -1467,7 +1467,10 @@ public: bool stopAutoInit(); /// Print the postfix for externalized static variable or kernels for single - /// source offloading languages CUDA and HIP. + /// source offloading languages CUDA and HIP. The unique postfix is created + /// using either the CUID argument, or the file's UniqueID and active macros. + /// The fallback method without a CUID requires that the offloading toolchain + /// does not define separate macros via the -cc1 options. void printPostfixForExternalizedDecl(llvm::raw_ostream &OS, const Decl *D) const; |