From 06f6eb0e6877d8b26c621f5627587539ebcc781f Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 12 Jul 2017 14:52:28 +0300 Subject: [PATCH] Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() --- ext/opcache/Optimizer/dce.c | 10 ++++++---- ext/opcache/Optimizer/zend_optimizer_internal.h | 5 ----- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/ext/opcache/Optimizer/dce.c b/ext/opcache/Optimizer/dce.c index 05cb778bfa8..25a41950142 100644 --- a/ext/opcache/Optimizer/dce.c +++ b/ext/opcache/Optimizer/dce.c @@ -228,10 +228,10 @@ static inline void add_operands_to_worklists(context *ctx, zend_op *opline, zend if (ssa_op->result_use >= 0) { add_to_worklists(ctx, ssa_op->result_use); } - if (ssa_op->op1_use >= 0 && !zend_has_improper_op1_use(opline)) { + if (ssa_op->op1_use >= 0 && !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op1_use)) { add_to_worklists(ctx, ssa_op->op1_use); } - if (ssa_op->op2_use >= 0) { + if (ssa_op->op2_use >= 0 && !zend_ssa_is_no_val_use(opline, ssa_op, ssa_op->op2_use)) { add_to_worklists(ctx, ssa_op->op2_use); } } @@ -501,10 +501,12 @@ int dce_optimize_op_array(zend_op_array *op_array, zend_ssa *ssa, zend_bool reor /* Improper uses don't count as "uses" for the purpose of instruction elimination, * but we have to retain phis defining them. Push those phis to the worklist. */ FOREACH_INSTR_NUM(i) { - if (zend_has_improper_op1_use(&op_array->opcodes[i])) { - ZEND_ASSERT(ssa->ops[i].op1_use >= 0); + if (ssa->ops[i].op1_use >= 0 && zend_ssa_is_no_val_use(&op_array->opcodes[i], &ssa->ops[i], ssa->ops[i].op1_use)) { add_to_phi_worklist_only(&ctx, ssa->ops[i].op1_use); } + if (ssa->ops[i].op2_use >= 0 && zend_ssa_is_no_val_use(&op_array->opcodes[i], &ssa->ops[i], ssa->ops[i].op2_use)) { + add_to_phi_worklist_only(&ctx, ssa->ops[i].op2_use); + } } FOREACH_INSTR_NUM_END(); /* Propagate this information backwards, marking any phi with an improperly used diff --git a/ext/opcache/Optimizer/zend_optimizer_internal.h b/ext/opcache/Optimizer/zend_optimizer_internal.h index a4b2d137900..aa37456b2bf 100644 --- a/ext/opcache/Optimizer/zend_optimizer_internal.h +++ b/ext/opcache/Optimizer/zend_optimizer_internal.h @@ -115,9 +115,4 @@ zend_uchar zend_compound_assign_to_binary_op(zend_uchar opcode); int sccp_optimize_op_array(zend_optimizer_ctx *ctx, zend_op_array *op_arrya, zend_ssa *ssa, zend_call_info **call_map); int dce_optimize_op_array(zend_op_array *op_array, zend_ssa *ssa, zend_bool reorder_dtor_effects); -static inline zend_bool zend_has_improper_op1_use(zend_op *opline) { - return opline->opcode == ZEND_ASSIGN - || (opline->opcode == ZEND_UNSET_VAR && opline->extended_value & ZEND_QUICK_SET); -} - #endif