diff options
author | Thomas Munro <tmunro@postgresql.org> | 2023-10-18 22:15:54 +1300 |
---|---|---|
committer | Thomas Munro <tmunro@postgresql.org> | 2023-10-19 05:13:23 +1300 |
commit | 76200e5ee469e4a9db5f9514b9d0c6a31b496bff (patch) | |
tree | e53fbab31a74ff9d9e0c5ee8e741d4c14961a009 | |
parent | f90b4a846b32d3d6d2fd9d55a93735501e4c34fd (diff) | |
download | postgresql-76200e5ee469e4a9db5f9514b9d0c6a31b496bff.tar.gz postgresql-76200e5ee469e4a9db5f9514b9d0c6a31b496bff.zip |
jit: Changes for LLVM 17.
Changes required by https://llvm.org/docs/NewPassManager.html.
Back-patch to 12, leaving the final release of 11 unchanged, consistent
with earlier decision not to back-patch LLVM 16 support either.
Author: Dmitry Dolgov <9erthalion6@gmail.com>
Reviewed-by: Andres Freund <andres@anarazel.de>
Reviewed-by: Thomas Munro <thomas.munro@gmail.com>
Discussion: https://postgr.es/m/CA%2BhUKG%2BWXznXCyTgCADd%3DHWkP9Qksa6chd7L%3DGCnZo-MBgg9Lg%40mail.gmail.com
-rw-r--r-- | src/backend/jit/llvm/llvmjit.c | 31 | ||||
-rw-r--r-- | src/backend/jit/llvm/llvmjit_wrap.cpp | 6 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c index 1c8e1ab3a76..58f638859a4 100644 --- a/src/backend/jit/llvm/llvmjit.c +++ b/src/backend/jit/llvm/llvmjit.c @@ -18,6 +18,9 @@ #include <llvm-c/BitWriter.h> #include <llvm-c/Core.h> #include <llvm-c/ExecutionEngine.h> +#if LLVM_VERSION_MAJOR > 16 +#include <llvm-c/Transforms/PassBuilder.h> +#endif #if LLVM_VERSION_MAJOR > 11 #include <llvm-c/Orc.h> #include <llvm-c/OrcEE.h> @@ -27,12 +30,14 @@ #endif #include <llvm-c/Support.h> #include <llvm-c/Target.h> +#if LLVM_VERSION_MAJOR < 17 #include <llvm-c/Transforms/IPO.h> #include <llvm-c/Transforms/PassManagerBuilder.h> #include <llvm-c/Transforms/Scalar.h> #if LLVM_VERSION_MAJOR > 6 #include <llvm-c/Transforms/Utils.h> #endif +#endif #include "jit/llvmjit.h" #include "jit/llvmjit_emit.h" @@ -630,6 +635,7 @@ llvm_function_reference(LLVMJitContext *context, static void llvm_optimize_module(LLVMJitContext *context, LLVMModuleRef module) { +#if LLVM_VERSION_MAJOR < 17 LLVMPassManagerBuilderRef llvm_pmb; LLVMPassManagerRef llvm_mpm; LLVMPassManagerRef llvm_fpm; @@ -693,6 +699,31 @@ llvm_optimize_module(LLVMJitContext *context, LLVMModuleRef module) LLVMDisposePassManager(llvm_mpm); LLVMPassManagerBuilderDispose(llvm_pmb); +#else + LLVMPassBuilderOptionsRef options; + LLVMErrorRef err; + const char *passes; + + if (context->base.flags & PGJIT_OPT3) + passes = "default<O3>"; + else + passes = "default<O0>,mem2reg"; + + options = LLVMCreatePassBuilderOptions(); + +#ifdef LLVM_PASS_DEBUG + LLVMPassBuilderOptionsSetDebugLogging(options, 1); +#endif + + LLVMPassBuilderOptionsSetInlinerThreshold(options, 512); + + err = LLVMRunPasses(module, passes, NULL, options); + + if (err) + elog(ERROR, "failed to JIT module: %s", llvm_error_message(err)); + + LLVMDisposePassBuilderOptions(options); +#endif } /* diff --git a/src/backend/jit/llvm/llvmjit_wrap.cpp b/src/backend/jit/llvm/llvmjit_wrap.cpp index cb896e2b6a5..90a41b91912 100644 --- a/src/backend/jit/llvm/llvmjit_wrap.cpp +++ b/src/backend/jit/llvm/llvmjit_wrap.cpp @@ -23,8 +23,14 @@ extern "C" #include <llvm/IR/Attributes.h> #include <llvm/IR/Function.h> +#if LLVM_VERSION_MAJOR < 17 #include <llvm/MC/SubtargetFeature.h> +#endif +#if LLVM_VERSION_MAJOR > 16 +#include <llvm/TargetParser/Host.h> +#else #include <llvm/Support/Host.h> +#endif #include "jit/llvmjit.h" |