Skip to content

Commit fb397b9

Browse files
committed
Fix regression
1 parent 4e2f958 commit fb397b9

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

Zend/Optimizer/sccp.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,6 @@ static bool can_replace_op1(
245245
case ZEND_SEND_USER:
246246
case ZEND_FE_RESET_RW:
247247
return 0;
248-
case ZEND_SEND_VAR:
249-
return ssa_op->op1_def == -1;
250248
/* Do not accept CONST */
251249
case ZEND_ROPE_ADD:
252250
case ZEND_ROPE_END:
@@ -1052,9 +1050,15 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o
10521050
case ZEND_SEND_VAL:
10531051
case ZEND_SEND_VAR:
10541052
{
1055-
if (opline->opcode == ZEND_SEND_VAR) {
1056-
/* TODO ? */
1057-
/* Can be UNDEF or a value copy */
1053+
SKIP_IF_TOP(op1);
1054+
1055+
if (opline->opcode == ZEND_SEND_VAR && ssa_op->op1_def >= 0) {
1056+
//if (IS_BOT(op1)) {
1057+
// SET_RESULT_BOT(op1);
1058+
//} else {
1059+
// /* Can be UNDEF or a value copy */
1060+
// SET_RESULT(op1, op1);
1061+
//}
10581062
SET_RESULT_BOT(op1);
10591063
}
10601064

@@ -1066,7 +1070,7 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o
10661070
}
10671071

10681072
call = ctx->call_map[opline - ctx->scdf.op_array->opcodes];
1069-
if (IS_TOP(op1) || !call || !call->caller_call_opline
1073+
if (!call || !call->caller_call_opline
10701074
|| call->caller_call_opline->opcode != ZEND_DO_ICALL) {
10711075
return;
10721076
}
@@ -2344,6 +2348,9 @@ static int replace_constant_operands(sccp_ctx *ctx) {
23442348
FOREACH_USE(var, use) {
23452349
zend_op *opline = &op_array->opcodes[use];
23462350
zend_ssa_op *ssa_op = &ssa->ops[use];
2351+
if (opline->opcode == ZEND_SEND_VAR && ssa_op->op1_def >= 0) {
2352+
zend_ssa_replace_op1_def_op1_use(ssa, ssa_op);
2353+
}
23472354
if (try_replace_op1(ctx, opline, ssa_op, i, value)) {
23482355
if (opline->opcode == ZEND_NOP) {
23492356
removed_ops++;

0 commit comments

Comments
 (0)