aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2023-10-18 22:15:54 +1300
committerThomas Munro <tmunro@postgresql.org>2023-10-19 05:17:27 +1300
commit7da915e33abf54ce126d68baead4c1871b302c1c (patch)
tree2a223ba9243e2b599453ce9a793064118a117cfc /src
parentd701f0d1f3e7ed9e8b8ff0d368add9cdae3b8108 (diff)
downloadpostgresql-7da915e33abf54ce126d68baead4c1871b302c1c.tar.gz
postgresql-7da915e33abf54ce126d68baead4c1871b302c1c.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
Diffstat (limited to 'src')
-rw-r--r--src/backend/jit/llvm/llvmjit.c31
-rw-r--r--src/backend/jit/llvm/llvmjit_wrap.cpp6
2 files changed, 37 insertions, 0 deletions
diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c
index 3867ec589d2..a87cd3d054b 100644
--- a/src/backend/jit/llvm/llvmjit.c
+++ b/src/backend/jit/llvm/llvmjit.c
@@ -29,6 +29,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>
@@ -38,12 +41,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
/* Handle of a module emitted via ORC JIT */
@@ -564,6 +569,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;
@@ -627,6 +633,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 89b276e692c..1c374d937a4 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"