Skip to content

Commit 7084fad

Browse files
committed
Fixed SSA reconstruction
1 parent 37ec4e0 commit 7084fad

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

ext/opcache/Optimizer/sccp.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1203,7 +1203,11 @@ static void replace_constant_operands(sccp_ctx *ctx) {
12031203
zend_ssa_op *ssa_op = &ssa->ops[use];
12041204
if (try_replace_op1(ctx, opline, ssa_op, i, value)) {
12051205
ZEND_ASSERT(ssa_op->op1_def == -1);
1206-
zend_ssa_unlink_use_chain(ssa, use, ssa_op->op1_use);
1206+
if (ssa_op->op1_use != ssa_op->op2_use) {
1207+
zend_ssa_unlink_use_chain(ssa, use, ssa_op->op1_use);
1208+
} else {
1209+
ssa_op->op2_use_chain = ssa_op->op1_use_chain;
1210+
}
12071211
ssa_op->op1_use = -1;
12081212
ssa_op->op1_use_chain = -1;
12091213
}

ext/opcache/Optimizer/zend_ssa.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1170,7 +1170,11 @@ void zend_ssa_remove_instr(zend_ssa *ssa, zend_op *opline, zend_ssa_op *ssa_op)
11701170
ssa_op->res_use_chain = -1;
11711171
}
11721172
if (ssa_op->op1_use >= 0) {
1173-
zend_ssa_unlink_use_chain(ssa, ssa_op - ssa->ops, ssa_op->op1_use);
1173+
if (ssa_op->op1_use != ssa_op->op2_use) {
1174+
zend_ssa_unlink_use_chain(ssa, ssa_op - ssa->ops, ssa_op->op1_use);
1175+
} else {
1176+
ssa_op->op2_use_chain = ssa_op->op1_use_chain;
1177+
}
11741178
ssa_op->op1_use = -1;
11751179
ssa_op->op1_use_chain = -1;
11761180
}

0 commit comments

Comments
 (0)