init
This commit is contained in:
105
db_include/jit/jit.h
Executable file
105
db_include/jit/jit.h
Executable file
@@ -0,0 +1,105 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
* 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 */
|
||||
Reference in New Issue
Block a user