summaryrefslogtreecommitdiff
path: root/src/include/jit
diff options
context:
space:
mode:
authorThomas Munro2025-09-17 00:00:16 +0000
committerThomas Munro2025-09-17 01:38:35 +0000
commit0951942bba25f85ad29a4f096ed51a356652b5a2 (patch)
treeb8a5c6c88fdfcdbf4ab19ede16518c0b9a4413c3 /src/include/jit
parent39f67d9b554fcd6dfb6c4f02a4af757eecd1fecf (diff)
jit: Fix type used for Datum values in LLVM IR.
Commit 2a600a93 made Datum 8 bytes wide everywhere. It was no longer appropriate to use TypeSizeT on 32 bit systems, and JIT compilation would fail with various type check errors. Introduce a separate LLVMTypeRef with the name TypeDatum. TypeSizeT is still used in some places for actual size_t values. Reported-by: Dmitry Mityugov <d.mityugov@postgrespro.ru> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Tested-by: Dmitry Mityugov <d.mityugov@postgrespro.ru> Discussion: https://postgr.es/m/0a9f0be59171c2e8f1b3bc10f4fcf267%40postgrespro.ru
Diffstat (limited to 'src/include/jit')
-rw-r--r--src/include/jit/llvmjit.h1
-rw-r--r--src/include/jit/llvmjit_emit.h11
2 files changed, 11 insertions, 1 deletions
diff --git a/src/include/jit/llvmjit.h b/src/include/jit/llvmjit.h
index 5038cf33e3f..b3c75022f55 100644
--- a/src/include/jit/llvmjit.h
+++ b/src/include/jit/llvmjit.h
@@ -74,6 +74,7 @@ typedef struct LLVMJitContext
extern PGDLLIMPORT LLVMTypeRef TypeParamBool;
extern PGDLLIMPORT LLVMTypeRef TypePGFunction;
extern PGDLLIMPORT LLVMTypeRef TypeSizeT;
+extern PGDLLIMPORT LLVMTypeRef TypeDatum;
extern PGDLLIMPORT LLVMTypeRef TypeStorageBool;
extern PGDLLIMPORT LLVMTypeRef StructNullableDatum;
diff --git a/src/include/jit/llvmjit_emit.h b/src/include/jit/llvmjit_emit.h
index df5a9fc8500..0e57a332b6e 100644
--- a/src/include/jit/llvmjit_emit.h
+++ b/src/include/jit/llvmjit_emit.h
@@ -87,6 +87,15 @@ l_sizet_const(size_t i)
}
/*
+ * Emit constant integer.
+ */
+static inline LLVMValueRef
+l_datum_const(Datum i)
+{
+ return LLVMConstInt(TypeDatum, i, false);
+}
+
+/*
* Emit constant boolean, as used for storage (e.g. global vars, structs).
*/
static inline LLVMValueRef
@@ -313,7 +322,7 @@ l_funcnull(LLVMBuilderRef b, LLVMValueRef v_fcinfo, size_t argno)
static inline LLVMValueRef
l_funcvalue(LLVMBuilderRef b, LLVMValueRef v_fcinfo, size_t argno)
{
- return l_load(b, TypeSizeT, l_funcvaluep(b, v_fcinfo, argno), "");
+ return l_load(b, TypeDatum, l_funcvaluep(b, v_fcinfo, argno), "");
}
#endif /* USE_LLVM */