LLVMJIT: Add to-be-synchronized types.
authorAndres Freund <[email protected]>
Mon, 5 Feb 2018 17:09:28 +0000 (09:09 -0800)
committerAndres Freund <[email protected]>
Wed, 21 Mar 2018 02:34:25 +0000 (19:34 -0700)
Author: Andres Freund
Discussion: https://postgr.es/m/20170901064131[email protected]

src/backend/jit/llvm/llvmjit.c
src/backend/jit/llvm/llvmjit_types.c
src/include/jit/llvmjit.h

index d78857a874d568ab83fb09b54099072d1eae2d62..03d30712babf8140849373d16a8b3bb4d66eb435 100644 (file)
@@ -45,9 +45,38 @@ typedef struct LLVMJitHandle
 
 /* types & functions commonly needed for JITing */
 LLVMTypeRef TypeSizeT;
+LLVMTypeRef TypePGFunction;
+LLVMTypeRef StructHeapTupleFieldsField3;
+LLVMTypeRef StructHeapTupleFields;
+LLVMTypeRef StructHeapTupleHeaderData;
+LLVMTypeRef StructHeapTupleDataChoice;
+LLVMTypeRef StructHeapTupleData;
+LLVMTypeRef StructMinimalTupleData;
+LLVMTypeRef StructItemPointerData;
+LLVMTypeRef StructBlockId;
+LLVMTypeRef StructFormPgAttribute;
+LLVMTypeRef StructTupleConstr;
+LLVMTypeRef StructtupleDesc;
+LLVMTypeRef StructTupleTableSlot;
+LLVMTypeRef StructMemoryContextData;
+LLVMTypeRef StructPGFinfoRecord;
+LLVMTypeRef StructFmgrInfo;
+LLVMTypeRef StructFunctionCallInfoData;
+LLVMTypeRef StructExprContext;
+LLVMTypeRef StructExprEvalStep;
+LLVMTypeRef StructExprState;
+LLVMTypeRef StructAggState;
+LLVMTypeRef StructAggStatePerGroupData;
+LLVMTypeRef StructAggStatePerTransData;
 
 LLVMValueRef AttributeTemplate;
 LLVMValueRef FuncStrlen;
+LLVMValueRef FuncSlotGetsomeattrs;
+LLVMValueRef FuncHeapGetsysattr;
+LLVMValueRef FuncMakeExpandedObjectReadOnlyInternal;
+LLVMValueRef FuncExecEvalArrayRefSubscript;
+LLVMValueRef FuncExecAggTransReparent;
+LLVMValueRef FuncExecAggInitGroup;
 
 
 static bool llvm_session_initialized = false;
@@ -656,9 +685,27 @@ llvm_create_types(void)
    llvm_layout = pstrdup(LLVMGetDataLayoutStr(mod));
 
    TypeSizeT = load_type(mod, "TypeSizeT");
+   TypePGFunction = load_type(mod, "TypePGFunction");
+   StructExprContext = load_type(mod, "StructExprContext");
+   StructExprEvalStep = load_type(mod, "StructExprEvalStep");
+   StructExprState = load_type(mod, "StructExprState");
+   StructFunctionCallInfoData = load_type(mod, "StructFunctionCallInfoData");
+   StructMemoryContextData = load_type(mod, "StructMemoryContextData");
+   StructTupleTableSlot = load_type(mod, "StructTupleTableSlot");
+   StructHeapTupleData = load_type(mod, "StructHeapTupleData");
+   StructtupleDesc = load_type(mod, "StructtupleDesc");
+   StructAggState = load_type(mod, "StructAggState");
+   StructAggStatePerGroupData = load_type(mod, "StructAggStatePerGroupData");
+   StructAggStatePerTransData = load_type(mod, "StructAggStatePerTransData");
 
    AttributeTemplate = LLVMGetNamedFunction(mod, "AttributeTemplate");
    FuncStrlen = LLVMGetNamedFunction(mod, "strlen");
+   FuncSlotGetsomeattrs = LLVMGetNamedFunction(mod, "slot_getsomeattrs");
+   FuncHeapGetsysattr = LLVMGetNamedFunction(mod, "heap_getsysattr");
+   FuncMakeExpandedObjectReadOnlyInternal = LLVMGetNamedFunction(mod, "MakeExpandedObjectReadOnlyInternal");
+   FuncExecEvalArrayRefSubscript = LLVMGetNamedFunction(mod, "ExecEvalArrayRefSubscript");
+   FuncExecAggTransReparent = LLVMGetNamedFunction(mod, "ExecAggTransReparent");
+   FuncExecAggInitGroup = LLVMGetNamedFunction(mod, "ExecAggInitGroup");
 
    /*
     * Leave the module alive, otherwise references to function would be
index 28da2e9d1d31dcf06b40dacc390087854368b9c5..a241249e4fd45644de706ab8e6314e771fde6f2f 100644 (file)
 
 #include "postgres.h"
 
+#include "access/htup.h"
+#include "access/htup_details.h"
+#include "access/tupdesc.h"
+#include "catalog/pg_attribute.h"
+#include "executor/execExpr.h"
+#include "executor/nodeAgg.h"
+#include "executor/tuptable.h"
+#include "fmgr.h"
+#include "nodes/execnodes.h"
+#include "nodes/memnodes.h"
+#include "utils/expandeddatum.h"
+#include "utils/palloc.h"
 
 /*
  * List of types needed for JITing. These have to be non-static, otherwise
  * anything, that's harmless.
  */
 size_t     TypeSizeT;
+PGFunction TypePGFunction;
+
+AggState   StructAggState;
+AggStatePerGroupData StructAggStatePerGroupData;
+AggStatePerTransData StructAggStatePerTransData;
+ExprContext StructExprContext;
+ExprEvalStep StructExprEvalStep;
+ExprState  StructExprState;
+FunctionCallInfoData StructFunctionCallInfoData;
+HeapTupleData StructHeapTupleData;
+MemoryContextData StructMemoryContextData;
+TupleTableSlot StructTupleTableSlot;
+struct tupleDesc StructtupleDesc;
 
 
 /*
@@ -55,5 +80,11 @@ AttributeTemplate(PG_FUNCTION_ARGS)
  */
 void      *referenced_functions[] =
 {
-   strlen
+   strlen,
+   slot_getsomeattrs,
+   heap_getsysattr,
+   MakeExpandedObjectReadOnlyInternal,
+   ExecEvalArrayRefSubscript,
+   ExecAggTransReparent,
+   ExecAggInitGroup
 };
index 39fea3d7f7a17e543a0a2a48ae91602231d06256..fd5621805fcf8fdd4882ebe310bccf970efe6c92 100644 (file)
@@ -48,9 +48,27 @@ typedef struct LLVMJitContext
 
 /* type and struct definitions */
 extern LLVMTypeRef TypeSizeT;
+extern LLVMTypeRef TypePGFunction;
+extern LLVMTypeRef StructtupleDesc;
+extern LLVMTypeRef StructHeapTupleData;
+extern LLVMTypeRef StructTupleTableSlot;
+extern LLVMTypeRef StructMemoryContextData;
+extern LLVMTypeRef StructFunctionCallInfoData;
+extern LLVMTypeRef StructExprContext;
+extern LLVMTypeRef StructExprEvalStep;
+extern LLVMTypeRef StructExprState;
+extern LLVMTypeRef StructAggState;
+extern LLVMTypeRef StructAggStatePerTransData;
+extern LLVMTypeRef StructAggStatePerGroupData;
 
 extern LLVMValueRef AttributeTemplate;
 extern LLVMValueRef FuncStrlen;
+extern LLVMValueRef FuncSlotGetsomeattrs;
+extern LLVMValueRef FuncHeapGetsysattr;
+extern LLVMValueRef FuncMakeExpandedObjectReadOnlyInternal;
+extern LLVMValueRef FuncExecEvalArrayRefSubscript;
+extern LLVMValueRef FuncExecAggTransReparent;
+extern LLVMValueRef FuncExecAggInitGroup;
 
 
 extern void llvm_enter_fatal_on_oom(void);