From: Xinchen Hui Date: Wed, 3 Jan 2018 10:28:03 +0000 (+0800) Subject: Enable replacing const to INSTANCEOF X-Git-Tag: php-7.3.0alpha1~705 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=76d0e3d514ba47ad29c06e97efc16fef41e8186b;p=php Enable replacing const to INSTANCEOF --- diff --git a/ext/opcache/Optimizer/sccp.c b/ext/opcache/Optimizer/sccp.c index 0e65ac8b8f..25b51b687a 100644 --- a/ext/opcache/Optimizer/sccp.c +++ b/ext/opcache/Optimizer/sccp.c @@ -242,7 +242,6 @@ static zend_bool can_replace_op1( case ZEND_MAKE_REF: case ZEND_UNSET_CV: case ZEND_ISSET_ISEMPTY_CV: - case ZEND_INSTANCEOF: return 0; case ZEND_INIT_ARRAY: case ZEND_ADD_ARRAY_ELEMENT: @@ -299,6 +298,22 @@ static zend_bool try_replace_op1( opline->op1.constant = zend_optimizer_add_literal(ctx->scdf.op_array, &zv); opline->op1_type = IS_CONST; return 1; + case ZEND_INSTANCEOF: + zval_ptr_dtor_nogc(&zv); + ZVAL_FALSE(&zv); + opline->opcode = ZEND_QM_ASSIGN; + opline->op1_type = IS_CONST; + opline->op1.constant = zend_optimizer_add_literal(ctx->scdf.op_array, &zv); + opline->op2_type = IS_UNUSED; + if (ssa_op->op2_use >= 0) { + ZEND_ASSERT(ssa_op->op2_def == -1); + zend_ssa_unlink_use_chain(ctx->scdf.ssa, ssa_op - ctx->scdf.ssa->ops, ssa_op->op2_use); + ssa_op->op2_use = -1; + ssa_op->op2_use_chain = -1; + } + return 1; + default: + break; } zval_ptr_dtor_nogc(&zv); } diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c index 37357f3c31..97be113f47 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/ext/opcache/Optimizer/zend_optimizer.c @@ -272,6 +272,7 @@ int zend_optimizer_update_op1_const(zend_op_array *op_array, case ZEND_FETCH_LIST_W: case ZEND_ASSIGN_DIM: case ZEND_RETURN_BY_REF: + case ZEND_INSTANCEOF: return 0; case ZEND_INIT_STATIC_METHOD_CALL: case ZEND_CATCH: