I've pushed a revised and rebased version of my JIT patchset.
The git tree is at
in the jit branch
There's nothing hugely exciting, mostly lots of cleanups.
- added some basic EXPLAIN output, displaying JIT options and time spent
jitting (see todo below)
Generation Time: 4.604
Inlining Time: 0.000
Optimization Time: 0.585
Emission Time: 12.858
- Fixed bugs around alignment computations in tuple deforming. Wasn't
able to trigger any bad consequences, but it was clearly wrong.
- Worked a lot on making code more pgindent safe. There's still some
minor layout damage, but it's mostly ok now. For that I had to add a
bunch of helpers that make the code shorter
- Freshly emitted functions now have proper attributes indicating
architecture, floating point behaviour etc. That's what previously
prevented the inliner of doing its job without forcing its hand. That
yields a bit of a speedup.
- reduced size of code a bit by deduplicating code, in particular
don't "manually" create signatures for function declarations
anymore. Besides deduplicating, this also ensures code generation time
errors when function signatures change.
- fixed a number of FIXMEs etc
- added a lot of comments
- portability fixes (OSX, freebsd)
- some build issues with old clang versions pointed out by Thomas Munro
- when to take jit_expressions into account (both exec and plan or just
- EXPLAIN for queries that are JITed should display units. Starting
thread about effort to not duplicate code for that
- more explanations of type & function signature syncing
- GUC docs (including postgresql.conf.sample)
Thanks everyone, particularly Peter in this update, for helping me