mirror of
https://github.com/postgres/postgres.git
synced 2025-07-09 22:41:56 +03:00
Debugging and profiling support for LLVM JIT provider.
This currently requires patches to the LLVM codebase to be effective (submitted upstream), the GUCs are available without those patches however. Author: Andres Freund Discussion: https://postgr.es/m/20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de
This commit is contained in:
@ -33,7 +33,9 @@
|
||||
/* GUCs */
|
||||
bool jit_enabled = true;
|
||||
char *jit_provider = "llvmjit";
|
||||
bool jit_debugging_support = false;
|
||||
bool jit_dump_bitcode = false;
|
||||
bool jit_profiling_support = false;
|
||||
|
||||
static JitProviderCallbacks provider;
|
||||
static bool provider_successfully_loaded = false;
|
||||
|
@ -541,6 +541,21 @@ llvm_session_initialize(void)
|
||||
llvm_opt0_orc = LLVMOrcCreateInstance(llvm_opt0_targetmachine);
|
||||
llvm_opt3_orc = LLVMOrcCreateInstance(llvm_opt3_targetmachine);
|
||||
|
||||
#if defined(HAVE_DECL_LLVMORCREGISTERGDB) && HAVE_DECL_LLVMORCREGISTERGDB
|
||||
if (jit_debugging_support)
|
||||
{
|
||||
LLVMOrcRegisterGDB(llvm_opt0_orc);
|
||||
LLVMOrcRegisterGDB(llvm_opt3_orc);
|
||||
}
|
||||
#endif
|
||||
#if defined(HAVE_DECL_LLVMORCREGISTERPERF) && HAVE_DECL_LLVMORCREGISTERPERF
|
||||
if (jit_profiling_support)
|
||||
{
|
||||
LLVMOrcRegisterPerf(llvm_opt0_orc);
|
||||
LLVMOrcRegisterPerf(llvm_opt3_orc);
|
||||
}
|
||||
#endif
|
||||
|
||||
before_shmem_exit(llvm_shutdown, 0);
|
||||
|
||||
llvm_session_initialized = true;
|
||||
@ -551,6 +566,27 @@ llvm_session_initialize(void)
|
||||
static void
|
||||
llvm_shutdown(int code, Datum arg)
|
||||
{
|
||||
/* unregister profiling support, needs to be flushed to be useful */
|
||||
|
||||
if (llvm_opt3_orc)
|
||||
{
|
||||
#if defined(HAVE_DECL_LLVMORCREGISTERPERF) && HAVE_DECL_LLVMORCREGISTERPERF
|
||||
if (jit_profiling_support)
|
||||
LLVMOrcUnregisterPerf(llvm_opt3_orc);
|
||||
#endif
|
||||
LLVMOrcDisposeInstance(llvm_opt3_orc);
|
||||
llvm_opt3_orc = NULL;
|
||||
}
|
||||
|
||||
if (llvm_opt0_orc)
|
||||
{
|
||||
#if defined(HAVE_DECL_LLVMORCREGISTERPERF) && HAVE_DECL_LLVMORCREGISTERPERF
|
||||
if (jit_profiling_support)
|
||||
LLVMOrcUnregisterPerf(llvm_opt0_orc);
|
||||
#endif
|
||||
LLVMOrcDisposeInstance(llvm_opt0_orc);
|
||||
llvm_opt0_orc = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* helper for llvm_create_types */
|
||||
|
Reference in New Issue
Block a user