Re: JIT compiling with LLVM v12.2 - Mailing list pgsql-hackers

From Andres Freund
Subject Re: JIT compiling with LLVM v12.2
Date
Msg-id 20180321200105.lqzplpd2x7k55lm7@alap3.anarazel.de
Whole thread Raw
In response to Re: JIT compiling with LLVM v12.2  (Catalin Iacob <iacobcatalin@gmail.com>)
List pgsql-hackers
Hi,

On 2018-03-21 08:26:28 +0100, Catalin Iacob wrote:
> On Wed, Mar 21, 2018 at 4:07 AM, Andres Freund <andres@anarazel.de> wrote:
> > Indeed. I've pushed a rebased version now, that basically just fixes the
> > issue Thomas observed.
> 
> Testing 2d6f2fba from your repository configured --with-llvm I noticed
> some weird things in the configure output.

Thanks!

> Without --enable-debug:
> configure: using compiler=gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
> configure: using CFLAGS=-Wall -Wmissing-prototypes -Wpointer-arith
> -Wdeclaration-after-statement -Wendif-labels
> -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing
> -fwrapv -fexcess-precision=standard -O2
> configure: using CPPFLAGS= -D_GNU_SOURCE
> configure: using LDFLAGS= -L/opt/rh/llvm-toolset-7/root/usr/lib64
> -Wl,--as-needed
> configure: using CXX=g++
> configure: using CXXFLAGS=-Wall -Wpointer-arith -Wendif-labels
> -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing
> -fwrapv -g -O2
> configure: using CLANG=/opt/rh/llvm-toolset-7/root/usr/bin/clang
> configure: using BITCODE_CFLAGS= -fno-strict-aliasing -fwrapv -O2
> configure: using BITCODE_CXXFLAGS= -fno-strict-aliasing -fwrapv -O2
> BITCODE_CXXFLAGS
> 
> With --enable-debug:
> configure: using compiler=gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
> configure: using CFLAGS=-Wall -Wmissing-prototypes -Wpointer-arith
> -Wdeclaration-after-statement -Wendif-labels
> -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing
> -fwrapv -fexcess-precision=standard -g -O2
> configure: using CPPFLAGS= -D_GNU_SOURCE
> configure: using LDFLAGS= -L/opt/rh/llvm-toolset-7/root/usr/lib64
> -Wl,--as-needed
> configure: using CXX=g++
> configure: using CXXFLAGS=-Wall -Wpointer-arith -Wendif-labels
> -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing
> -fwrapv -g -g -O2
> configure: using CLANG=/opt/rh/llvm-toolset-7/root/usr/bin/clang
> configure: using BITCODE_CFLAGS= -fno-strict-aliasing -fwrapv -O2
> configure: using BITCODE_CXXFLAGS= -fno-strict-aliasing -fwrapv -O2
> BITCODE_CXXFLAGS
> 
> So I unconditionally get one -g added to CXXFLAGS regardless of
> whether I specify --enable-debug or not. And --enable-debug results in
> -g -g in CXXFLAGS.

Aaah, nice catch.  I was missing an unset CXXFLAGS.


> BTW, you should probably specify -std=c++11 (or whatever you need) as
> various g++ and clang++ versions default to various things. Will the
> required C++ standard be based on the requirements of the C++ code in
> the PG tree or will you take it from LLVM's CXXFLAGS?

It's currently already taken from LLVM's CXXFLAGS if present there, but
just specified for LLVM wrapping files.  Relevant code is in
src/backend/jit/llvm/Makefile:

# All files in this directy link to LLVM.
CFLAGS += $(LLVM_CFLAGS)
CXXFLAGS += $(LLVM_CXXFLAGS)
override CPPFLAGS := $(LLVM_CPPFLAGS) $(CPPFLAGS)
SHLIB_LINK += $(LLVM_LIBS)

Since there's no other C++ code, and I don't forsee anything else, I'm
not planning to set the global CXXFLAGS differently atm. Would just make
it more complicated to use the right flag from llvm's CXXFLAGSS.


> Can --std=c++11 and --std=c++14 compiled .o files be linked together?

Yes, with some limitations. In the PG case all the intra-file calls are
C ABI, there wouldn't be a problem.


> Also, my CXXFLAGS did not get -fexcess-precision=standard neither did
> BITCODE_CFLAGS nor BITCODE_CXXFLAGS.

Yea, that's to be expected, gcc doesn't know that for C++ on most
versions. Some vendors have it patched into.


> 2. Unlike all the other *FLAGS, BITCODE_CXXFLAGS includes itself on
> the right hand side of the equal
> configure: using BITCODE_CXXFLAGS= -fno-strict-aliasing -fwrapv -O2
> BITCODE_CXXFLAGS

Hum, that's definitely a typo bug (missing $ when adding to
BITCODE_CXXFLAGS).


Greetings,

Andres Freund


pgsql-hackers by date:

Previous
From: Thomas Munro
Date:
Subject: Re: JIT compiling with LLVM v12.2
Next
From: Andres Freund
Date:
Subject: Re: JIT compiling with LLVM v12.2