Don't generate tuple deforming functions for virtual slots.
Virtual tuple table slots never need tuple deforming. Therefore, if we know at expression compilation time, that a certain slot will always be virtual, there's no need to create a tuple deforming routine for it. Author: Andres Freund Discussion: https://postgr.es/m/20181105210039.hh4vvi4vwoq5ba2q@alap3.anarazel.de
This commit is contained in:
parent
15d8f83128
commit
7ef04e4d2c
@ -31,7 +31,8 @@
|
||||
* Create a function that deforms a tuple of type desc up to natts columns.
|
||||
*/
|
||||
LLVMValueRef
|
||||
slot_compile_deform(LLVMJitContext *context, TupleDesc desc, int natts)
|
||||
slot_compile_deform(LLVMJitContext *context, TupleDesc desc,
|
||||
const TupleTableSlotOps *ops, int natts)
|
||||
{
|
||||
char *funcname;
|
||||
|
||||
@ -88,6 +89,10 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, int natts)
|
||||
|
||||
int attnum;
|
||||
|
||||
/* virtual tuples never need deforming, so don't generate code */
|
||||
if (ops == &TTSOpsVirtual)
|
||||
return NULL;
|
||||
|
||||
mod = llvm_mutable_module(context);
|
||||
|
||||
funcname = llvm_expand_funcname(context, "deform");
|
||||
|
@ -324,6 +324,7 @@ llvm_compile_expr(ExprState *state)
|
||||
{
|
||||
l_jit_deform =
|
||||
slot_compile_deform(context, desc,
|
||||
tts_ops,
|
||||
op->d.fetch.last_var);
|
||||
}
|
||||
|
||||
|
@ -111,7 +111,9 @@ extern void llvm_inline(LLVMModuleRef mod);
|
||||
****************************************************************************
|
||||
*/
|
||||
extern bool llvm_compile_expr(struct ExprState *state);
|
||||
extern LLVMValueRef slot_compile_deform(struct LLVMJitContext *context, TupleDesc desc, int natts);
|
||||
struct TupleTableSlotOps;
|
||||
extern LLVMValueRef slot_compile_deform(struct LLVMJitContext *context, TupleDesc desc,
|
||||
const struct TupleTableSlotOps *ops, int natts);
|
||||
|
||||
/*
|
||||
****************************************************************************
|
||||
|
Loading…
x
Reference in New Issue
Block a user