On Wednesday, January 24, 2018 8:20:38 AM CET Andres Freund wrote: > As the patchset is large (500kb) and I'm still quickly evolving it, I do > not yet want to attach it. The git tree is at > https://git.postgresql.org/git/users/andresfreund/postgres.git > in the jit branch > > https://git.postgresql.org/gitweb/?p=users/andresfreund/postgres.git;a=shor > tlog;h=refs/heads/jit > > to build --with-llvm has to be passed to configure, llvm-config either > needs to be in PATH or provided with LLVM_CONFIG to make. A c++ compiler > and clang need to be available under common names or provided via CXX / > CLANG respectively. > > Regards, > > Andres Freund
Hi I tried to build on Debian sid, using GCC 7 and LLVM 5. I used the following to compile, using your branch @3195c2821d : $ export LLVM_CONFIG=/usr/bin/llvm-config-5.0 $ ./configure --with-llvm $ make And I had the following build error : llvmjit_wrap.cpp:32:10: fatal error: llvm-c/DebugInfo.h: No such file or directory #include "llvm-c/DebugInfo.h" ^~~~~~~~~~~~~~~~~~~~ compilation terminated. In LLVM 5.0, it looks like DebugInfo.h is not available in llvm-c, only as a C ++ API in llvm/IR/DebugInfo.h. For 'sport' (I have not played with LLVM API since more than one year), I tried to fix it, changing it to the C++ include. The DebugInfo related one was easy, only one function was used. But I still could not build because the LLVM API changed between 5.0 and 6.0 regarding value info SummaryList. llvmjit_wrap.cpp: In function ‘std::unique_ptr<llvm::StringMap<llvm::StringSet<> > > llvm_build_inline_plan(llvm::Module*)’: llvmjit_wrap.cpp:285:48: error: ‘class llvm::GlobalValueSummary’ has no member named ‘getBaseObject’ fs = llvm::cast<llvm::FunctionSummary>(gvs->getBaseObject()); ^~~~~~~~~~~~~ That one was a bit uglier. I'm not sure how to test everything properly, so the patch is attached for both these issues, do as you wish with it… :) Regards Pierre Ducroquet
>From fdfea09dd7410d6ed7ad54df1ba3092bd0eecb92 Mon Sep 17 00:00:00 2001 From: Pierre Ducroquet <pina...@pinaraf.info> Date: Wed, 24 Jan 2018 22:28:34 +0100 Subject: [PATCH] Allow building with LLVM 5.0 --- src/backend/lib/llvmjit_wrap.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/backend/lib/llvmjit_wrap.cpp b/src/backend/lib/llvmjit_wrap.cpp index b745aec4fe..7961148a85 100644 --- a/src/backend/lib/llvmjit_wrap.cpp +++ b/src/backend/lib/llvmjit_wrap.cpp @@ -29,7 +29,6 @@ extern "C" #include "llvm-c/Core.h" #include "llvm-c/BitReader.h" -#include "llvm-c/DebugInfo.h" #include <fcntl.h> #include <sys/mman.h> @@ -50,6 +49,7 @@ extern "C" #include "llvm/Analysis/ModuleSummaryAnalysis.h" #include "llvm/Bitcode/BitcodeReader.h" #include "llvm/IR/CallSite.h" +#include "llvm/IR/DebugInfo.h" #include "llvm/IR/IntrinsicInst.h" #include "llvm/IR/ModuleSummaryIndex.h" #include "llvm/Linker/IRMover.h" @@ -218,6 +218,13 @@ llvm_inline(LLVMModuleRef M) llvm_execute_inline_plan(mod, globalsToInline.get()); } + +inline llvm::GlobalValueSummary *GlobalValueSummary__getBaseObject(llvm::GlobalValueSummary *gvs) { + if (auto *AS = llvm::dyn_cast<llvm::AliasSummary>(gvs)) + return &AS->getAliasee(); + return gvs; +} + /* * Build information necessary for inlining external function references in * mod. @@ -282,7 +289,7 @@ llvm_build_inline_plan(llvm::Module *mod) const llvm::Module *defMod; llvm::Function *funcDef; - fs = llvm::cast<llvm::FunctionSummary>(gvs->getBaseObject()); + fs = llvm::cast<llvm::FunctionSummary>(GlobalValueSummary__getBaseObject(gvs.get())); elog(DEBUG2, "func %s might be in %s", funcName.data(), modPath.data()); @@ -476,7 +483,7 @@ load_module(llvm::StringRef Identifier) * code. Until that changes, not much point in wasting memory and cycles * on processing debuginfo. */ - LLVMStripModuleDebugInfo(mod); + llvm::StripDebugInfo(*llvm::unwrap(mod)); return std::unique_ptr<llvm::Module>(llvm::unwrap(mod)); } -- 2.15.1