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.
|
* Create a function that deforms a tuple of type desc up to natts columns.
|
||||||
*/
|
*/
|
||||||
LLVMValueRef
|
LLVMValueRef
|
||||||
slot_compile_deform(LLVMJitContext *context, TupleDesc desc, int natts)
|
slot_compile_deform(LLVMJitContext *context, TupleDesc desc,
|
||||||
|
const TupleTableSlotOps *ops, int natts)
|
||||||
{
|
{
|
||||||
char *funcname;
|
char *funcname;
|
||||||
|
|
||||||
@ -88,6 +89,10 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, int natts)
|
|||||||
|
|
||||||
int attnum;
|
int attnum;
|
||||||
|
|
||||||
|
/* virtual tuples never need deforming, so don't generate code */
|
||||||
|
if (ops == &TTSOpsVirtual)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
mod = llvm_mutable_module(context);
|
mod = llvm_mutable_module(context);
|
||||||
|
|
||||||
funcname = llvm_expand_funcname(context, "deform");
|
funcname = llvm_expand_funcname(context, "deform");
|
||||||
|
@ -324,6 +324,7 @@ llvm_compile_expr(ExprState *state)
|
|||||||
{
|
{
|
||||||
l_jit_deform =
|
l_jit_deform =
|
||||||
slot_compile_deform(context, desc,
|
slot_compile_deform(context, desc,
|
||||||
|
tts_ops,
|
||||||
op->d.fetch.last_var);
|
op->d.fetch.last_var);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,7 +111,9 @@ extern void llvm_inline(LLVMModuleRef mod);
|
|||||||
****************************************************************************
|
****************************************************************************
|
||||||
*/
|
*/
|
||||||
extern bool llvm_compile_expr(struct ExprState *state);
|
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