18#include <llvm-c/Core.h>
19#include <llvm-c/Target.h>
65#if LLVM_VERSION_MAJOR < 22
70#define build_EvalXFunc(b, mod, funcname, v_state, op, ...) \
71 build_EvalXFuncInt(b, mod, funcname, v_state, op, \
72 lengthof(((LLVMValueRef[]){__VA_ARGS__})), \
73 ((LLVMValueRef[]){__VA_ARGS__}))
294 "v.econtext.aggvalues");
299 "v.econtext.aggnulls");
303 for (
int opno = 0; opno <
state->steps_len; opno++)
309 for (
int opno = 0; opno <
state->steps_len; opno++)
318 op = &
state->steps[opno];
358 "op.%d.fetch", opno);
404 if (tts_ops && desc && (context->base.flags &
PGJIT_DEFORM))
620 "op.%d.assign_tmp.notnull", opno);
687 "b.%d.no-null-args", opno);
691 elog(
ERROR,
"argumentless strict functions are pointless");
786 "b.%d.boolisnull", opno);
788 "b.%d.boolcheckfalse", opno);
790 "b.%d.boolisfalse", opno);
792 "b.%d.boolisanynull", opno);
794 "b.%d.boolcont", opno);
878 "b.%d.boolisnull", opno);
880 "b.%d.boolchecktrue", opno);
882 "b.%d.boolistrue", opno);
884 "b.%d.boolisanynull", opno);
886 "b.%d.boolcont", opno);
980 "op.%d.qualfail", opno);
1134 "op.%d.isnull", opno);
1136 "op.%d.isnotnull", opno);
1330 "op.%d.readonly.notnull", opno);
1391 "op.%d.skipoutputnull", opno);
1393 "op.%d.calloutput", opno);
1395 "op.%d.input", opno);
1397 "op.%d.inputcall", opno);
1409 "v_fcinfo_in_isnull");
1437 1,
"funccall_coerce_out");
1494 "funccall_iocoerce_in");
1625 "b.%d.null-args", opno);
1627 "b.%d.no-null-args", opno);
1629 "b.%d.argsequal", opno);
1736 "op.%d.row.isnull", opno);
1796 "op.%d.row-null", opno);
1798 "op.%d.row-compare", opno);
1801 "op.%d.row-compare-result",
2089 if (fcinfo->
nargs != 1)
2090 elog(
ERROR,
"incorrect number of function arguments");
2096 "b.%d.isnull.0", opno);
2294 "op.%d.jsonexpr_empty", opno);
2297 "op.%d.jsonexpr_error", opno);
2300 "op.%d.jsonexpr_coercion", opno);
2303 "op.%d.jsonexpr_done", opno);
2455 "op.%d.deserialize", opno);
2515 "op.%d.check-null.%d",
2530 if (
argno + 1 == nargs)
2581 "aggstate.all_pergroups");
2653 "aggstate.all_pergroups");
2679 "op.%d.inittrans", opno);
2681 "op.%d.no_inittrans", opno);
2724 "op.%d.strictpass", opno);
2752 "aggstate.current_set");
2758 "aggstate.curaggcontext");
2764 "aggstate.curpertrans");
2827 "op.%d.transcall", opno);
2829 "op.%d.transnocall", opno);
2967 state->evalfunc_private = cstate;
3002 state->evalfunc = func;
3004 return func(
state, econtext, isNull);
3032#if LLVM_VERSION_MAJOR < 22
3071 elog(
ERROR,
"parameter mismatch: %s expects %d passed %d",
3079 for (
int i = 0;
i < nargs;
i++)
3089#if LLVM_VERSION_MAJOR < 22
3099 const char *
nm =
"llvm.lifetime.end.p0";
#define Assert(condition)
void CheckExprStillValid(ExprState *state, ExprContext *econtext)
ExprEvalOp ExecEvalStepOp(ExprState *state, ExprEvalStep *op)
@ EEOP_FUNCEXPR_STRICT_FUSAGE
@ EEOP_HASHDATUM_NEXT32_STRICT
@ EEOP_JSONEXPR_COERCION_FINISH
@ EEOP_HASHDATUM_FIRST_STRICT
@ EEOP_AGG_PLAIN_PERGROUP_NULLCHECK
@ EEOP_AGG_STRICT_DESERIALIZE
@ EEOP_BOOLTEST_IS_NOT_FALSE
@ EEOP_AGG_PLAIN_TRANS_BYREF
@ EEOP_AGG_PRESORTED_DISTINCT_MULTI
@ EEOP_AGG_PLAIN_TRANS_BYVAL
@ EEOP_NULLTEST_ROWISNOTNULL
@ EEOP_ASSIGN_TMP_MAKE_RO
@ EEOP_BOOL_OR_STEP_FIRST
@ EEOP_AGG_STRICT_INPUT_CHECK_NULLS
@ EEOP_AGG_STRICT_INPUT_CHECK_ARGS_1
@ EEOP_AGG_STRICT_INPUT_CHECK_ARGS
@ EEOP_NULLTEST_ROWISNULL
@ EEOP_NULLTEST_ISNOTNULL
@ EEOP_MERGE_SUPPORT_FUNC
@ EEOP_AGG_PRESORTED_DISTINCT_SINGLE
@ EEOP_BOOL_AND_STEP_FIRST
@ EEOP_DOMAIN_TESTVAL_EXT
@ EEOP_BOOL_AND_STEP_LAST
@ EEOP_AGG_ORDERED_TRANS_DATUM
@ EEOP_HASHDATUM_SET_INITVAL
@ EEOP_AGG_PLAIN_TRANS_STRICT_BYREF
@ EEOP_BOOLTEST_IS_NOT_TRUE
@ EEOP_AGG_PLAIN_TRANS_INIT_STRICT_BYVAL
@ EEOP_AGG_PLAIN_TRANS_STRICT_BYVAL
@ EEOP_AGG_PLAIN_TRANS_INIT_STRICT_BYREF
@ EEOP_HASHED_SCALARARRAYOP
@ EEOP_AGG_ORDERED_TRANS_TUPLE
const TupleTableSlotOps TTSOpsVirtual
Datum(* ExprStateEvalFunc)(ExprState *expression, ExprContext *econtext, bool *isNull)
#define FIELDNO_EXPRSTATE_RESULTSLOT
#define FIELDNO_EXPRCONTEXT_CASENULL
#define FIELDNO_EXPRCONTEXT_INNERTUPLE
#define FIELDNO_EXPRSTATE_FLAGS
#define FIELDNO_EXPRCONTEXT_DOMAINNULL
#define FIELDNO_EXPRCONTEXT_DOMAINDATUM
#define FIELDNO_EXPRCONTEXT_CASEDATUM
#define FIELDNO_EXPRCONTEXT_OLDTUPLE
#define FIELDNO_AGGSTATE_CURPERTRANS
#define FIELDNO_EXPRSTATE_RESNULL
#define FIELDNO_EXPRCONTEXT_NEWTUPLE
#define FIELDNO_EXPRCONTEXT_AGGNULLS
#define FIELDNO_EXPRSTATE_RESVALUE
#define FIELDNO_AGGSTATE_CURRENT_SET
#define FIELDNO_EXPRCONTEXT_AGGVALUES
#define FIELDNO_EXPRCONTEXT_OUTERTUPLE
#define FIELDNO_AGGSTATE_ALL_PERGROUPS
#define FIELDNO_EXPRSTATE_PARENT
#define FIELDNO_EXPRCONTEXT_SCANTUPLE
#define FIELDNO_AGGSTATE_CURAGGCONTEXT
#define palloc_array(type, count)
#define palloc0_object(type)
#define FIELDNO_FUNCTIONCALLINFODATA_ISNULL
#define INSTR_TIME_SET_CURRENT(t)
#define INSTR_TIME_ACCUM_DIFF(x, y, z)
LLVMTypeRef StructFunctionCallInfoData
LLVMJitContext * llvm_create_context(int jitFlags)
LLVMTypeRef StructExprState
LLVMTypeRef StructExprEvalStep
LLVMValueRef llvm_pg_func(LLVMModuleRef mod, const char *funcname)
LLVMTypeRef TypeParamBool
LLVMTypeRef StructMemoryContextData
LLVMTypeRef StructAggStatePerGroupData
LLVMTypeRef llvm_pg_var_type(const char *varname)
LLVMValueRef llvm_function_reference(LLVMJitContext *context, LLVMBuilderRef builder, LLVMModuleRef mod, FunctionCallInfo fcinfo)
char * llvm_expand_funcname(struct LLVMJitContext *context, const char *basename)
LLVMTypeRef llvm_pg_var_func_type(const char *varname)
LLVMTypeRef StructTupleTableSlot
LLVMTypeRef TypeStorageBool
LLVMModuleRef llvm_mutable_module(LLVMJitContext *context)
LLVMTypeRef StructAggState
LLVMValueRef AttributeTemplate
LLVMTypeRef StructExprContext
void * llvm_get_function(LLVMJitContext *context, const char *funcname)
LLVMTypeRef StructNullableDatum
LLVMValueRef ExecEvalSubroutineTemplate
LLVMValueRef ExecEvalBoolSubroutineTemplate
LLVMTypeRef StructAggStatePerTransData
void llvm_copy_attributes(LLVMValueRef v_from, LLVMValueRef v_to)
void llvm_enter_fatal_on_oom(void)
void llvm_leave_fatal_on_oom(void)
static Datum ExecRunCompiledExpr(ExprState *state, ExprContext *econtext, bool *isNull)
#define build_EvalXFunc(b, mod, funcname, v_state, op,...)
bool llvm_compile_expr(ExprState *state)
static LLVMValueRef build_EvalXFuncInt(LLVMBuilderRef b, LLVMModuleRef mod, const char *funcname, LLVMValueRef v_state, ExprEvalStep *op, int natts, LLVMValueRef *v_args)
static LLVMValueRef create_LifetimeEnd(LLVMModuleRef mod)
static LLVMValueRef BuildV1Call(LLVMJitContext *context, LLVMBuilderRef b, LLVMModuleRef mod, FunctionCallInfo fcinfo, LLVMValueRef *v_fcinfo_isnull)
LLVMTypeRef LLVMGetFunctionType(LLVMValueRef r)
void pfree(void *pointer)
#define FIELDNO_AGGSTATEPERGROUPDATA_TRANSVALUE
#define FIELDNO_AGGSTATEPERGROUPDATA_TRANSVALUEISNULL
#define FIELDNO_AGGSTATEPERGROUPDATA_NOTRANSVALUE
#define castNode(_type_, nodeptr)
#define FIELDNO_NULLABLE_DATUM_ISNULL
FunctionCallInfo transfn_fcinfo
struct JitContext * es_jit
struct ExprEvalStep::@63::@64 fetch
struct ExprEvalStep::@63::@71 func
WindowFuncExprState * wfstate
ExecEvalBoolSubroutine subscriptfunc
struct ExprEvalStep::@63::@69 returningexpr
struct ExprEvalStep::@63::@72 boolexpr
struct ExprEvalStep::@63::@80 iocoerce
struct ExprEvalStep::@63::@67 assign_var
AggStatePerTrans pertrans
struct JsonExprState * jsestate
ExecEvalSubroutine paramfunc
FunctionCallInfo fcinfo_data_in
struct ExprEvalStep::@63::@91 sbsref_subscript
struct ExprEvalStep::@63::@65 var
struct ExprEvalStep::@63::@68 assign_tmp
const TupleTableSlotOps * kind
struct ExprEvalStep::@63::@108 agg_presorted_distinctcheck
FunctionCallInfo fcinfo_data
struct ExprEvalStep::@63::@78 casetest
struct ExprEvalStep::@63::@70 constval
struct ExprEvalStep::@63::@95 hashdatum
struct ExprEvalStep::@63::@105 agg_deserialize
struct ExprEvalStep::@63::@106 agg_strict_input_check
struct ExprEvalStep::@63::@73 qualexpr
struct ExprEvalStep::@63::@103 window_func
struct ExprEvalStep::@63::@79 make_readonly
union ExprEvalStep::@63 d
struct ExprEvalStep::@63::@92 sbsref
struct ExprEvalStep::@63::@86 rowcompare_step
struct ExprEvalStep::@63::@94 hashdatum_initvalue
struct ExprEvalStep::@63::@74 jump
struct ExprEvalStep::@63::@77 cparam
FunctionCallInfo fcinfo_data_out
struct ExprEvalStep::@63::@101 aggref
struct ExprEvalStep::@63::@109 agg_trans
struct ExprEvalStep::@63::@111 jsonexpr
struct ExprEvalStep::@63::@87 rowcompare_final
struct ExprEvalStep::@63::@107 agg_plain_pergroup_nullcheck
NullableDatum args[FLEXIBLE_ARRAY_MEMBER]
static void * fn(void *arg)
#define FIELDNO_TUPLETABLESLOT_ISNULL
#define FIELDNO_TUPLETABLESLOT_VALUES
#define FIELDNO_TUPLETABLESLOT_NVALID