mirror of
https://github.com/postgres/postgres.git
synced 2025-04-18 13:44:19 +03:00
jit: Require at least LLVM 14, if enabled.
Remove support for LLVM versions 10-13. The default on all non-EOL'd OSes represented in our build farm will be at least LLVM 14 when PostgreSQL 18 ships. Author: Thomas Munro <thomas.munro@gmail.com> Reviewed-by: Peter Eisentraut <peter@eisentraut.org> Discussion: https://postgr.es/m/CA%2BhUKGLhNs5geZaVNj2EJ79Dx9W8fyWUU3HxcpZy55sMGcY%3DiA%40mail.gmail.com
This commit is contained in:
parent
1b4d52c355
commit
972c2cd288
@ -25,8 +25,8 @@ AC_DEFUN([PGAC_LLVM_SUPPORT],
|
|||||||
AC_MSG_ERROR([$LLVM_CONFIG does not work])
|
AC_MSG_ERROR([$LLVM_CONFIG does not work])
|
||||||
fi
|
fi
|
||||||
# and whether the version is supported
|
# and whether the version is supported
|
||||||
if echo $pgac_llvm_version | $AWK -F '.' '{ if ([$]1 >= 10) exit 1; else exit 0;}';then
|
if echo $pgac_llvm_version | $AWK -F '.' '{ if ([$]1 >= 14) exit 1; else exit 0;}';then
|
||||||
AC_MSG_ERROR([$LLVM_CONFIG version is $pgac_llvm_version but at least 10 is required])
|
AC_MSG_ERROR([$LLVM_CONFIG version is $pgac_llvm_version but at least 14 is required])
|
||||||
fi
|
fi
|
||||||
AC_MSG_NOTICE([using llvm $pgac_llvm_version])
|
AC_MSG_NOTICE([using llvm $pgac_llvm_version])
|
||||||
|
|
||||||
|
4
configure
vendored
4
configure
vendored
@ -5072,8 +5072,8 @@ fi
|
|||||||
as_fn_error $? "$LLVM_CONFIG does not work" "$LINENO" 5
|
as_fn_error $? "$LLVM_CONFIG does not work" "$LINENO" 5
|
||||||
fi
|
fi
|
||||||
# and whether the version is supported
|
# and whether the version is supported
|
||||||
if echo $pgac_llvm_version | $AWK -F '.' '{ if ($1 >= 10) exit 1; else exit 0;}';then
|
if echo $pgac_llvm_version | $AWK -F '.' '{ if ($1 >= 14) exit 1; else exit 0;}';then
|
||||||
as_fn_error $? "$LLVM_CONFIG version is $pgac_llvm_version but at least 10 is required" "$LINENO" 5
|
as_fn_error $? "$LLVM_CONFIG version is $pgac_llvm_version but at least 14 is required" "$LINENO" 5
|
||||||
fi
|
fi
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: using llvm $pgac_llvm_version" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: using llvm $pgac_llvm_version" >&5
|
||||||
$as_echo "$as_me: using llvm $pgac_llvm_version" >&6;}
|
$as_echo "$as_me: using llvm $pgac_llvm_version" >&6;}
|
||||||
|
@ -936,7 +936,7 @@ build-postgresql:
|
|||||||
<acronym>JIT</acronym> compilation (see <xref linkend="jit"/>). This
|
<acronym>JIT</acronym> compilation (see <xref linkend="jit"/>). This
|
||||||
requires the <productname>LLVM</productname> library to be installed.
|
requires the <productname>LLVM</productname> library to be installed.
|
||||||
The minimum required version of <productname>LLVM</productname> is
|
The minimum required version of <productname>LLVM</productname> is
|
||||||
currently 10.
|
currently 14.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
<command>llvm-config</command><indexterm><primary>llvm-config</primary></indexterm>
|
<command>llvm-config</command><indexterm><primary>llvm-config</primary></indexterm>
|
||||||
@ -2394,7 +2394,7 @@ ninja install
|
|||||||
<acronym>JIT</acronym> compilation (see <xref linkend="jit"/>).
|
<acronym>JIT</acronym> compilation (see <xref linkend="jit"/>).
|
||||||
This requires the <productname>LLVM</productname> library to be
|
This requires the <productname>LLVM</productname> library to be
|
||||||
installed. The minimum required version of
|
installed. The minimum required version of
|
||||||
<productname>LLVM</productname> is currently 10. Disabled by
|
<productname>LLVM</productname> is currently 14. Disabled by
|
||||||
default.
|
default.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
|
@ -792,7 +792,7 @@ endif
|
|||||||
llvmopt = get_option('llvm')
|
llvmopt = get_option('llvm')
|
||||||
llvm = not_found_dep
|
llvm = not_found_dep
|
||||||
if add_languages('cpp', required: llvmopt, native: false)
|
if add_languages('cpp', required: llvmopt, native: false)
|
||||||
llvm = dependency('llvm', version: '>=10', method: 'config-tool', required: llvmopt)
|
llvm = dependency('llvm', version: '>=14', method: 'config-tool', required: llvmopt)
|
||||||
|
|
||||||
if llvm.found()
|
if llvm.found()
|
||||||
|
|
||||||
|
@ -21,13 +21,9 @@
|
|||||||
#if LLVM_VERSION_MAJOR > 16
|
#if LLVM_VERSION_MAJOR > 16
|
||||||
#include <llvm-c/Transforms/PassBuilder.h>
|
#include <llvm-c/Transforms/PassBuilder.h>
|
||||||
#endif
|
#endif
|
||||||
#if LLVM_VERSION_MAJOR > 11
|
|
||||||
#include <llvm-c/Orc.h>
|
#include <llvm-c/Orc.h>
|
||||||
#include <llvm-c/OrcEE.h>
|
#include <llvm-c/OrcEE.h>
|
||||||
#include <llvm-c/LLJIT.h>
|
#include <llvm-c/LLJIT.h>
|
||||||
#else
|
|
||||||
#include <llvm-c/OrcBindings.h>
|
|
||||||
#endif
|
|
||||||
#include <llvm-c/Support.h>
|
#include <llvm-c/Support.h>
|
||||||
#include <llvm-c/Target.h>
|
#include <llvm-c/Target.h>
|
||||||
#if LLVM_VERSION_MAJOR < 17
|
#if LLVM_VERSION_MAJOR < 17
|
||||||
@ -50,13 +46,8 @@
|
|||||||
/* Handle of a module emitted via ORC JIT */
|
/* Handle of a module emitted via ORC JIT */
|
||||||
typedef struct LLVMJitHandle
|
typedef struct LLVMJitHandle
|
||||||
{
|
{
|
||||||
#if LLVM_VERSION_MAJOR > 11
|
|
||||||
LLVMOrcLLJITRef lljit;
|
LLVMOrcLLJITRef lljit;
|
||||||
LLVMOrcResourceTrackerRef resource_tracker;
|
LLVMOrcResourceTrackerRef resource_tracker;
|
||||||
#else
|
|
||||||
LLVMOrcJITStackRef stack;
|
|
||||||
LLVMOrcModuleHandle orc_handle;
|
|
||||||
#endif
|
|
||||||
} LLVMJitHandle;
|
} LLVMJitHandle;
|
||||||
|
|
||||||
|
|
||||||
@ -103,14 +94,9 @@ static LLVMContextRef llvm_context;
|
|||||||
|
|
||||||
|
|
||||||
static LLVMTargetRef llvm_targetref;
|
static LLVMTargetRef llvm_targetref;
|
||||||
#if LLVM_VERSION_MAJOR > 11
|
|
||||||
static LLVMOrcThreadSafeContextRef llvm_ts_context;
|
static LLVMOrcThreadSafeContextRef llvm_ts_context;
|
||||||
static LLVMOrcLLJITRef llvm_opt0_orc;
|
static LLVMOrcLLJITRef llvm_opt0_orc;
|
||||||
static LLVMOrcLLJITRef llvm_opt3_orc;
|
static LLVMOrcLLJITRef llvm_opt3_orc;
|
||||||
#else /* LLVM_VERSION_MAJOR > 11 */
|
|
||||||
static LLVMOrcJITStackRef llvm_opt0_orc;
|
|
||||||
static LLVMOrcJITStackRef llvm_opt3_orc;
|
|
||||||
#endif /* LLVM_VERSION_MAJOR > 11 */
|
|
||||||
|
|
||||||
|
|
||||||
static void llvm_release_context(JitContext *context);
|
static void llvm_release_context(JitContext *context);
|
||||||
@ -124,10 +110,8 @@ static void llvm_set_target(void);
|
|||||||
static void llvm_recreate_llvm_context(void);
|
static void llvm_recreate_llvm_context(void);
|
||||||
static uint64_t llvm_resolve_symbol(const char *name, void *ctx);
|
static uint64_t llvm_resolve_symbol(const char *name, void *ctx);
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR > 11
|
|
||||||
static LLVMOrcLLJITRef llvm_create_jit_instance(LLVMTargetMachineRef tm);
|
static LLVMOrcLLJITRef llvm_create_jit_instance(LLVMTargetMachineRef tm);
|
||||||
static char *llvm_error_message(LLVMErrorRef error);
|
static char *llvm_error_message(LLVMErrorRef error);
|
||||||
#endif /* LLVM_VERSION_MAJOR > 11 */
|
|
||||||
|
|
||||||
/* ResourceOwner callbacks to hold JitContexts */
|
/* ResourceOwner callbacks to hold JitContexts */
|
||||||
static void ResOwnerReleaseJitContext(Datum res);
|
static void ResOwnerReleaseJitContext(Datum res);
|
||||||
@ -292,7 +276,6 @@ llvm_release_context(JitContext *context)
|
|||||||
{
|
{
|
||||||
LLVMJitHandle *jit_handle = (LLVMJitHandle *) lfirst(lc);
|
LLVMJitHandle *jit_handle = (LLVMJitHandle *) lfirst(lc);
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR > 11
|
|
||||||
{
|
{
|
||||||
LLVMOrcExecutionSessionRef ee;
|
LLVMOrcExecutionSessionRef ee;
|
||||||
LLVMOrcSymbolStringPoolRef sp;
|
LLVMOrcSymbolStringPoolRef sp;
|
||||||
@ -310,11 +293,6 @@ llvm_release_context(JitContext *context)
|
|||||||
sp = LLVMOrcExecutionSessionGetSymbolStringPool(ee);
|
sp = LLVMOrcExecutionSessionGetSymbolStringPool(ee);
|
||||||
LLVMOrcSymbolStringPoolClearDeadEntries(sp);
|
LLVMOrcSymbolStringPoolClearDeadEntries(sp);
|
||||||
}
|
}
|
||||||
#else /* LLVM_VERSION_MAJOR > 11 */
|
|
||||||
{
|
|
||||||
LLVMOrcRemoveModule(jit_handle->stack, jit_handle->orc_handle);
|
|
||||||
}
|
|
||||||
#endif /* LLVM_VERSION_MAJOR > 11 */
|
|
||||||
|
|
||||||
pfree(jit_handle);
|
pfree(jit_handle);
|
||||||
}
|
}
|
||||||
@ -397,7 +375,6 @@ llvm_get_function(LLVMJitContext *context, const char *funcname)
|
|||||||
* to mangle here.
|
* to mangle here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR > 11
|
|
||||||
foreach(lc, context->handles)
|
foreach(lc, context->handles)
|
||||||
{
|
{
|
||||||
LLVMJitHandle *handle = (LLVMJitHandle *) lfirst(lc);
|
LLVMJitHandle *handle = (LLVMJitHandle *) lfirst(lc);
|
||||||
@ -427,19 +404,6 @@ llvm_get_function(LLVMJitContext *context, const char *funcname)
|
|||||||
if (addr)
|
if (addr)
|
||||||
return (void *) (uintptr_t) addr;
|
return (void *) (uintptr_t) addr;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
foreach(lc, context->handles)
|
|
||||||
{
|
|
||||||
LLVMOrcTargetAddress addr;
|
|
||||||
LLVMJitHandle *handle = (LLVMJitHandle *) lfirst(lc);
|
|
||||||
|
|
||||||
addr = 0;
|
|
||||||
if (LLVMOrcGetSymbolAddressIn(handle->stack, &addr, handle->orc_handle, funcname))
|
|
||||||
elog(ERROR, "failed to look up symbol \"%s\"", funcname);
|
|
||||||
if (addr)
|
|
||||||
return (void *) (uintptr_t) addr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
elog(ERROR, "failed to JIT: %s", funcname);
|
elog(ERROR, "failed to JIT: %s", funcname);
|
||||||
|
|
||||||
@ -740,11 +704,7 @@ llvm_compile_module(LLVMJitContext *context)
|
|||||||
MemoryContext oldcontext;
|
MemoryContext oldcontext;
|
||||||
instr_time starttime;
|
instr_time starttime;
|
||||||
instr_time endtime;
|
instr_time endtime;
|
||||||
#if LLVM_VERSION_MAJOR > 11
|
|
||||||
LLVMOrcLLJITRef compile_orc;
|
LLVMOrcLLJITRef compile_orc;
|
||||||
#else
|
|
||||||
LLVMOrcJITStackRef compile_orc;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (context->base.flags & PGJIT_OPT3)
|
if (context->base.flags & PGJIT_OPT3)
|
||||||
compile_orc = llvm_opt3_orc;
|
compile_orc = llvm_opt3_orc;
|
||||||
@ -801,7 +761,6 @@ llvm_compile_module(LLVMJitContext *context)
|
|||||||
* faster instruction selection mechanism is used.
|
* faster instruction selection mechanism is used.
|
||||||
*/
|
*/
|
||||||
INSTR_TIME_SET_CURRENT(starttime);
|
INSTR_TIME_SET_CURRENT(starttime);
|
||||||
#if LLVM_VERSION_MAJOR > 11
|
|
||||||
{
|
{
|
||||||
LLVMOrcThreadSafeModuleRef ts_module;
|
LLVMOrcThreadSafeModuleRef ts_module;
|
||||||
LLVMErrorRef error;
|
LLVMErrorRef error;
|
||||||
@ -829,16 +788,6 @@ llvm_compile_module(LLVMJitContext *context)
|
|||||||
|
|
||||||
/* LLVMOrcLLJITAddLLVMIRModuleWithRT takes ownership of the module */
|
/* LLVMOrcLLJITAddLLVMIRModuleWithRT takes ownership of the module */
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
{
|
|
||||||
handle->stack = compile_orc;
|
|
||||||
if (LLVMOrcAddEagerlyCompiledIR(compile_orc, &handle->orc_handle, context->module,
|
|
||||||
llvm_resolve_symbol, NULL))
|
|
||||||
elog(ERROR, "failed to JIT module");
|
|
||||||
|
|
||||||
/* LLVMOrcAddEagerlyCompiledIR takes ownership of the module */
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
INSTR_TIME_SET_CURRENT(endtime);
|
INSTR_TIME_SET_CURRENT(endtime);
|
||||||
INSTR_TIME_ACCUM_DIFF(context->base.instr.emission_counter,
|
INSTR_TIME_ACCUM_DIFF(context->base.instr.emission_counter,
|
||||||
@ -950,7 +899,6 @@ llvm_session_initialize(void)
|
|||||||
/* force symbols in main binary to be loaded */
|
/* force symbols in main binary to be loaded */
|
||||||
LLVMLoadLibraryPermanently(NULL);
|
LLVMLoadLibraryPermanently(NULL);
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR > 11
|
|
||||||
{
|
{
|
||||||
llvm_ts_context = LLVMOrcCreateNewThreadSafeContext();
|
llvm_ts_context = LLVMOrcCreateNewThreadSafeContext();
|
||||||
|
|
||||||
@ -960,31 +908,6 @@ llvm_session_initialize(void)
|
|||||||
llvm_opt3_orc = llvm_create_jit_instance(opt3_tm);
|
llvm_opt3_orc = llvm_create_jit_instance(opt3_tm);
|
||||||
opt3_tm = 0;
|
opt3_tm = 0;
|
||||||
}
|
}
|
||||||
#else /* LLVM_VERSION_MAJOR > 11 */
|
|
||||||
{
|
|
||||||
llvm_opt0_orc = LLVMOrcCreateInstance(opt0_tm);
|
|
||||||
llvm_opt3_orc = LLVMOrcCreateInstance(opt3_tm);
|
|
||||||
|
|
||||||
#if defined(HAVE_DECL_LLVMCREATEGDBREGISTRATIONLISTENER) && HAVE_DECL_LLVMCREATEGDBREGISTRATIONLISTENER
|
|
||||||
if (jit_debugging_support)
|
|
||||||
{
|
|
||||||
LLVMJITEventListenerRef l = LLVMCreateGDBRegistrationListener();
|
|
||||||
|
|
||||||
LLVMOrcRegisterJITEventListener(llvm_opt0_orc, l);
|
|
||||||
LLVMOrcRegisterJITEventListener(llvm_opt3_orc, l);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#if defined(HAVE_DECL_LLVMCREATEPERFJITEVENTLISTENER) && HAVE_DECL_LLVMCREATEPERFJITEVENTLISTENER
|
|
||||||
if (jit_profiling_support)
|
|
||||||
{
|
|
||||||
LLVMJITEventListenerRef l = LLVMCreatePerfJITEventListener();
|
|
||||||
|
|
||||||
LLVMOrcRegisterJITEventListener(llvm_opt0_orc, l);
|
|
||||||
LLVMOrcRegisterJITEventListener(llvm_opt3_orc, l);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif /* LLVM_VERSION_MAJOR > 11 */
|
|
||||||
|
|
||||||
on_proc_exit(llvm_shutdown, 0);
|
on_proc_exit(llvm_shutdown, 0);
|
||||||
|
|
||||||
@ -1014,7 +937,6 @@ llvm_shutdown(int code, Datum arg)
|
|||||||
elog(PANIC, "LLVMJitContext in use count not 0 at exit (is %zu)",
|
elog(PANIC, "LLVMJitContext in use count not 0 at exit (is %zu)",
|
||||||
llvm_jit_context_in_use_count);
|
llvm_jit_context_in_use_count);
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR > 11
|
|
||||||
{
|
{
|
||||||
if (llvm_opt3_orc)
|
if (llvm_opt3_orc)
|
||||||
{
|
{
|
||||||
@ -1032,23 +954,6 @@ llvm_shutdown(int code, Datum arg)
|
|||||||
llvm_ts_context = NULL;
|
llvm_ts_context = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* LLVM_VERSION_MAJOR > 11 */
|
|
||||||
{
|
|
||||||
/* unregister profiling support, needs to be flushed to be useful */
|
|
||||||
|
|
||||||
if (llvm_opt3_orc)
|
|
||||||
{
|
|
||||||
LLVMOrcDisposeInstance(llvm_opt3_orc);
|
|
||||||
llvm_opt3_orc = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (llvm_opt0_orc)
|
|
||||||
{
|
|
||||||
LLVMOrcDisposeInstance(llvm_opt0_orc);
|
|
||||||
llvm_opt0_orc = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* LLVM_VERSION_MAJOR > 11 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* helper for llvm_create_types, returning a function's return type */
|
/* helper for llvm_create_types, returning a function's return type */
|
||||||
@ -1218,8 +1123,6 @@ llvm_resolve_symbol(const char *symname, void *ctx)
|
|||||||
return (uint64_t) addr;
|
return (uint64_t) addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR > 11
|
|
||||||
|
|
||||||
static LLVMErrorRef
|
static LLVMErrorRef
|
||||||
llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx,
|
llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx,
|
||||||
LLVMOrcLookupStateRef *LookupState, LLVMOrcLookupKind Kind,
|
LLVMOrcLookupStateRef *LookupState, LLVMOrcLookupKind Kind,
|
||||||
@ -1238,9 +1141,7 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx,
|
|||||||
{
|
{
|
||||||
const char *name = LLVMOrcSymbolStringPoolEntryStr(LookupSet[i].Name);
|
const char *name = LLVMOrcSymbolStringPoolEntryStr(LookupSet[i].Name);
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR > 12
|
|
||||||
LLVMOrcRetainSymbolStringPoolEntry(LookupSet[i].Name);
|
LLVMOrcRetainSymbolStringPoolEntry(LookupSet[i].Name);
|
||||||
#endif
|
|
||||||
symbols[i].Name = LookupSet[i].Name;
|
symbols[i].Name = LookupSet[i].Name;
|
||||||
symbols[i].Sym.Address = llvm_resolve_symbol(name, NULL);
|
symbols[i].Sym.Address = llvm_resolve_symbol(name, NULL);
|
||||||
symbols[i].Sym.Flags.GenericFlags = LLVMJITSymbolGenericFlagsExported;
|
symbols[i].Sym.Flags.GenericFlags = LLVMJITSymbolGenericFlagsExported;
|
||||||
@ -1369,8 +1270,6 @@ llvm_error_message(LLVMErrorRef error)
|
|||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* LLVM_VERSION_MAJOR > 11 */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ResourceOwner callbacks
|
* ResourceOwner callbacks
|
||||||
*/
|
*/
|
||||||
|
@ -30,13 +30,7 @@ static std::new_handler old_new_handler = NULL;
|
|||||||
|
|
||||||
static void fatal_system_new_handler(void);
|
static void fatal_system_new_handler(void);
|
||||||
static void fatal_llvm_new_handler(void *user_data, const char *reason, bool gen_crash_diag);
|
static void fatal_llvm_new_handler(void *user_data, const char *reason, bool gen_crash_diag);
|
||||||
#if LLVM_VERSION_MAJOR < 14
|
|
||||||
static void fatal_llvm_new_handler(void *user_data, const std::string& reason, bool gen_crash_diag);
|
|
||||||
#endif
|
|
||||||
static void fatal_llvm_error_handler(void *user_data, const char *reason, bool gen_crash_diag);
|
static void fatal_llvm_error_handler(void *user_data, const char *reason, bool gen_crash_diag);
|
||||||
#if LLVM_VERSION_MAJOR < 14
|
|
||||||
static void fatal_llvm_error_handler(void *user_data, const std::string& reason, bool gen_crash_diag);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -135,15 +129,6 @@ fatal_llvm_new_handler(void *user_data,
|
|||||||
errmsg("out of memory"),
|
errmsg("out of memory"),
|
||||||
errdetail("While in LLVM: %s", reason)));
|
errdetail("While in LLVM: %s", reason)));
|
||||||
}
|
}
|
||||||
#if LLVM_VERSION_MAJOR < 14
|
|
||||||
static void
|
|
||||||
fatal_llvm_new_handler(void *user_data,
|
|
||||||
const std::string& reason,
|
|
||||||
bool gen_crash_diag)
|
|
||||||
{
|
|
||||||
fatal_llvm_new_handler(user_data, reason.c_str(), gen_crash_diag);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fatal_llvm_error_handler(void *user_data,
|
fatal_llvm_error_handler(void *user_data,
|
||||||
@ -154,13 +139,3 @@ fatal_llvm_error_handler(void *user_data,
|
|||||||
(errcode(ERRCODE_OUT_OF_MEMORY),
|
(errcode(ERRCODE_OUT_OF_MEMORY),
|
||||||
errmsg("fatal llvm error: %s", reason)));
|
errmsg("fatal llvm error: %s", reason)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR < 14
|
|
||||||
static void
|
|
||||||
fatal_llvm_error_handler(void *user_data,
|
|
||||||
const std::string& reason,
|
|
||||||
bool gen_crash_diag)
|
|
||||||
{
|
|
||||||
fatal_llvm_error_handler(user_data, reason.c_str(), gen_crash_diag);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@ -594,10 +594,6 @@ function_inlinable(llvm::Function &F,
|
|||||||
if (F.materialize())
|
if (F.materialize())
|
||||||
elog(FATAL, "failed to materialize metadata");
|
elog(FATAL, "failed to materialize metadata");
|
||||||
|
|
||||||
#if LLVM_VERSION_MAJOR < 14
|
|
||||||
#define hasFnAttr hasFnAttribute
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (F.getAttributes().hasFnAttr(llvm::Attribute::NoInline))
|
if (F.getAttributes().hasFnAttr(llvm::Attribute::NoInline))
|
||||||
{
|
{
|
||||||
ilog(DEBUG1, "ineligibile to import %s due to noinline",
|
ilog(DEBUG1, "ineligibile to import %s due to noinline",
|
||||||
@ -858,9 +854,6 @@ create_redirection_function(std::unique_ptr<llvm::Module> &importMod,
|
|||||||
llvm::Function *AF;
|
llvm::Function *AF;
|
||||||
llvm::BasicBlock *BB;
|
llvm::BasicBlock *BB;
|
||||||
llvm::CallInst *fwdcall;
|
llvm::CallInst *fwdcall;
|
||||||
#if LLVM_VERSION_MAJOR < 14
|
|
||||||
llvm::Attribute inlineAttribute;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
AF = llvm::Function::Create(F->getFunctionType(),
|
AF = llvm::Function::Create(F->getFunctionType(),
|
||||||
LinkageTypes::AvailableExternallyLinkage,
|
LinkageTypes::AvailableExternallyLinkage,
|
||||||
@ -869,13 +862,7 @@ create_redirection_function(std::unique_ptr<llvm::Module> &importMod,
|
|||||||
|
|
||||||
Builder.SetInsertPoint(BB);
|
Builder.SetInsertPoint(BB);
|
||||||
fwdcall = Builder.CreateCall(F, &*AF->arg_begin());
|
fwdcall = Builder.CreateCall(F, &*AF->arg_begin());
|
||||||
#if LLVM_VERSION_MAJOR < 14
|
|
||||||
inlineAttribute = llvm::Attribute::get(Context,
|
|
||||||
llvm::Attribute::AlwaysInline);
|
|
||||||
fwdcall->addAttribute(~0U, inlineAttribute);
|
|
||||||
#else
|
|
||||||
fwdcall->addFnAttr(llvm::Attribute::AlwaysInline);
|
fwdcall->addFnAttr(llvm::Attribute::AlwaysInline);
|
||||||
#endif
|
|
||||||
Builder.CreateRet(fwdcall);
|
Builder.CreateRet(fwdcall);
|
||||||
|
|
||||||
return AF;
|
return AF;
|
||||||
|
@ -17,10 +17,6 @@ extern "C"
|
|||||||
}
|
}
|
||||||
|
|
||||||
#include <llvm-c/Core.h>
|
#include <llvm-c/Core.h>
|
||||||
|
|
||||||
/* Avoid macro clash with LLVM's C++ headers */
|
|
||||||
#undef Min
|
|
||||||
|
|
||||||
#include <llvm/IR/Function.h>
|
#include <llvm/IR/Function.h>
|
||||||
|
|
||||||
#include "jit/llvmjit.h"
|
#include "jit/llvmjit.h"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user