diff options
author | Shilei Tian <i@tianshilei.me> | 2025-06-17 19:58:24 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-17 19:58:24 -0400 |
commit | 15482c83aa2b05779d7ad947c34835656ab9da1c (patch) | |
tree | dc8dab56691ff2af5199cd4dd1886c583c92fc9f /llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp | |
parent | c21a4c6c43bb6d68dfe52e07a5a391a6167eedf9 (diff) | |
download | llvm-15482c83aa2b05779d7ad947c34835656ab9da1c.zip llvm-15482c83aa2b05779d7ad947c34835656ab9da1c.tar.gz llvm-15482c83aa2b05779d7ad947c34835656ab9da1c.tar.bz2 |
[ElimAvailExtern] Add an option to allow to convert global variables in a specified address space to local (#144287)
Currently, the `EliminateAvailableExternallyPass` only converts certain
available externally functions to local if `avail-extern-to-local` is
set or in
contextual profiling mode. For global variables, it only drops their
initializers.
This PR adds an option to allow the pass to convert global variables in
a
specified address space to local. The motivation for this change is to
correctly
support lowering of LDS variables (`__shared__` variables, in more
generic
terminology) when ThinLTO is enabled for AMDGPU.
A `__shared__` variable is lowered to a hidden global variable in a
particular
address space by the frontend, which is roughly same as a `static` local
variable. To properly lower it in the backend, the compiler needs to
check all
its uses. Enabling ThinLTO currently breaks this when a function
containing a
`__shared__` variable is imported from another module. Even though the
global
variable is imported along with its associated function, and the
function is
privatized by the `EliminateAvailableExternallyPass`, the global
variable itself
is not.
It's safe to privatize such global variables, because they're _local_ to
their
associated functions. If the function itself is privatized, its
associated
global variables should also be privatized accordingly.
Diffstat (limited to 'llvm/lib/Target/RISCV/Disassembler/RISCVDisassembler.cpp')
0 files changed, 0 insertions, 0 deletions