Re: JIT compiling with LLVM v12.2
Catalin Iacob <iacobcatalin@gmail.com>
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. 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. Didn't get to look at the code yet, maybe that comes from: $ llvm-config --cxxflags -I/opt/rh/llvm-toolset-7/root/usr/include -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-maybe-uninitialized -Wdelete-non-virtual-dtor -Wno-comment -std=c++11 -ffunction-sections -fdata-sections -O2 -g -DNDEBUG -fno-exceptions -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS But on the other hand there are lots of other flags in there that don't end up in 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? Can --std=c++11 and --std=c++14 compiled .o files be linked together? Or in other words, in case in the future LLVM starts requiring C++14 but the code in the PG tree you wrote still builds with C++11, will PG upgrade it's requirement with LLVM or will it stay with the older standard? Also, my CXXFLAGS did not get -fexcess-precision=standard neither did BITCODE_CFLAGS nor BITCODE_CXXFLAGS. In case it's interesting: $ llvm-config --cflags -I/opt/rh/llvm-toolset-7/root/usr/include -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC -Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-missing-field-initializers -pedantic -Wno-long-long -Wno-comment -ffunction-sections -fdata-sections -O2 -g -DNDEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS 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
Commits
-
Improve JIT docs.
- fb604780114c 11.0 landed
-
Add documentation for the JIT feature.
- e6c039d13e16 11.0 landed
-
Add EXPLAIN support for JIT.
- 1f0c6a9e7dca 11.0 landed
-
Add inlining support to LLVM JIT provider.
- 9370462e9a79 11.0 landed
-
JIT tuple deforming in LLVM JIT provider.
- 32af96b2b118 11.0 landed
-
Add FIELDNO_* macro designating offset into structs required for JIT.
- 7ced1d124728 11.0 landed
-
Add expression compilation support to LLVM JIT provider.
- 2a0faed9d702 11.0 landed
-
Expand list of synchronized types and functions in LLVM JIT provider.
- fb46ac26fe49 11.0 landed
-
Add helpers for emitting LLVM IR.
- 7ec0d80c0508 11.0 landed
-
Basic planner and executor integration for JIT.
- cc415a56d09a 11.0 landed
-
Debugging and profiling support for LLVM JIT provider.
- 250bca7fc145 11.0 landed
-
Support for optimizing and emitting code in LLVM JIT provider.
- b96d550eb03c 11.0 landed
-
Add file containing extensions of the LLVM C API.
- 31bc604e0b74 11.0 landed
-
Basic JIT provider and error handling infrastructure.
- 432bb9e04da4 11.0 landed
-
Add configure infrastructure (--with-llvm) to enable LLVM support.
- 5b2526c83832 11.0 landed
-
Add C++ support to configure.
- 6869b4f25847 11.0 landed
-
Add PGAC_PROG_VARCC_VARFLAGS_OPT autoconf macro.
- 3de04e4ed12d 11.0 landed
-
Fix VM buffer pin management in heap_lock_updated_tuple_rec().
- 0b1d1a038bab 11.0 cited
-
Allow tupleslots to have a fixed tupledesc, use in executor nodes.
- ad7dbee368a7 11.0 landed
-
Expression evaluation based aggregate transition invocation.
- 69c3936a1499 11.0 landed
-
Perform slot validity checks in a separate pass over expression.
- b40933101ca6 11.0 landed
-
Rely on executor utils to build targetlist for DML RETURNING.
- 4717fdb14cf0 11.0 landed
-
Refer to OS X as "macOS", except for the port name which is still "darwin".
- da6c4f6ca88d 10.0 cited