From 92478a2428ef5657b6707ebe1fc8d25d931bfab1 Mon Sep 17 00:00:00 2001 From: Ilija Tovilo Date: Thu, 15 Dec 2022 14:35:57 +0100 Subject: [PATCH] Optimize JMP[N]Z_EX to BOOL instead of QM_ASSIGN && and || should always evaluate to a boolean instead of the lhs/rhs. This optimization never gets triggered for any of our tests. Additionally, even if triggered this instruction gets optimized away because the else branch of the JMP instruction will overwrite the tmp value. --- Zend/Optimizer/dfa_pass.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Zend/Optimizer/dfa_pass.c b/Zend/Optimizer/dfa_pass.c index 970557daf9a22..0594993421cb9 100644 --- a/Zend/Optimizer/dfa_pass.c +++ b/Zend/Optimizer/dfa_pass.c @@ -847,7 +847,7 @@ static int zend_dfa_optimize_jmps(zend_op_array *op_array, zend_ssa *ssa) goto optimize_jmpz; } else if (opline->op1_type == IS_CONST) { if (zend_is_true(CT_CONSTANT_EX(op_array, opline->op1.constant))) { - opline->opcode = ZEND_QM_ASSIGN; + opline->opcode = ZEND_BOOL; take_successor_1(ssa, block_num, block); } } @@ -861,7 +861,7 @@ static int zend_dfa_optimize_jmps(zend_op_array *op_array, zend_ssa *ssa) goto optimize_jmpnz; } else if (opline->op1_type == IS_CONST) { if (!zend_is_true(CT_CONSTANT_EX(op_array, opline->op1.constant))) { - opline->opcode = ZEND_QM_ASSIGN; + opline->opcode = ZEND_BOOL; take_successor_1(ssa, block_num, block); } }