From 8cb1ae92e6baf6b6497fa4bd3644d165452c574f Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 22 Jan 2019 01:33:35 +0300 Subject: [PATCH] Use SSA instead of bogus reverse linear scan. --- ext/opcache/Optimizer/scdf.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ext/opcache/Optimizer/scdf.c b/ext/opcache/Optimizer/scdf.c index f3a79338bd..45c4a25028 100644 --- a/ext/opcache/Optimizer/scdf.c +++ b/ext/opcache/Optimizer/scdf.c @@ -193,9 +193,12 @@ static zend_bool kept_alive_by_loop_var_free(scdf_ctx *scdf, uint32_t block_idx) zend_op *opline = &op_array->opcodes[i]; if (opline->opcode == ZEND_FE_FREE || (opline->opcode == ZEND_FREE && opline->extended_value == ZEND_FREE_SWITCH)) { - zend_op *def_opline = zend_optimizer_get_loop_var_def(op_array, opline); - if (def_opline) { - uint32_t def_block = cfg->map[def_opline - op_array->opcodes]; + int ssa_var = scdf->ssa->ops[i].op1_use; + if (ssa_var >= 0) { + int op_num = scdf->ssa->vars[ssa_var].definition; + uint32_t def_block; + ZEND_ASSERT(op_num >= 0); + def_block = cfg->map[op_num]; if (zend_bitset_in(scdf->executable_blocks, def_block)) { return 1; } -- 2.50.1