/*------------------------------------------------------------------------- * jit.h * Provider independent JIT infrastructure. * * Copyright (c) 2016-2021, PostgreSQL Global Development Group * * src/include/jit/jit.h * *------------------------------------------------------------------------- */ #ifndef JIT_H #define JIT_H #include "executor/instrument.h" #include "utils/resowner.h" /* Flags determining what kind of JIT operations to perform */ #define PGJIT_NONE 0 #define PGJIT_PERFORM (1 << 0) #define PGJIT_OPT3 (1 << 1) #define PGJIT_INLINE (1 << 2) #define PGJIT_EXPR (1 << 3) #define PGJIT_DEFORM (1 << 4) typedef struct JitInstrumentation { /* number of emitted functions */ size_t created_functions; /* accumulated time to generate code */ instr_time generation_counter; /* accumulated time for inlining */ instr_time inlining_counter; /* accumulated time for optimization */ instr_time optimization_counter; /* accumulated time for code emission */ instr_time emission_counter; } JitInstrumentation; /* * DSM structure for accumulating jit instrumentation of all workers. */ typedef struct SharedJitInstrumentation { int num_workers; JitInstrumentation jit_instr[FLEXIBLE_ARRAY_MEMBER]; } SharedJitInstrumentation; typedef struct JitContext { /* see PGJIT_* above */ int flags; ResourceOwner resowner; JitInstrumentation instr; } JitContext; typedef struct JitProviderCallbacks JitProviderCallbacks; extern void _PG_jit_provider_init(JitProviderCallbacks *cb); typedef void (*JitProviderInit) (JitProviderCallbacks *cb); typedef void (*JitProviderResetAfterErrorCB) (void); typedef void (*JitProviderReleaseContextCB) (JitContext *context); struct ExprState; typedef bool (*JitProviderCompileExprCB) (struct ExprState *state); struct JitProviderCallbacks { JitProviderResetAfterErrorCB reset_after_error; JitProviderReleaseContextCB release_context; JitProviderCompileExprCB compile_expr; }; /* GUCs */ extern bool jit_enabled; extern char *jit_provider; extern bool jit_debugging_support; extern bool jit_dump_bitcode; extern bool jit_expressions; extern bool jit_profiling_support; extern bool jit_tuple_deforming; extern double jit_above_cost; extern double jit_inline_above_cost; extern double jit_optimize_above_cost; extern void jit_reset_after_error(void); extern void jit_release_context(JitContext *context); /* * Functions for attempting to JIT code. Callers must accept that these might * not be able to perform JIT (i.e. return false). */ extern bool jit_compile_expr(struct ExprState *state); extern void InstrJitAgg(JitInstrumentation *dst, JitInstrumentation *add); #endif /* JIT_H */