From: Nikita Popov Date: Sat, 17 Feb 2018 11:41:57 +0000 (+0100) Subject: Fix COALESCE jump optimization X-Git-Tag: php-7.3.0alpha1~391 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=257f07ef6d650936469dfed292a852f568e562b4;p=php Fix COALESCE jump optimization --- diff --git a/ext/opcache/Optimizer/dfa_pass.c b/ext/opcache/Optimizer/dfa_pass.c index 4a7ba6ba69..9e16a9c55c 100644 --- a/ext/opcache/Optimizer/dfa_pass.c +++ b/ext/opcache/Optimizer/dfa_pass.c @@ -819,14 +819,12 @@ optimize_jmpnz: } else { zend_ssa_var *var = &ssa->vars[ssa_op->result_def]; if (var->use_chain < 0 && var->phi_use_chain == NULL) { - ssa_op->result_def = -1; if (opline->result_type & (IS_TMP_VAR|IS_VAR)) { zend_optimizer_remove_live_range_ex(op_array, opline->result.var, var->definition); } - zend_ssa_unlink_use_chain(ssa, opline - op_array->opcodes, ssa_op->op1_use); - ssa_op->op1_use = -1; - ssa_op->op1_use_chain = -1; opline->opcode = ZEND_JMP; + opline->result_type = IS_UNUSED; + zend_ssa_remove_result_def(ssa, ssa_op); COPY_NODE(opline->op1, opline->op2); take_successor_0(ssa, block_num, block); goto optimize_jmp; diff --git a/ext/opcache/tests/jmp_elim_004.phpt b/ext/opcache/tests/jmp_elim_004.phpt new file mode 100644 index 0000000000..e31af3da17 --- /dev/null +++ b/ext/opcache/tests/jmp_elim_004.phpt @@ -0,0 +1,17 @@ +--TEST-- +Incorrect empty basic block elimination +--INI-- +opcache.enable_cli=1 +opcache.optimization_level=-1 +--FILE-- + +--EXPECT-- +string(4) "test"