]> granicus.if.org Git - php/commitdiff
Otimize out useless QM_ASSIGN
authorDmitry Stogov <dmitry@zend.com>
Wed, 9 Oct 2019 06:08:25 +0000 (09:08 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 9 Oct 2019 06:08:25 +0000 (09:08 +0300)
ext/opcache/Optimizer/block_pass.c

index 6ca3d02468b0272c3c0ffcf5e2aac940daa6fb33..4e4d270b62eecf92080ba3af1943e5dbb4f78efc 100644 (file)
@@ -883,6 +883,18 @@ optimize_const_unary_op:
                                        /* strip T = QM_ASSIGN(T) */
                                        MAKE_NOP(opline);
                                        ++(*opt_count);
+                               } else if (opline->op1_type == IS_TMP_VAR &&
+                                          opline->result_type == IS_TMP_VAR &&
+                                          !zend_bitset_in(used_ext, VAR_NUM(opline->op1.var))) {
+                                       /* T1 = ..., T2 = QM_ASSIGN(T1) to T2 = ..., NOP */
+                                       src = VAR_SOURCE(opline->op1);
+                                       if (src) {
+                                               src->result.var = opline->result.var;
+                                               VAR_SOURCE(opline->op1) = NULL;
+                                               VAR_SOURCE(opline->result) = src;
+                                               MAKE_NOP(opline);
+                                               ++(*opt_count);
+                                       }
                                }
                                break;
                }