On Fri, Aug 30, 2024 at 8:50 PM Andreas Karlsson <andr...@proxel.se> wrote: > > On 8/30/24 5:55 AM, Xing Guo wrote: > > I find there are some unnecessary load/store instructions being > > emitted by the JIT compiler. > > Well spotted! All of these are obvious dead instructions and while LLVM > might be able to optimize them away there is no reason to create extra > work for the optimizer. > > The patch looks good, applies and the tests passes.
Thanks for testing it! I spotted another unnecessary store instruction and added it in my V2 patch. Best Regards, Xing
From ca30976ebf70ebed12ede7999d4ab637a9851641 Mon Sep 17 00:00:00 2001 From: Xing Guo <higuox...@gmail.com> Date: Mon, 2 Sep 2024 10:21:37 +0800 Subject: [PATCH v2] JIT: Remove unnecessary load/store instructions. --- src/backend/jit/llvm/llvmjit_expr.c | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/backend/jit/llvm/llvmjit_expr.c b/src/backend/jit/llvm/llvmjit_expr.c index 48ccdb942a..7ece2e3d2e 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); @@ -1615,7 +1602,6 @@ llvm_compile_expr(ExprState *state) LLVMPositionBuilderAtEnd(b, b_argsequal); LLVMBuildStore(b, l_sbool_const(1), v_resnullp); LLVMBuildStore(b, l_sizet_const(0), v_resvaluep); - LLVMBuildStore(b, v_retval, v_resvaluep); LLVMBuildBr(b, opblocks[opno + 1]); break; -- 2.46.0