diff options
author | Mingming Liu <mingmingl@google.com> | 2024-12-02 16:15:52 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-02 16:15:52 -0800 |
commit | 6faf17b7626bfdeea977a7a333c6e20ed677615d (patch) | |
tree | 5646cc635378ec694875da2c23d115f3d95b5567 /llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | |
parent | 7267c85959aa2490e2950f7fb817a76af7e94043 (diff) | |
download | llvm-6faf17b7626bfdeea977a7a333c6e20ed677615d.zip llvm-6faf17b7626bfdeea977a7a333c6e20ed677615d.tar.gz llvm-6faf17b7626bfdeea977a7a333c6e20ed677615d.tar.bz2 |
[ThinLTO]Supports declaration import for global variables in distributed ThinLTO (#117616)
When `-import-declaration` option is enabled, declaration import is
supported for functions. https://github.com/llvm/llvm-project/pull/88024
has the context for this option.
This patch supports declaration import for global variables in
distributed ThinLTO. The motivating use case is to propagate `dso_local`
attribute of global variables across modules, to optimize global
variable access when a binary is built with
`-fno-direct-access-external-data`.
* With `-fdirect-access-external-data`, non thread-local global
variables will [have `dso_local`
attributes](https://github.com/llvm/llvm-project/blob/fe3c23b439b9a2d00442d9bc6a4ca86f73066a3d/clang/lib/CodeGen/CodeGenModule.cpp#L1730-L1746).
This optimizes the global variable access as shown by
https://gcc.godbolt.org/z/vMzWcKdh3
Diffstat (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 63f4e34..0444cb9 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -4900,7 +4900,8 @@ void IndexBitcodeWriter::writeCombinedGlobalValueSummary() { NameVals.push_back(*ValueId); assert(ModuleIdMap.count(VS->modulePath())); NameVals.push_back(ModuleIdMap[VS->modulePath()]); - NameVals.push_back(getEncodedGVSummaryFlags(VS->flags())); + NameVals.push_back( + getEncodedGVSummaryFlags(VS->flags(), shouldImportValueAsDecl(VS))); NameVals.push_back(getEncodedGVarFlags(VS->varflags())); for (auto &RI : VS->refs()) { auto RefValueId = getValueId(RI.getGUID()); |