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

Reply via email to