From: Nikita Popov Date: Sat, 14 Nov 2015 10:23:31 +0000 (+0100) Subject: Remove no longer applicable optimization X-Git-Tag: php-7.1.0alpha1~748^2~4^2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e02aea55905a364bd4f3c6442d3d3af65d49a4de;p=php Remove no longer applicable optimization PHP 7 generates CVs inside silenced blocks. --- diff --git a/ext/opcache/Optimizer/pass1_5.c b/ext/opcache/Optimizer/pass1_5.c index ca1cf45539..abdc490c0a 100644 --- a/ext/opcache/Optimizer/pass1_5.c +++ b/ext/opcache/Optimizer/pass1_5.c @@ -645,68 +645,6 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx) case ZEND_ASSERT_CHECK: collect_constants = 0; break; - case ZEND_FETCH_R: - case ZEND_FETCH_W: - case ZEND_FETCH_RW: - case ZEND_FETCH_FUNC_ARG: - case ZEND_FETCH_IS: - case ZEND_FETCH_UNSET: - if (opline != op_array->opcodes && - (opline-1)->opcode == ZEND_BEGIN_SILENCE && - (opline->extended_value & ZEND_FETCH_TYPE_MASK) == ZEND_FETCH_LOCAL && - opline->op1_type == IS_CONST && - opline->op2_type == IS_UNUSED && - Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_STRING && - (Z_STRLEN(ZEND_OP1_LITERAL(opline)) != sizeof("this")-1 || - memcmp(Z_STRVAL(ZEND_OP1_LITERAL(opline)), "this", sizeof("this") - 1) != 0)) { - - int var = opline->result.var; - int level = 0; - zend_op *op = opline + 1; - zend_op *use = NULL; - - while (op < end) { - if (op->opcode == ZEND_BEGIN_SILENCE) { - level++; - } else if (op->opcode == ZEND_END_SILENCE) { - if (level == 0) { - break; - } else { - level--; - } - } - if (op->op1_type == IS_VAR && op->op1.var == var) { - if (use) { - /* used more than once */ - use = NULL; - break; - } - use = op; - } else if (op->op2_type == IS_VAR && op->op2.var == var) { - if (use) { - /* used more than once */ - use = NULL; - break; - } - use = op; - } - op++; - } - if (use) { - if (use->op1_type == IS_VAR && use->op1.var == var) { - use->op1_type = IS_CV; - use->op1.var = zend_optimizer_lookup_cv(op_array, - Z_STR(ZEND_OP1_LITERAL(opline))); - MAKE_NOP(opline); - } else if (use->op2_type == IS_VAR && use->op2.var == var) { - use->op2_type = IS_CV; - use->op2.var = zend_optimizer_lookup_cv(op_array, - Z_STR(ZEND_OP1_LITERAL(opline))); - MAKE_NOP(opline); - } - } - } - break; } opline++; i++;