com php-src: Merge branch 'PHP-7.0' into PHP-7.1: ext/opcache/O ptimizer/block_pass.c ext/opcache/Optimizer/pass2.c

[email protected] (Nikita Popov)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    1df3099f2f7ef5d1b5613be60f796e67bf7724a1
Author:    Nikita Popov <[email protected]>         Mon, 10 Apr 2017 22:11:47 +0200
Parents:   5c518f47e465cc49b403e3c107db5eca915c87e0 6f950e83eb1467521853d6628f514d2eebef7ebb
Branches:  PHP-7.1 master

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=1df3099f2f7ef5d1b5613be60f796e67bf7724a1

Log:
Merge branch 'PHP-7.0' into PHP-7.1

Changed paths:
  MM  ext/opcache/Optimizer/block_pass.c
  MM  ext/opcache/Optimizer/pass2.c


Diff:
diff --cc ext/opcache/Optimizer/block_pass.c
index 38c2ecb,acce8b7..bf411f4
--- a/ext/opcache/Optimizer/block_pass.c
+++ b/ext/opcache/Optimizer/block_pass.c
@@@ -1173,16 -1445,33 +1173,19 @@@ static void zend_jmp_optimization(zend_
  				break;
  			}
  
 -			if (block->op2_to == block->follow_to) {
 -				/* L: JMPZ(X, L+1) -> NOP or FREE(X) */
 -
 -				if (last_op->op1_type == IS_VAR) {
 -					zend_op **Tsource = cfg->Tsource;
 -					zend_op *src = VAR_SOURCE(last_op->op1);
 +			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 (src &&
 -					    src->opcode != ZEND_FETCH_R &&
 -					    src->opcode != ZEND_FETCH_DIM_R &&
 -					    src->opcode != ZEND_FETCH_OBJ_R) {
 -						ZEND_RESULT_TYPE(src) |= EXT_TYPE_UNUSED;
 -						MAKE_NOP(last_op);
 -						block->op2_to = NULL;
 -						break;
 -					}
 -				}
+ 				if (last_op->op1_type == IS_CV) {
 -					break;
++					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;
 -					block->op2_to = NULL;
  				} else {
  					MAKE_NOP(last_op);
 -					block->op2_to = NULL;
  				}
 +				block->successors[1] = -1;
  				break;
  			}
  
diff --cc ext/opcache/Optimizer/pass2.c
index 41ab7c6,098be51..d592938
--- a/ext/opcache/Optimizer/pass2.c
+++ b/ext/opcache/Optimizer/pass2.c
@@@ -174,15 -154,22 +174,23 @@@ void zend_optimizer_pass2(zend_op_arra
  				if ((opline + 1)->opcode == ZEND_JMP) {
  					/* JMPZ(X, L1), JMP(L2) => JMPZNZ(X, L1, L2) */
  					/* JMPNZ(X, L1), JMP(L2) => JMPZNZ(X, L2, L1) */
 -					if (ZEND_OP2(opline).opline_num == ZEND_OP1(opline + 1).opline_num) {
 +					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) {
 -							break;
++							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_OP1(opline + 1).opline_num;
 +							opline->extended_value = ZEND_OPLINE_TO_OFFSET(opline, ZEND_OP1_JMP_ADDR(opline + 1));
  						} else {
 -							opline->extended_value = ZEND_OP2(opline).opline_num;
 -							COPY_NODE(opline->op2, (opline + 1)->op1);
 +							opline->extended_value = ZEND_OPLINE_TO_OFFSET(opline, ZEND_OP2_JMP_ADDR(opline));
 +							ZEND_SET_OP_JMP_ADDR(opline, opline->op2, ZEND_OP1_JMP_ADDR(opline + 1));
  						}
  						opline->opcode = ZEND_JMPZNZ;
  					}
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.