[all-commits] [llvm/llvm-project] c40697: Link the default GC strategies everywhere getGCStr...

Campbell Suter via All-commits all-commits at lists.llvm.org
Tue Jan 3 00:08:09 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: c40697a1b76d9eed978900db759a66d97fbde70b
      https://github.com/llvm/llvm-project/commit/c40697a1b76d9eed978900db759a66d97fbde70b
  Author: Campbell Suter <znix at znix.xyz>
  Date:   2023-01-03 (Tue, 03 Jan 2023)

  Changed paths:
    M llvm/include/llvm/CodeGen/LinkAllCodegenComponents.h
    M llvm/lib/IR/GCStrategy.cpp

  Log Message:
  -----------
  Link the default GC strategies everywhere getGCStrategy is used.

GC strategies are registered using a system of global constructors: any
object can include a GCRegistry::Add stataic variable to register a
strategy, and that will generate a static constructor which registers
this strategy into a global list.

This allows shared libraries to easily register their own strategies,
but poses a problem related to linking: the default GC strategies
(defined and registered in their own file) must obviously be included in
LLVM binaries.

The previous solution was to define an empty functon in BuiltinGCs.cpp,
and call it from LinkAllCodegenComponents.h - this is the solution used
for many other codegen components. This header is then included into the
llc and lli main source files, ensuring everything gets linked into
those binaries.

This isn't great for GCStrategy, which we'd like [1] to use in other
binaries, notably opt for the RS4GC [2] pass. Instead of doing something
specific to opt (for example, adding a call in LinkAllIR), this patch
links to the registry function from getGCStrategy, in the assumption
that anything that might look up a GC strategy probably also expects
the default strategies to exist.

[1] https://reviews.llvm.org/D140458
[2] RewriteStatepointsForGC

Differential Revision: https://reviews.llvm.org/D140504




More information about the All-commits mailing list