]> granicus.if.org Git - php/commitdiff
New optimization pattern
authorDmitry Stogov <dmitry@zend.com>
Wed, 31 May 2017 06:53:10 +0000 (09:53 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 31 May 2017 06:53:10 +0000 (09:53 +0300)
ext/opcache/Optimizer/pass3.c

index e5d032cd297e7840235c5db4bc731e77db55d281..dfb3e0dbcdfeebf133484d3e2346a85b4cc8e69e 100644 (file)
@@ -299,6 +299,13 @@ void zend_optimizer_pass3(zend_op_array *op_array)
                                                          JMPZ_EX(X,L1+1) */
                                                        ZEND_SET_OP_JMP_ADDR(opline, opline->op2, target + 1);
                                                        break;
+                                               } else if (target->opcode == ZEND_BOOL &&
+                                                          SAME_VAR(opline->result, target->op1)) {
+                                                       /* convert Y = JMPZ_EX(X,L1), L1: Z = BOOL(Y) to
+                                                          Z = JMPZ_EX(X,L1+1) */
+                                                       opline->result.var = target->result.var;
+                                                       ZEND_SET_OP_JMP_ADDR(opline, opline->op2, target + 1);
+                                                       break;
                                                } else {
                                                        break;
                                                }