PostgreSQL Source Code  git master
jit.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  * jit.h
3  * Provider independent JIT infrastructure.
4  *
5  * Copyright (c) 2016-2024, PostgreSQL Global Development Group
6  *
7  * src/include/jit/jit.h
8  *
9  *-------------------------------------------------------------------------
10  */
11 #ifndef JIT_H
12 #define JIT_H
13 
14 #include "executor/instrument.h"
15 #include "utils/resowner.h"
16 
17 
18 /* Flags determining what kind of JIT operations to perform */
19 #define PGJIT_NONE 0
20 #define PGJIT_PERFORM (1 << 0)
21 #define PGJIT_OPT3 (1 << 1)
22 #define PGJIT_INLINE (1 << 2)
23 #define PGJIT_EXPR (1 << 3)
24 #define PGJIT_DEFORM (1 << 4)
25 
26 
27 typedef struct JitInstrumentation
28 {
29  /* number of emitted functions */
31 
32  /* accumulated time to generate code */
34 
35  /* accumulated time to deform tuples, included into generation_counter */
37 
38  /* accumulated time for inlining */
40 
41  /* accumulated time for optimization */
43 
44  /* accumulated time for code emission */
47 
48 /*
49  * DSM structure for accumulating jit instrumentation of all workers.
50  */
52 {
56 
57 typedef struct JitContext
58 {
59  /* see PGJIT_* above */
60  int flags;
61 
63 
66 
68 
70 typedef void (*JitProviderInit) (JitProviderCallbacks *cb);
71 typedef void (*JitProviderResetAfterErrorCB) (void);
72 typedef void (*JitProviderReleaseContextCB) (JitContext *context);
73 struct ExprState;
75 
77 {
81 };
82 
83 
84 /* GUCs */
85 extern PGDLLIMPORT bool jit_enabled;
86 extern PGDLLIMPORT char *jit_provider;
88 extern PGDLLIMPORT bool jit_dump_bitcode;
89 extern PGDLLIMPORT bool jit_expressions;
92 extern PGDLLIMPORT double jit_above_cost;
95 
96 
97 extern void jit_reset_after_error(void);
98 extern void jit_release_context(JitContext *context);
99 
100 /*
101  * Functions for attempting to JIT code. Callers must accept that these might
102  * not be able to perform JIT (i.e. return false).
103  */
104 extern bool jit_compile_expr(struct ExprState *state);
105 extern void InstrJitAgg(JitInstrumentation *dst, JitInstrumentation *add);
106 
107 
108 #endif /* JIT_H */
#define PGDLLIMPORT
Definition: c.h:1305
#define PGDLLEXPORT
Definition: c.h:1320
#define FLEXIBLE_ARRAY_MEMBER
Definition: c.h:387
unsigned char bool
Definition: c.h:445
struct SharedJitInstrumentation SharedJitInstrumentation
void jit_reset_after_error(void)
Definition: jit.c:126
PGDLLIMPORT double jit_inline_above_cost
Definition: jit.c:39
PGDLLEXPORT void _PG_jit_provider_init(JitProviderCallbacks *cb)
Definition: llvmjit.c:163
PGDLLIMPORT char * jit_provider
Definition: jit.c:32
PGDLLIMPORT double jit_optimize_above_cost
Definition: jit.c:40
bool(* JitProviderCompileExprCB)(struct ExprState *state)
Definition: jit.h:74
void InstrJitAgg(JitInstrumentation *dst, JitInstrumentation *add)
Definition: jit.c:181
struct JitInstrumentation JitInstrumentation
bool jit_compile_expr(struct ExprState *state)
Definition: jit.c:150
PGDLLIMPORT bool jit_tuple_deforming
Definition: jit.c:37
void(* JitProviderInit)(JitProviderCallbacks *cb)
Definition: jit.h:70
PGDLLIMPORT bool jit_dump_bitcode
Definition: jit.c:34
struct JitContext JitContext
void jit_release_context(JitContext *context)
Definition: jit.c:136
void(* JitProviderReleaseContextCB)(JitContext *context)
Definition: jit.h:72
void(* JitProviderResetAfterErrorCB)(void)
Definition: jit.h:71
PGDLLIMPORT bool jit_debugging_support
Definition: jit.c:33
PGDLLIMPORT bool jit_enabled
Definition: jit.c:31
PGDLLIMPORT bool jit_expressions
Definition: jit.c:35
PGDLLIMPORT double jit_above_cost
Definition: jit.c:38
PGDLLIMPORT bool jit_profiling_support
Definition: jit.c:36
Definition: jit.h:58
int flags
Definition: jit.h:60
ResourceOwner resowner
Definition: jit.h:62
JitInstrumentation instr
Definition: jit.h:64
instr_time generation_counter
Definition: jit.h:33
size_t created_functions
Definition: jit.h:30
instr_time optimization_counter
Definition: jit.h:42
instr_time deform_counter
Definition: jit.h:36
instr_time emission_counter
Definition: jit.h:45
instr_time inlining_counter
Definition: jit.h:39
JitProviderCompileExprCB compile_expr
Definition: jit.h:80
JitProviderResetAfterErrorCB reset_after_error
Definition: jit.h:78
JitProviderReleaseContextCB release_context
Definition: jit.h:79
JitInstrumentation jit_instr[FLEXIBLE_ARRAY_MEMBER]
Definition: jit.h:54
Definition: regguts.h:323