v1-0001-Rely-on-llvmjit_types-for-building-EvalFunc-calls.patch
application/octet-stream
Filename: v1-0001-Rely-on-llvmjit_types-for-building-EvalFunc-calls.patch
Type: application/octet-stream
Part: 1
Patch
Format: format-patch
Series: patch v1-0001
Subject: Rely on llvmjit_types for building EvalFunc calls
| File | + | − |
|---|---|---|
| src/backend/jit/llvm/llvmjit.c | 60 | 0 |
| src/backend/jit/llvm/llvmjit_expr.c | 34 | 54 |
| src/backend/jit/llvm/llvmjit_types.c | 30 | 1 |
| src/include/jit/llvmjit.h | 29 | 1 |
From 07c9833945e3f762f5d5cffc7272b6477bd14291 Mon Sep 17 00:00:00 2001
From: soumyadeep2007 <sochakraborty@pivotal.io>
Date: Sun, 27 Oct 2019 23:35:45 -0700
Subject: [PATCH v1] Rely on llvmjit_types for building EvalFunc calls
Rely on llvmjit_types's referenced_functions for building calls to EvalFuncs.
This ensures signature checks for the calls constructed.
Discussion:
https://postgr.es/m/20191024224303.jvdx3hq3ak2vbit3%40alap3.anarazel.de:wq
---
src/backend/jit/llvm/llvmjit.c | 60 +++++++++++++++++++
src/backend/jit/llvm/llvmjit_expr.c | 88 +++++++++++-----------------
src/backend/jit/llvm/llvmjit_types.c | 31 +++++++++-
src/include/jit/llvmjit.h | 30 +++++++++-
4 files changed, 153 insertions(+), 56 deletions(-)
diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c
index cdac7b1c5d..7a66d48645 100644
--- a/src/backend/jit/llvm/llvmjit.c
+++ b/src/backend/jit/llvm/llvmjit.c
@@ -98,6 +98,37 @@ LLVMValueRef FuncExecAggInitGroup;
LLVMValueRef FuncExecEvalArrayCoerceRelabel;
LLVMValueRef FuncExecEvalArrayCoerceUnpack;
LLVMValueRef FuncExecEvalArrayCoercePack;
+LLVMValueRef FuncExecAggInitGroup;
+LLVMValueRef FuncExecAggTransReparent;
+LLVMValueRef FuncExecEvalAggOrderedTransDatum;
+LLVMValueRef FuncExecEvalAggOrderedTransTuple;
+LLVMValueRef FuncExecEvalAlternativeSubPlan;
+LLVMValueRef FuncExecEvalArrayExpr;
+LLVMValueRef FuncExecEvalConstraintCheck;
+LLVMValueRef FuncExecEvalConstraintNotNull;
+LLVMValueRef FuncExecEvalConvertRowtype;
+LLVMValueRef FuncExecEvalCurrentOfExpr;
+LLVMValueRef FuncExecEvalFieldSelect;
+LLVMValueRef FuncExecEvalFieldStoreDeForm;
+LLVMValueRef FuncExecEvalFieldStoreForm;
+LLVMValueRef FuncExecEvalFuncExprFusage;
+LLVMValueRef FuncExecEvalFuncExprStrictFusage;
+LLVMValueRef FuncExecEvalGroupingFunc;
+LLVMValueRef FuncExecEvalMinMax;
+LLVMValueRef FuncExecEvalNextValueExpr;
+LLVMValueRef FuncExecEvalParamExec;
+LLVMValueRef FuncExecEvalParamExtern;
+LLVMValueRef FuncExecEvalRow;
+LLVMValueRef FuncExecEvalRowNotNull;
+LLVMValueRef FuncExecEvalRowNull;
+LLVMValueRef FuncExecEvalScalarArrayOp;
+LLVMValueRef FuncExecEvalSQLValueFunction;
+LLVMValueRef FuncExecEvalSubPlan;
+LLVMValueRef FuncExecEvalSubscriptingRefAssign;
+LLVMValueRef FuncExecEvalSubscriptingRefFetch;
+LLVMValueRef FuncExecEvalSubscriptingRefOld;
+LLVMValueRef FuncExecEvalWholeRowVar;
+LLVMValueRef FuncExecEvalXmlExpr;
static bool llvm_session_initialized = false;
@@ -928,6 +959,35 @@ llvm_create_types(void)
FuncExecEvalArrayCoerceRelabel = LLVMGetNamedFunction(mod, "ExecEvalArrayCoerceRelabel");
FuncExecEvalArrayCoerceUnpack = LLVMGetNamedFunction(mod, "ExecEvalArrayCoerceUnpack");
FuncExecEvalArrayCoercePack = LLVMGetNamedFunction(mod, "ExecEvalArrayCoercePack");
+ FuncExecEvalFuncExprFusage = LLVMGetNamedFunction(mod, "ExecEvalFuncExprFusage");
+ FuncExecEvalFuncExprStrictFusage = LLVMGetNamedFunction(mod, "ExecEvalFuncExprStrictFusage");
+ FuncExecEvalRowNull = LLVMGetNamedFunction(mod, "ExecEvalRowNull");
+ FuncExecEvalRowNotNull = LLVMGetNamedFunction(mod, "ExecEvalRowNotNull");
+ FuncExecEvalParamExec = LLVMGetNamedFunction(mod, "ExecEvalParamExec");
+ FuncExecEvalParamExtern = LLVMGetNamedFunction(mod, "ExecEvalParamExtern");
+ FuncExecEvalSubscriptingRefOld = LLVMGetNamedFunction(mod, "ExecEvalSubscriptingRefOld");
+ FuncExecEvalSubscriptingRefAssign = LLVMGetNamedFunction(mod, "ExecEvalSubscriptingRefAssign");
+ FuncExecEvalSubscriptingRefFetch = LLVMGetNamedFunction(mod, "ExecEvalSubscriptingRefFetch");
+ FuncExecEvalSQLValueFunction = LLVMGetNamedFunction(mod, "ExecEvalSQLValueFunction");
+ FuncExecEvalCurrentOfExpr = LLVMGetNamedFunction(mod, "ExecEvalCurrentOfExpr");
+ FuncExecEvalNextValueExpr = LLVMGetNamedFunction(mod, "ExecEvalNextValueExpr");
+ FuncExecEvalArrayExpr = LLVMGetNamedFunction(mod, "ExecEvalArrayExpr");
+ FuncExecEvalRow = LLVMGetNamedFunction(mod, "ExecEvalRow");
+ FuncExecEvalMinMax = LLVMGetNamedFunction(mod, "ExecEvalMinMax");
+ FuncExecEvalFieldSelect = LLVMGetNamedFunction(mod, "ExecEvalFieldSelect");
+ FuncExecEvalFieldStoreDeForm = LLVMGetNamedFunction(mod, "ExecEvalFieldStoreDeForm");
+ FuncExecEvalFieldStoreForm = LLVMGetNamedFunction(mod, "ExecEvalFieldStoreForm");
+ FuncExecEvalConstraintNotNull = LLVMGetNamedFunction(mod, "ExecEvalConstraintNotNull");
+ FuncExecEvalConstraintCheck = LLVMGetNamedFunction(mod, "ExecEvalConstraintCheck");
+ FuncExecEvalConvertRowtype = LLVMGetNamedFunction(mod, "ExecEvalConvertRowtype");
+ FuncExecEvalScalarArrayOp = LLVMGetNamedFunction(mod, "ExecEvalScalarArrayOp");
+ FuncExecEvalXmlExpr = LLVMGetNamedFunction(mod, "ExecEvalXmlExpr");
+ FuncExecEvalGroupingFunc = LLVMGetNamedFunction(mod, "ExecEvalGroupingFunc");
+ FuncExecEvalSubPlan = LLVMGetNamedFunction(mod, "ExecEvalSubPlan");
+ FuncExecEvalAlternativeSubPlan = LLVMGetNamedFunction(mod, "ExecEvalAlternativeSubPlan");
+ FuncExecEvalAggOrderedTransDatum = LLVMGetNamedFunction(mod, "ExecEvalAggOrderedTransDatum");
+ FuncExecEvalAggOrderedTransTuple = LLVMGetNamedFunction(mod, "ExecEvalAggOrderedTransTuple");
+ FuncExecEvalWholeRowVar = LLVMGetNamedFunction(mod, "ExecEvalWholeRowVar");
/*
* Leave the module alive, otherwise references to function would be
diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c
index bbe0fd0cb3..9284e32bde 100644
--- a/src/backend/jit/llvm/llvmjit_expr.c
+++ b/src/backend/jit/llvm/llvmjit_expr.c
@@ -131,12 +131,12 @@ static LLVMValueRef BuildV1CallFC(ExprCompileState *ecs,
LLVMValueRef v_fcinfo,
LLVMValueRef *v_fcinfo_isnull);
-#define build_EvalXFunc(ecs, funcname, opno, ...) \
- build_EvalXFuncInt(ecs, funcname, opno, \
+#define build_EvalXFunc(ecs, v_fn, opno, ...) \
+ build_EvalXFuncInt(ecs, v_fn, opno, \
lengthof(((LLVMValueRef[]){__VA_ARGS__})), \
((LLVMValueRef[]){__VA_ARGS__}))
-static void build_EvalXFuncInt(ExprCompileState *ecs, const char *funcname,
+static void build_EvalXFuncInt(ExprCompileState *ecs, LLVMValueRef v_fn,
int opno, int natts, LLVMValueRef v_args[]);
/*
@@ -561,7 +561,7 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_WHOLEROW:
- build_EvalXFunc(&ecs, "ExecEvalWholeRowVar", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalWholeRowVar, opno,
ecs.v_econtext, v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
@@ -798,7 +798,7 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_FUNCEXPR_FUSAGE:
- build_EvalXFunc(&ecs, "ExecEvalFuncExprFusage", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalFuncExprFusage, opno,
v_resultp,
expr_fcinfo_ref(&ecs, op->d.func.fcinfo_data, NULL));
LLVMBuildBr(b, opblocks[opno + 1]);
@@ -806,7 +806,7 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
case EEOP_FUNCEXPR_STRICT_FUSAGE:
- build_EvalXFunc(&ecs, "ExecEvalFuncExprStrictFusage", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalFuncExprStrictFusage, opno,
v_resultp,
expr_fcinfo_ref(&ecs, op->d.func.fcinfo_data, NULL));
LLVMBuildBr(b, opblocks[opno + 1]);
@@ -1190,13 +1190,13 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_NULLTEST_ROWISNULL:
- build_EvalXFunc(&ecs, "ExecEvalRowNull", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalRowNull, opno,
ecs.v_econtext, v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_NULLTEST_ROWISNOTNULL:
- build_EvalXFunc(&ecs, "ExecEvalRowNotNull", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalRowNotNull, opno,
ecs.v_econtext, v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
@@ -1269,13 +1269,13 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_PARAM_EXEC:
- build_EvalXFunc(&ecs, "ExecEvalParamExec", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalParamExec, opno,
ecs.v_econtext, v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_PARAM_EXTERN:
- build_EvalXFunc(&ecs, "ExecEvalParamExtern", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalParamExtern, opno,
ecs.v_econtext, v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
@@ -1322,21 +1322,21 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_SBSREF_OLD:
- build_EvalXFunc(&ecs, "ExecEvalSubscriptingRefOld", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalSubscriptingRefOld, opno,
v_resultp,
expr_nullable_datum_ref(&ecs, op->d.sbsref.prev));
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_SBSREF_ASSIGN:
- build_EvalXFunc(&ecs, "ExecEvalSubscriptingRefAssign", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalSubscriptingRefAssign, opno,
v_resultp,
expr_nullable_datum_ref(&ecs, op->d.sbsref.replace));
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_SBSREF_FETCH:
- build_EvalXFunc(&ecs, "ExecEvalSubscriptingRefFetch", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalSubscriptingRefFetch, opno,
v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
@@ -1755,24 +1755,24 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_SQLVALUEFUNCTION:
- build_EvalXFunc(&ecs, "ExecEvalSQLValueFunction", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalSQLValueFunction, opno,
v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_CURRENTOFEXPR:
- build_EvalXFunc(&ecs, "ExecEvalCurrentOfExpr", opno);
+ build_EvalXFunc(&ecs, FuncExecEvalCurrentOfExpr, opno);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_NEXTVALUEEXPR:
- build_EvalXFunc(&ecs, "ExecEvalNextValueExpr", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalNextValueExpr, opno,
v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_ARRAYEXPR:
- build_EvalXFunc(&ecs, "ExecEvalArrayExpr", opno, v_resultp,
+ build_EvalXFunc(&ecs, FuncExecEvalArrayExpr, opno, v_resultp,
expr_nullable_datum_array_ref(&ecs, op->d.arrayexpr.elements));
LLVMBuildBr(b, opblocks[opno + 1]);
break;
@@ -1842,7 +1842,7 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_ROW:
- build_EvalXFunc(&ecs, "ExecEvalRow", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalRow, opno,
v_resultp,
expr_nullable_datum_array_ref(&ecs, op->d.row.elements));
LLVMBuildBr(b, opblocks[opno + 1]);
@@ -2003,7 +2003,7 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_MINMAX:
- build_EvalXFunc(&ecs, "ExecEvalMinMax", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalMinMax, opno,
v_resultp,
expr_nullable_datum_array_ref(&ecs, op->d.minmax.arguments),
expr_fcinfo_ref(&ecs, op->d.minmax.fcinfo_data, NULL));
@@ -2011,20 +2011,20 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
break;
case EEOP_FIELDSELECT:
- build_EvalXFunc(&ecs, "ExecEvalFieldSelect", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalFieldSelect, opno,
ecs.v_econtext, v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_FIELDSTORE_DEFORM:
- build_EvalXFunc(&ecs, "ExecEvalFieldStoreDeForm", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalFieldStoreDeForm, opno,
ecs.v_econtext, v_resultp,
expr_nullable_datum_array_ref(&ecs, op->d.fieldstore.columns));
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_FIELDSTORE_FORM:
- build_EvalXFunc(&ecs, "ExecEvalFieldStoreForm", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalFieldStoreForm, opno,
v_resultp,
expr_nullable_datum_array_ref(&ecs, op->d.fieldstore.columns));
LLVMBuildBr(b, opblocks[opno + 1]);
@@ -2101,32 +2101,32 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_DOMAIN_NOTNULL:
- build_EvalXFunc(&ecs, "ExecEvalConstraintNotNull", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalConstraintNotNull, opno,
v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_DOMAIN_CHECK:
- build_EvalXFunc(&ecs, "ExecEvalConstraintCheck", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalConstraintCheck, opno,
expr_nullable_datum_ref(&ecs, op->d.domaincheck.check));
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_CONVERT_ROWTYPE:
- build_EvalXFunc(&ecs, "ExecEvalConvertRowtype", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalConvertRowtype, opno,
ecs.v_econtext, v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_SCALARARRAYOP:
- build_EvalXFunc(&ecs, "ExecEvalScalarArrayOp", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalScalarArrayOp, opno,
v_resultp,
expr_fcinfo_ref(&ecs, op->d.scalararrayop.fcinfo_data, NULL));
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_XMLEXPR:
- build_EvalXFunc(&ecs, "ExecEvalXmlExpr", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalXmlExpr, opno,
v_resultp,
expr_nullable_datum_array_ref(&ecs, op->d.xmlexpr.args),
expr_nullable_datum_array_ref(&ecs, op->d.xmlexpr.named_args));
@@ -2162,7 +2162,7 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_GROUPING_FUNC:
- build_EvalXFunc(&ecs, "ExecEvalGroupingFunc", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalGroupingFunc, opno,
v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
@@ -2196,13 +2196,13 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_SUBPLAN:
- build_EvalXFunc(&ecs, "ExecEvalSubPlan", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalSubPlan, opno,
ecs.v_econtext, v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_ALTERNATIVE_SUBPLAN:
- build_EvalXFunc(&ecs, "ExecEvalAlternativeSubPlan", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalAlternativeSubPlan, opno,
ecs.v_econtext, v_resultp);
LLVMBuildBr(b, opblocks[opno + 1]);
break;
@@ -2551,13 +2551,13 @@ llvm_compile_expr(ExprState *state, ExprStateBuilder *esb)
}
case EEOP_AGG_ORDERED_TRANS_DATUM:
- build_EvalXFunc(&ecs, "ExecEvalAggOrderedTransDatum", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalAggOrderedTransDatum, opno,
expr_nullable_datum_array_ref(&ecs, op->d.agg_trans_ordered.columns));
LLVMBuildBr(b, opblocks[opno + 1]);
break;
case EEOP_AGG_ORDERED_TRANS_TUPLE:
- build_EvalXFunc(&ecs, "ExecEvalAggOrderedTransTuple", opno,
+ build_EvalXFunc(&ecs, FuncExecEvalAggOrderedTransTuple, opno,
expr_nullable_datum_array_ref(&ecs, op->d.agg_trans_ordered.columns));
LLVMBuildBr(b, opblocks[opno + 1]);
break;
@@ -3115,37 +3115,17 @@ BuildV1CallFC(ExprCompileState *ecs,
* Implement an expression step by calling the function funcname.
*/
static void
-build_EvalXFuncInt(ExprCompileState *ecs, const char *funcname, int opno,
+build_EvalXFuncInt(ExprCompileState *ecs, LLVMValueRef v_fn, int opno,
int nargs, LLVMValueRef v_args[])
{
LLVMValueRef v_opno = l_int32_const(opno);
LLVMValueRef v_opp;
- LLVMTypeRef sig;
- LLVMValueRef v_fn;
LLVMValueRef *params;
- LLVMTypeRef *param_types;
params = palloc(sizeof(LLVMValueRef) * (2 + nargs));
- param_types = palloc(sizeof(LLVMValueRef) * (2 + nargs));
v_opp = LLVMBuildGEP(ecs->b, ecs->v_steps,
(LLVMValueRef[]){l_int32_const(0), v_opno}, 2, "");
- v_fn = LLVMGetNamedFunction(ecs->mod, funcname);
- if (!v_fn)
- {
- int argno = 0;
-
- param_types[argno++] = l_ptr(StructExprState);
- param_types[argno++] = l_ptr(StructExprEvalStep);
-
- for (int i = 0; i < nargs; i++)
- param_types[argno++] = LLVMTypeOf(v_args[i]);
-
- sig = LLVMFunctionType(LLVMVoidType(),
- param_types, argno,
- false);
- v_fn = LLVMAddFunction(ecs->mod, funcname, sig);
- }
{
int argno = 0;
@@ -3156,6 +3136,6 @@ build_EvalXFuncInt(ExprCompileState *ecs, const char *funcname, int opno,
for (int i = 0; i < nargs; i++)
params[argno++] = v_args[i];
- LLVMBuildCall(ecs->b, v_fn, params, argno, "");
+ LLVMBuildCall(ecs->b, llvm_get_decl(ecs->mod, v_fn), params, argno, "");
}
}
diff --git a/src/backend/jit/llvm/llvmjit_types.c b/src/backend/jit/llvm/llvmjit_types.c
index 082b312060..d414e60b99 100644
--- a/src/backend/jit/llvm/llvmjit_types.c
+++ b/src/backend/jit/llvm/llvmjit_types.c
@@ -114,5 +114,34 @@ void *referenced_functions[] =
ExecAggInitGroup,
ExecEvalArrayCoerceRelabel,
ExecEvalArrayCoerceUnpack,
- ExecEvalArrayCoercePack
+ ExecEvalArrayCoercePack,
+ ExecEvalFuncExprFusage,
+ ExecEvalFuncExprStrictFusage,
+ ExecEvalRowNull,
+ ExecEvalRowNotNull,
+ ExecEvalParamExec,
+ ExecEvalParamExtern,
+ ExecEvalSubscriptingRefOld,
+ ExecEvalSubscriptingRefAssign,
+ ExecEvalSubscriptingRefFetch,
+ ExecEvalSQLValueFunction,
+ ExecEvalCurrentOfExpr,
+ ExecEvalNextValueExpr,
+ ExecEvalArrayExpr,
+ ExecEvalRow,
+ ExecEvalMinMax,
+ ExecEvalFieldSelect,
+ ExecEvalFieldStoreDeForm,
+ ExecEvalFieldStoreForm,
+ ExecEvalConstraintNotNull,
+ ExecEvalConstraintCheck,
+ ExecEvalConvertRowtype,
+ ExecEvalScalarArrayOp,
+ ExecEvalXmlExpr,
+ ExecEvalGroupingFunc,
+ ExecEvalSubPlan,
+ ExecEvalAlternativeSubPlan,
+ ExecEvalAggOrderedTransDatum,
+ ExecEvalAggOrderedTransTuple,
+ ExecEvalWholeRowVar
};
diff --git a/src/include/jit/llvmjit.h b/src/include/jit/llvmjit.h
index 751bb69e25..4fd0dc7072 100644
--- a/src/include/jit/llvmjit.h
+++ b/src/include/jit/llvmjit.h
@@ -97,7 +97,35 @@ extern LLVMValueRef FuncExecAggInitGroup;
extern LLVMValueRef FuncExecEvalArrayCoerceRelabel;
extern LLVMValueRef FuncExecEvalArrayCoerceUnpack;
extern LLVMValueRef FuncExecEvalArrayCoercePack;
-
+extern LLVMValueRef FuncExecEvalFuncExprFusage;
+extern LLVMValueRef FuncExecEvalFuncExprStrictFusage;
+extern LLVMValueRef FuncExecEvalRowNull;
+extern LLVMValueRef FuncExecEvalRowNotNull;
+extern LLVMValueRef FuncExecEvalParamExec;
+extern LLVMValueRef FuncExecEvalParamExtern;
+extern LLVMValueRef FuncExecEvalSubscriptingRefOld;
+extern LLVMValueRef FuncExecEvalSubscriptingRefAssign;
+extern LLVMValueRef FuncExecEvalSubscriptingRefFetch;
+extern LLVMValueRef FuncExecEvalSQLValueFunction;
+extern LLVMValueRef FuncExecEvalCurrentOfExpr;
+extern LLVMValueRef FuncExecEvalNextValueExpr;
+extern LLVMValueRef FuncExecEvalArrayExpr;
+extern LLVMValueRef FuncExecEvalRow;
+extern LLVMValueRef FuncExecEvalMinMax;
+extern LLVMValueRef FuncExecEvalFieldSelect;
+extern LLVMValueRef FuncExecEvalFieldStoreDeForm;
+extern LLVMValueRef FuncExecEvalFieldStoreForm;
+extern LLVMValueRef FuncExecEvalConstraintNotNull;
+extern LLVMValueRef FuncExecEvalConstraintCheck;
+extern LLVMValueRef FuncExecEvalConvertRowtype;
+extern LLVMValueRef FuncExecEvalScalarArrayOp;
+extern LLVMValueRef FuncExecEvalXmlExpr;
+extern LLVMValueRef FuncExecEvalGroupingFunc;
+extern LLVMValueRef FuncExecEvalSubPlan;
+extern LLVMValueRef FuncExecEvalAlternativeSubPlan;
+extern LLVMValueRef FuncExecEvalAggOrderedTransDatum;
+extern LLVMValueRef FuncExecEvalAggOrderedTransTuple;
+extern LLVMValueRef FuncExecEvalWholeRowVar;
extern void llvm_enter_fatal_on_oom(void);
extern void llvm_leave_fatal_on_oom(void);
--
2.23.0