diff options
author | Dmitry Stogov <dmitry@zend.com> | 2017-12-14 03:39:22 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2017-12-14 03:39:22 +0300 |
commit | 3aceab825a391b26c03525fef5ae9a54d0e64f57 (patch) | |
tree | 439dc1636179e984c0bc2db8da0ba25eb049fbc8 /Zend/zend_execute.c | |
parent | 4d19bc2279ddbc9c4a07814b3c1b468938d44eae (diff) | |
download | php-git-3aceab825a391b26c03525fef5ae9a54d0e64f57.tar.gz |
Manual loop optimizaton.
Cost of the loops body is still the same, but the loop headers are improved.
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r-- | Zend/zend_execute.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index d2dad66ad8..aaa45a8d4a 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -2103,8 +2103,8 @@ ZEND_API void zend_clean_and_cache_symbol_table(zend_array *symbol_table) /* {{{ static zend_always_inline void i_free_compiled_variables(zend_execute_data *execute_data) /* {{{ */ { zval *cv = EX_VAR_NUM(0); - zval *end = cv + EX(func)->op_array.last_var; - while (EXPECTED(cv != end)) { + int count = EX(func)->op_array.last_var; + while (EXPECTED(count != 0)) { if (Z_REFCOUNTED_P(cv)) { zend_refcounted *r = Z_COUNTED_P(cv); if (!GC_DELREF(r)) { @@ -2115,7 +2115,8 @@ static zend_always_inline void i_free_compiled_variables(zend_execute_data *exec } } cv++; - } + count--; + } } /* }}} */ @@ -2201,13 +2202,13 @@ static zend_never_inline void zend_copy_extra_args(EXECUTE_DATA_D) static zend_always_inline void zend_init_cvs(uint32_t first, uint32_t last EXECUTE_DATA_DC) { if (EXPECTED(first < last)) { + uint32_t count = last - first; zval *var = EX_VAR_NUM(first); - zval *end = EX_VAR_NUM(last); do { ZVAL_UNDEF(var); var++; - } while (var != end); + } while (--count); } } |