diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2017-04-10 22:12:05 +0200 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2017-04-10 22:12:05 +0200 |
| commit | eeb6cdf810b5781a29c9cd70f31979aac062ef1c (patch) | |
| tree | d56f5a5741562e9ef3c79ea035500dc09a6cfae3 | |
| parent | cae649070f6172bf6913168f0f1f6feec950c6ea (diff) | |
| parent | 1df3099f2f7ef5d1b5613be60f796e67bf7724a1 (diff) | |
| download | php-git-eeb6cdf810b5781a29c9cd70f31979aac062ef1c.tar.gz | |
Merge branch 'PHP-7.1'
| -rw-r--r-- | ext/opcache/Optimizer/block_pass.c | 5 | ||||
| -rw-r--r-- | ext/opcache/Optimizer/pass2.c | 10 |
2 files changed, 13 insertions, 2 deletions
diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c index a7c8897c3f..767fb672a1 100644 --- a/ext/opcache/Optimizer/block_pass.c +++ b/ext/opcache/Optimizer/block_pass.c @@ -1166,7 +1166,10 @@ static void zend_jmp_optimization(zend_basic_block *block, zend_op_array *op_arr if (block->successors[0] == block->successors[1]) { /* L: JMP[N]Z(X, L+1) -> NOP or FREE(X) */ - if (last_op->op1_type & (IS_VAR|IS_TMP_VAR)) { + if (last_op->op1_type == IS_CV) { + last_op->opcode = ZEND_CHECK_VAR; + last_op->op2.num = 0; + } else if (last_op->op1_type & (IS_VAR|IS_TMP_VAR)) { last_op->opcode = ZEND_FREE; last_op->op2.num = 0; } else { diff --git a/ext/opcache/Optimizer/pass2.c b/ext/opcache/Optimizer/pass2.c index 41ab7c6045..d592938256 100644 --- a/ext/opcache/Optimizer/pass2.c +++ b/ext/opcache/Optimizer/pass2.c @@ -176,7 +176,15 @@ void zend_optimizer_pass2(zend_op_array *op_array) /* JMPNZ(X, L1), JMP(L2) => JMPZNZ(X, L2, L1) */ if (ZEND_OP2_JMP_ADDR(opline) == ZEND_OP1_JMP_ADDR(opline + 1)) { /* JMPZ(X, L1), JMP(L1) => NOP, JMP(L1) */ - MAKE_NOP(opline); + if (opline->op1_type == IS_CV) { + opline->opcode = ZEND_CHECK_VAR; + opline->op2.num = 0; + } else if (opline->op1_type & (IS_TMP_VAR|IS_VAR)) { + opline->opcode = ZEND_FREE; + opline->op2.num = 0; + } else { + MAKE_NOP(opline); + } } else { if (opline->opcode == ZEND_JMPZ) { opline->extended_value = ZEND_OPLINE_TO_OFFSET(opline, ZEND_OP1_JMP_ADDR(opline + 1)); |
