mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
b6c9039962
The GenericLLVMIRPlatformSupport class runs a transform on all LLVM IR added to the LLJIT instance to replace instances of llvm.global_ctors with a specially named function that runs the corresponing static initializers (See (GlobalCtorDtorScraper from lib/ExecutionEngine/Orc/LLJIT.cpp). This patch updates the GenericIRPlatform class to check for this specially named function in other materialization units that are added to the JIT and, if found, add the function to the initializer work queue. Doing this allows object files that were compiled from IR and cached to be reloaded in subsequent JIT sessions without their initializers being skipped. To enable testing this patch also updates the lli tool's -jit-kind=orc-lazy mode to respect the -enable-cache-manager and -object-cache-dir options, and modifies the CompileOnDemandLayer to rename extracted submodules to include a hash of the names of their symbol definitions. This allows a simple object caching scheme based on module names (which was already implemented in lli) to work with the lazy JIT. |
||
---|---|---|
.. | ||
Inputs | ||
anonymous_globals.ll | ||
bad-object-file.ll | ||
basic-object-file-loading.ll | ||
basic-whole-module-partitions.ll | ||
common-symbols.ll | ||
emulated-tls.ll | ||
global_aliases.ll | ||
global-ctors-and-dtors.ll | ||
hidden-visibility.ll | ||
lit.local.cfg | ||
minimal.ll | ||
module-flags.ll | ||
multiple-compile-threads-basic.ll | ||
objc-minimal.ll | ||
printargv.ll | ||
private_linkage.ll | ||
single-function-call.ll | ||
static-initializers-in-objectfiles.ll | ||
static-library-support.ll | ||
weak-function.ll | ||
weak-non-materialization.ll |