From 7084fade4dcb74415f0644d8e207f0fab6c6509d Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 5 Jul 2017 20:37:21 +0300 Subject: [PATCH] Fixed SSA reconstruction --- ext/opcache/Optimizer/sccp.c | 6 +++++- ext/opcache/Optimizer/zend_ssa.c | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ext/opcache/Optimizer/sccp.c b/ext/opcache/Optimizer/sccp.c index 1366aec49b0..44afa0ad8de 100644 --- a/ext/opcache/Optimizer/sccp.c +++ b/ext/opcache/Optimizer/sccp.c @@ -1203,7 +1203,11 @@ static void replace_constant_operands(sccp_ctx *ctx) { zend_ssa_op *ssa_op = &ssa->ops[use]; if (try_replace_op1(ctx, opline, ssa_op, i, value)) { ZEND_ASSERT(ssa_op->op1_def == -1); - zend_ssa_unlink_use_chain(ssa, use, ssa_op->op1_use); + if (ssa_op->op1_use != ssa_op->op2_use) { + zend_ssa_unlink_use_chain(ssa, use, ssa_op->op1_use); + } else { + ssa_op->op2_use_chain = ssa_op->op1_use_chain; + } ssa_op->op1_use = -1; ssa_op->op1_use_chain = -1; } diff --git a/ext/opcache/Optimizer/zend_ssa.c b/ext/opcache/Optimizer/zend_ssa.c index c3de23cf0c5..720a45e0ecc 100644 --- a/ext/opcache/Optimizer/zend_ssa.c +++ b/ext/opcache/Optimizer/zend_ssa.c @@ -1170,7 +1170,11 @@ void zend_ssa_remove_instr(zend_ssa *ssa, zend_op *opline, zend_ssa_op *ssa_op) ssa_op->res_use_chain = -1; } if (ssa_op->op1_use >= 0) { - zend_ssa_unlink_use_chain(ssa, ssa_op - ssa->ops, ssa_op->op1_use); + if (ssa_op->op1_use != ssa_op->op2_use) { + zend_ssa_unlink_use_chain(ssa, ssa_op - ssa->ops, ssa_op->op1_use); + } else { + ssa_op->op2_use_chain = ssa_op->op1_use_chain; + } ssa_op->op1_use = -1; ssa_op->op1_use_chain = -1; }