diff options
author | Thomas Munro <tmunro@postgresql.org> | 2022-10-19 22:18:26 +1300 |
---|---|---|
committer | Thomas Munro <tmunro@postgresql.org> | 2022-10-19 22:18:26 +1300 |
commit | c2ae01f695b1605bc5e3908ff52b24fce6636caa (patch) | |
tree | 342e8508e5cd67d6fc06cce053eac761f27f9aad /src/backend/jit | |
parent | df3737a651f40a398c14348b0482e97031e7a7d4 (diff) | |
download | postgresql-c2ae01f695b1605bc5e3908ff52b24fce6636caa.tar.gz |
Track LLVM 15 changes.
Per https://llvm.org/docs/OpaquePointers.html, support for non-opaque
pointers still exists and we can request that on our context. We have
until LLVM 16 to move to opaque pointers, a much larger change.
Back-patch to 11, where LLVM support arrived.
Author: Thomas Munro <thomas.munro@gmail.com>
Author: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/CAMHz58Sf_xncdyqsekoVsNeKcruKootLtVH6cYXVhhUR1oKPCg%40mail.gmail.com
Diffstat (limited to 'src/backend/jit')
-rw-r--r-- | src/backend/jit/llvm/llvmjit.c | 18 | ||||
-rw-r--r-- | src/backend/jit/llvm/meson.build | 3 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c index fd3eecf27d..9aca7fc7a4 100644 --- a/src/backend/jit/llvm/llvmjit.c +++ b/src/backend/jit/llvm/llvmjit.c @@ -799,6 +799,16 @@ llvm_session_initialize(void) LLVMInitializeNativeAsmParser(); /* + * When targeting an LLVM version with opaque pointers enabled by + * default, turn them off for the context we build our code in. We don't + * need to do so for other contexts (e.g. llvm_ts_context). Once the IR is + * generated, it carries the necessary information. + */ +#if LLVM_VERSION_MAJOR > 14 + LLVMContextSetOpaquePointers(LLVMGetGlobalContext(), false); +#endif + + /* * Synchronize types early, as that also includes inferring the target * triple. */ @@ -1112,7 +1122,11 @@ llvm_resolve_symbols(LLVMOrcDefinitionGeneratorRef GeneratorObj, void *Ctx, LLVMOrcJITDylibRef JD, LLVMOrcJITDylibLookupFlags JDLookupFlags, LLVMOrcCLookupSet LookupSet, size_t LookupSetSize) { +#if LLVM_VERSION_MAJOR > 14 + LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMOrcCSymbolMapPair) * LookupSetSize); +#else LLVMOrcCSymbolMapPairs symbols = palloc0(sizeof(LLVMJITCSymbolMapPair) * LookupSetSize); +#endif LLVMErrorRef error; LLVMOrcMaterializationUnitRef mu; @@ -1230,7 +1244,11 @@ llvm_create_jit_instance(LLVMTargetMachineRef tm) * Symbol resolution support for "special" functions, e.g. a call into an * SQL callable function. */ +#if LLVM_VERSION_MAJOR > 14 + ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL, NULL); +#else ref_gen = LLVMOrcCreateCustomCAPIDefinitionGenerator(llvm_resolve_symbols, NULL); +#endif LLVMOrcJITDylibAddGenerator(LLVMOrcLLJITGetMainJITDylib(lljit), ref_gen); return lljit; diff --git a/src/backend/jit/llvm/meson.build b/src/backend/jit/llvm/meson.build index 25c5618e8a..c3b5a5992b 100644 --- a/src/backend/jit/llvm/meson.build +++ b/src/backend/jit/llvm/meson.build @@ -58,6 +58,9 @@ endif # XXX: Need to determine proper version of the function cflags for clang bitcode_cflags = ['-fno-strict-aliasing', '-fwrapv'] +if llvm.version().version_compare('>=15.0') + bitcode_cflags += ['-Xclang', '-no-opaque-pointers'] +endif bitcode_cflags += cppflags # XXX: Worth improving on the logic to find directories here |