Skip to content
  • Andres Freund's avatar
    Support for optimizing and emitting code in LLVM JIT provider. · b96d550e
    Andres Freund authored
    This commit introduces the ability to actually generate code using
    LLVM. In particular, this adds:
    
    - Ability to emit code both in heavily optimized and largely
      unoptimized fashion
    - Batching facility to allow functions to be defined in small
      increments, but optimized and emitted in executable form in larger
      batches (for performance and memory efficiency)
    - Type and function declaration synchronization between runtime
      generated code and normal postgres code. This is critical to be able
      to access struct fields etc.
    - Developer oriented jit_dump_bitcode GUC, for inspecting / debugging
      the generated code.
    - per JitContext statistics of number of functions, time spent
      generating code, optimizing, and emitting it.  This will later be
      employed for EXPLAIN support.
    
    This commit doesn't yet contain any code actually generating
    functions. That'll follow in later commits.
    
    Documentation for GUCs added, and for JIT in general, will be added in
    later commits.
    
    Author: Andres Freund, with contributions by Pierre Ducroquet
    Testing-By: Thomas Munro, Peter Eisentraut
    Discussion: https://postgr.es/m/20170901064131.tazjxwus3k2w3ybh@alap3.anarazel.de
    b96d550e