[all-commits] [llvm/llvm-project] 312775: [ElimAvailExtern] Add an option to allow to conver...

Shilei Tian via All-commits all-commits at lists.llvm.org
Sun Jun 15 19:18:44 PDT 2025


  Branch: refs/heads/users/shiltian/convert-to-local-in-as
  Home:   https://github.com/llvm/llvm-project
  Commit: 3127751a44f4e24044482505192af5c7c0933e4a
      https://github.com/llvm/llvm-project/commit/3127751a44f4e24044482505192af5c7c0933e4a
  Author: Shilei Tian <i at tianshilei.me>
  Date:   2025-06-15 (Sun, 15 Jun 2025)

  Changed paths:
    M llvm/lib/Transforms/IPO/ElimAvailExtern.cpp
    A llvm/test/Transforms/EliminateAvailableExternally/convert-global-variables-to-local.ll

  Log Message:
  -----------
  [ElimAvailExtern] Add an option to allow to convert global variables in a specified address space to local

Currently, the `EliminateAvailableExternallyPass` only converts certain
available externally functions to local. 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.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list