]> granicus.if.org Git - php/commitdiff
micro-optimization
authorDmitry Stogov <dmitry@zend.com>
Mon, 18 Mar 2019 23:02:14 +0000 (02:02 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 18 Mar 2019 23:02:14 +0000 (02:02 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index 1d2073be00a72726b85b8a0a725a3821ad40c76f..2fe4cc76d48d2e1a5abfd31a834ea6273a8d1928 100644 (file)
@@ -6548,6 +6548,14 @@ ZEND_VM_C_LABEL(num_index_prop):
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
                        result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
                            (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+
+                       if (OP1_TYPE & (IS_CONST|IS_CV)) {
+                               /* avoid exception check */
+                               FREE_OP1();
+                               ZEND_VM_SMART_BRANCH(result, 0);
+                               ZVAL_BOOL(EX_VAR(opline->result.var), result);
+                               ZEND_VM_NEXT_OPCODE();
+                       }
                } else {
                        result = (value == NULL || !i_zend_is_true(value));
                }
index 72b98dc1bd4e1b2f218b0191df466706317d6327..eebf5e9ba4c704af4af7c68477798e3c1dd9e2d4 100644 (file)
@@ -5915,6 +5915,14 @@ num_index_prop:
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
                        result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
                            (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+
+                       if (IS_CONST & (IS_CONST|IS_CV)) {
+                               /* avoid exception check */
+
+                               ZEND_VM_SMART_BRANCH(result, 0);
+                               ZVAL_BOOL(EX_VAR(opline->result.var), result);
+                               ZEND_VM_NEXT_OPCODE();
+                       }
                } else {
                        result = (value == NULL || !i_zend_is_true(value));
                }
@@ -8004,6 +8012,14 @@ num_index_prop:
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
                        result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
                            (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+
+                       if (IS_CONST & (IS_CONST|IS_CV)) {
+                               /* avoid exception check */
+
+                               ZEND_VM_SMART_BRANCH(result, 0);
+                               ZVAL_BOOL(EX_VAR(opline->result.var), result);
+                               ZEND_VM_NEXT_OPCODE();
+                       }
                } else {
                        result = (value == NULL || !i_zend_is_true(value));
                }
@@ -10912,6 +10928,14 @@ num_index_prop:
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
                        result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
                            (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+
+                       if (IS_CONST & (IS_CONST|IS_CV)) {
+                               /* avoid exception check */
+
+                               ZEND_VM_SMART_BRANCH(result, 0);
+                               ZVAL_BOOL(EX_VAR(opline->result.var), result);
+                               ZEND_VM_NEXT_OPCODE();
+                       }
                } else {
                        result = (value == NULL || !i_zend_is_true(value));
                }
@@ -14364,6 +14388,14 @@ num_index_prop:
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
                        result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
                            (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+
+                       if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
+                               /* avoid exception check */
+                               zval_ptr_dtor_nogc(free_op1);
+                               ZEND_VM_SMART_BRANCH(result, 0);
+                               ZVAL_BOOL(EX_VAR(opline->result.var), result);
+                               ZEND_VM_NEXT_OPCODE();
+                       }
                } else {
                        result = (value == NULL || !i_zend_is_true(value));
                }
@@ -15863,6 +15895,14 @@ num_index_prop:
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
                        result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
                            (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+
+                       if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
+                               /* avoid exception check */
+                               zval_ptr_dtor_nogc(free_op1);
+                               ZEND_VM_SMART_BRANCH(result, 0);
+                               ZVAL_BOOL(EX_VAR(opline->result.var), result);
+                               ZEND_VM_NEXT_OPCODE();
+                       }
                } else {
                        result = (value == NULL || !i_zend_is_true(value));
                }
@@ -17476,6 +17516,14 @@ num_index_prop:
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
                        result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
                            (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+
+                       if ((IS_TMP_VAR|IS_VAR) & (IS_CONST|IS_CV)) {
+                               /* avoid exception check */
+                               zval_ptr_dtor_nogc(free_op1);
+                               ZEND_VM_SMART_BRANCH(result, 0);
+                               ZVAL_BOOL(EX_VAR(opline->result.var), result);
+                               ZEND_VM_NEXT_OPCODE();
+                       }
                } else {
                        result = (value == NULL || !i_zend_is_true(value));
                }
@@ -43862,6 +43910,14 @@ num_index_prop:
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
                        result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
                            (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+
+                       if (IS_CV & (IS_CONST|IS_CV)) {
+                               /* avoid exception check */
+
+                               ZEND_VM_SMART_BRANCH(result, 0);
+                               ZVAL_BOOL(EX_VAR(opline->result.var), result);
+                               ZEND_VM_NEXT_OPCODE();
+                       }
                } else {
                        result = (value == NULL || !i_zend_is_true(value));
                }
@@ -47851,6 +47907,14 @@ num_index_prop:
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
                        result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
                            (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+
+                       if (IS_CV & (IS_CONST|IS_CV)) {
+                               /* avoid exception check */
+
+                               ZEND_VM_SMART_BRANCH(result, 0);
+                               ZVAL_BOOL(EX_VAR(opline->result.var), result);
+                               ZEND_VM_NEXT_OPCODE();
+                       }
                } else {
                        result = (value == NULL || !i_zend_is_true(value));
                }
@@ -53840,6 +53904,14 @@ num_index_prop:
                        /* > IS_NULL means not IS_UNDEF and not IS_NULL */
                        result = value != NULL && Z_TYPE_P(value) > IS_NULL &&
                            (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL);
+
+                       if (IS_CV & (IS_CONST|IS_CV)) {
+                               /* avoid exception check */
+
+                               ZEND_VM_SMART_BRANCH(result, 0);
+                               ZVAL_BOOL(EX_VAR(opline->result.var), result);
+                               ZEND_VM_NEXT_OPCODE();
+                       }
                } else {
                        result = (value == NULL || !i_zend_is_true(value));
                }