aboutsummaryrefslogtreecommitdiff
path: root/src/backend/jit/llvm/llvmjit_expr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/jit/llvm/llvmjit_expr.c')
-rw-r--r--src/backend/jit/llvm/llvmjit_expr.c38
1 files changed, 8 insertions, 30 deletions
diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c
index 42258774783..13e981e5641 100644
--- a/src/backend/jit/llvm/llvmjit_expr.c
+++ b/src/backend/jit/llvm/llvmjit_expr.c
@@ -406,13 +406,8 @@ llvm_compile_expr(ExprState *state)
case EEOP_OUTER_SYSVAR:
case EEOP_SCAN_SYSVAR:
{
- int attnum = op->d.var.attnum;
- LLVMValueRef v_attnum;
- LLVMValueRef v_tuple;
- LLVMValueRef v_tupleDescriptor;
- LLVMValueRef v_params[4];
- LLVMValueRef v_syscol;
LLVMValueRef v_slot;
+ LLVMValueRef v_params[4];
if (opcode == EEOP_INNER_SYSVAR)
v_slot = v_innerslot;
@@ -421,31 +416,14 @@ llvm_compile_expr(ExprState *state)
else
v_slot = v_scanslot;
- Assert(op->d.var.attnum < 0);
-
- v_tuple = l_load_struct_gep(b, v_slot,
- FIELDNO_TUPLETABLESLOT_TUPLE,
- "v.tuple");
+ v_params[0] = v_state;
+ v_params[1] = l_ptr_const(op, l_ptr(StructExprEvalStep));
+ v_params[2] = v_econtext;
+ v_params[3] = v_slot;
- /*
- * Could optimize this a bit for fixed descriptors, but
- * this shouldn't be that critical a path.
- */
- v_tupleDescriptor =
- l_load_struct_gep(b, v_slot,
- FIELDNO_TUPLETABLESLOT_TUPLEDESCRIPTOR,
- "v.tupledesc");
- v_attnum = l_int32_const(attnum);
-
- v_params[0] = v_tuple;
- v_params[1] = v_attnum;
- v_params[2] = v_tupleDescriptor;
- v_params[3] = v_resnullp;
- v_syscol = LLVMBuildCall(b,
- llvm_get_decl(mod, FuncHeapGetsysattr),
- v_params, lengthof(v_params),
- "");
- LLVMBuildStore(b, v_syscol, v_resvaluep);
+ LLVMBuildCall(b,
+ FuncExecEvalSysVar,
+ v_params, lengthof(v_params), "");
LLVMBuildBr(b, opblocks[i + 1]);
break;