123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /*-------------------------------------------------------------------------
- * jit.h
- * Provider independent JIT infrastructure.
- *
- * Copyright (c) 2016-2022, 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 PGDLLIMPORT bool jit_enabled;
- extern PGDLLIMPORT char *jit_provider;
- extern PGDLLIMPORT bool jit_debugging_support;
- extern PGDLLIMPORT bool jit_dump_bitcode;
- extern PGDLLIMPORT bool jit_expressions;
- extern PGDLLIMPORT bool jit_profiling_support;
- extern PGDLLIMPORT bool jit_tuple_deforming;
- extern PGDLLIMPORT double jit_above_cost;
- extern PGDLLIMPORT double jit_inline_above_cost;
- extern PGDLLIMPORT 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 */
|