Hi hackers, I find there are some unnecessary load/store instructions being emitted by the JIT compiler.
E.g., ``` v_boolnull = l_load(b, TypeStorageBool, v_resnullp, ""); v_boolvalue = l_load(b, TypeSizeT, v_resvaluep, ""); /* set resnull to boolnull */ LLVMBuildStore(b, v_boolnull, v_resnullp); /* set revalue to boolvalue */ LLVMBuildStore(b, v_boolvalue, v_resvaluep); ``` v_boolnull is loaded from v_resnullp and stored to v_resnullp immediately. v_boolvalue is loaded from v_resvaluep and stored to v_resvaluep immediately. The attached patch is trying to fix them. Best Regards, Xing
From 6c7503b9e92c10b3dd9e6d33391273b854d53437 Mon Sep 17 00:00:00 2001 From: Xing Guo <higuox...@gmail.com> Date: Fri, 30 Aug 2024 11:43:45 +0800 Subject: [PATCH] JIT: Remove some unnecessary instructions. There're some unnecessary instructions being emitted by the JIT compiler. This patch removes them. --- src/backend/jit/llvm/llvmjit_expr.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c index 48ccdb942a..1edc476c59 100644 --- a/src/backend/jit/llvm/llvmjit_expr.c +++ b/src/backend/jit/llvm/llvmjit_expr.c @@ -720,11 +720,6 @@ llvm_compile_expr(ExprState *state) v_boolnull = l_load(b, TypeStorageBool, v_resnullp, ""); v_boolvalue = l_load(b, TypeSizeT, v_resvaluep, ""); - /* set resnull to boolnull */ - LLVMBuildStore(b, v_boolnull, v_resnullp); - /* set revalue to boolvalue */ - LLVMBuildStore(b, v_boolvalue, v_resvaluep); - /* check if current input is NULL */ LLVMBuildCondBr(b, LLVMBuildICmp(b, LLVMIntEQ, v_boolnull, @@ -816,11 +811,6 @@ llvm_compile_expr(ExprState *state) v_boolnull = l_load(b, TypeStorageBool, v_resnullp, ""); v_boolvalue = l_load(b, TypeSizeT, v_resvaluep, ""); - /* set resnull to boolnull */ - LLVMBuildStore(b, v_boolnull, v_resnullp); - /* set revalue to boolvalue */ - LLVMBuildStore(b, v_boolvalue, v_resvaluep); - LLVMBuildCondBr(b, LLVMBuildICmp(b, LLVMIntEQ, v_boolnull, l_sbool_const(1), ""), @@ -875,10 +865,8 @@ llvm_compile_expr(ExprState *state) case EEOP_BOOL_NOT_STEP: { LLVMValueRef v_boolvalue; - LLVMValueRef v_boolnull; LLVMValueRef v_negbool; - v_boolnull = l_load(b, TypeStorageBool, v_resnullp, ""); v_boolvalue = l_load(b, TypeSizeT, v_resvaluep, ""); v_negbool = LLVMBuildZExt(b, @@ -887,8 +875,7 @@ llvm_compile_expr(ExprState *state) l_sizet_const(0), ""), TypeSizeT, ""); - /* set resnull to boolnull */ - LLVMBuildStore(b, v_boolnull, v_resnullp); + /* set revalue to !boolvalue */ LLVMBuildStore(b, v_negbool, v_resvaluep); -- 2.46.0