summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2017-04-10 22:11:47 +0200
committerNikita Popov <nikita.ppv@gmail.com>2017-04-10 22:11:47 +0200
commit1df3099f2f7ef5d1b5613be60f796e67bf7724a1 (patch)
tree3348cddff79b53769ad35aea03b21df1a20893c0
parent5c518f47e465cc49b403e3c107db5eca915c87e0 (diff)
parent6f950e83eb1467521853d6628f514d2eebef7ebb (diff)
downloadphp-git-1df3099f2f7ef5d1b5613be60f796e67bf7724a1.tar.gz
Merge branch 'PHP-7.0' into PHP-7.1
-rw-r--r--ext/opcache/Optimizer/block_pass.c5
-rw-r--r--ext/opcache/Optimizer/pass2.c10
2 files changed, 13 insertions, 2 deletions
diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c
index 38c2ecb124..bf411f4e77 100644
--- a/ext/opcache/Optimizer/block_pass.c
+++ b/ext/opcache/Optimizer/block_pass.c
@@ -1176,7 +1176,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));