This is an archive of the discontinued LLVM Phabricator instance.

Link the default GC strategies everywhere getGCStrategy is used
ClosedPublic

Authored by znix on Dec 21 2022, 2:50 PM.

Details

Summary

GC strategies are registed 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

Diff Detail

Event Timeline

znix created this revision.Dec 21 2022, 2:50 PM
Herald added a project: Restricted Project. · View Herald TranscriptDec 21 2022, 2:50 PM
Herald added a subscriber: hiraditya. · View Herald Transcript
znix requested review of this revision.Dec 21 2022, 2:50 PM
Herald added a project: Restricted Project. · View Herald TranscriptDec 21 2022, 2:50 PM

Tried your patch together with my old uncommitted change which utilizes GCStrategy in IR Verifier and it works fine now. So LGTM.
Please wait few days for other reviewers to have a chance to comment.

dantrushin accepted this revision.Dec 30 2022, 6:01 AM

OK, go ahead.

This revision is now accepted and ready to land.Dec 30 2022, 6:01 AM
znix added a comment.Dec 30 2022, 3:29 PM

I don't have commit access, could you please commit it?

This revision was landed with ongoing or failed builds.Jan 3 2023, 12:08 AM
This revision was automatically updated to reflect the committed changes.