attrnumber_llvm_type.patch
text/x-patch
Filename: attrnumber_llvm_type.patch
Type: text/x-patch
Part: 1
Message:
Re: TupleTableSlot abstraction
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/jit/llvm/llvmjit.c | 2 | 0 |
| src/backend/jit/llvm/llvmjit_deform.c | 1 | 1 |
| src/backend/jit/llvm/llvmjit_expr.c | 1 | 1 |
| src/backend/jit/llvm/llvmjit_types.c | 1 | 0 |
| src/include/jit/llvmjit_emit.h | 9 | 0 |
| src/include/jit/llvmjit.h | 1 | 0 |
diff --git a/src/backend/jit/llvm/llvmjit.c b/src/backend/jit/llvm/llvmjit.c
index daae964..46b4c5d 100644
--- a/src/backend/jit/llvm/llvmjit.c
+++ b/src/backend/jit/llvm/llvmjit.c
@@ -49,6 +49,7 @@ LLVMTypeRef TypeSizeT;
LLVMTypeRef TypeParamBool;
LLVMTypeRef TypeStorageBool;
LLVMTypeRef TypePGFunction;
+LLVMTypeRef TypeAttrNumber;
LLVMTypeRef StructHeapTupleFieldsField3;
LLVMTypeRef StructHeapTupleFields;
LLVMTypeRef StructHeapTupleHeaderData;
@@ -798,6 +799,7 @@ llvm_create_types(void)
TypeParamBool = load_return_type(mod, "FunctionReturningBool");
TypeStorageBool = load_type(mod, "TypeStorageBool");
TypePGFunction = load_type(mod, "TypePGFunction");
+ TypeAttrNumber = load_type(mod, "TypeAttrNumber");
StructExprContext = load_type(mod, "StructExprContext");
StructExprEvalStep = load_type(mod, "StructExprEvalStep");
StructExprState = load_type(mod, "StructExprState");
diff --git a/src/backend/jit/llvm/llvmjit_deform.c b/src/backend/jit/llvm/llvmjit_deform.c
index 795f671..804bb94 100644
--- a/src/backend/jit/llvm/llvmjit_deform.c
+++ b/src/backend/jit/llvm/llvmjit_deform.c
@@ -691,7 +691,7 @@ slot_compile_deform(LLVMJitContext *context, TupleDesc desc, int natts)
{
LLVMValueRef v_off = LLVMBuildLoad(b, v_offp, "");
- LLVMBuildStore(b, l_int32_const(natts), v_nvalidp);
+ LLVMBuildStore(b, l_attrnumber_const(natts), v_nvalidp);
v_off = LLVMBuildTrunc(b, v_off, LLVMInt32Type(), "");
LLVMBuildStore(b, v_off, v_slotoffp);
LLVMBuildStore(b, l_int8_const(1), v_slowp);
diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c
index 36c5f7d..aaa5bac 100644
--- a/src/backend/jit/llvm/llvmjit_expr.c
+++ b/src/backend/jit/llvm/llvmjit_expr.c
@@ -324,7 +324,7 @@ llvm_compile_expr(ExprState *state)
"");
LLVMBuildCondBr(b,
LLVMBuildICmp(b, LLVMIntUGE, v_nvalid,
- l_int32_const(op->d.fetch.last_var),
+ l_attrnumber_const(op->d.fetch.last_var),
""),
opblocks[i + 1], b_fetch);
diff --git a/src/backend/jit/llvm/llvmjit_types.c b/src/backend/jit/llvm/llvmjit_types.c
index 42304d0..19e7aaa 100644
--- a/src/backend/jit/llvm/llvmjit_types.c
+++ b/src/backend/jit/llvm/llvmjit_types.c
@@ -48,6 +48,7 @@
PGFunction TypePGFunction;
size_t TypeSizeT;
bool TypeStorageBool;
+AttrNumber TypeAttrNumber;
AggState StructAggState;
AggStatePerGroupData StructAggStatePerGroupData;
diff --git a/src/include/jit/llvmjit.h b/src/include/jit/llvmjit.h
index b0093db..b65b6df 100644
--- a/src/include/jit/llvmjit.h
+++ b/src/include/jit/llvmjit.h
@@ -61,6 +61,7 @@ extern LLVMTypeRef TypeParamBool;
extern LLVMTypeRef TypePGFunction;
extern LLVMTypeRef TypeSizeT;
extern LLVMTypeRef TypeStorageBool;
+extern LLVMTypeRef TypeAttrNumber;
extern LLVMTypeRef StructtupleDesc;
extern LLVMTypeRef StructHeapTupleData;
diff --git a/src/include/jit/llvmjit_emit.h b/src/include/jit/llvmjit_emit.h
index 0d1b246..a80380d 100644
--- a/src/include/jit/llvmjit_emit.h
+++ b/src/include/jit/llvmjit_emit.h
@@ -97,6 +97,15 @@ l_pbool_const(bool i)
}
/*
+ * Emit constant AttrNumber.
+ */
+static inline LLVMValueRef
+l_attrnumber_const(AttrNumber i)
+{
+ return LLVMConstInt(TypeAttrNumber, (int) i, false);
+}
+
+/*
* Load a pointer member idx from a struct.
*/
static inline LLVMValueRef