php-src/Zend/Optimizer/zend_ssa.c

1684 lines
52 KiB
C
Raw Normal View History

/*
+----------------------------------------------------------------------+
| Zend Engine, SSA - Static Single Assignment Form |
+----------------------------------------------------------------------+
2019-02-05 15:33:28 +08:00
| Copyright (c) The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| https://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| license@php.net so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
2018-11-02 00:30:28 +08:00
| Authors: Dmitry Stogov <dmitry@php.net> |
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
| Nikita Popov <nikic@php.net> |
+----------------------------------------------------------------------+
*/
#include "zend_compile.h"
#include "zend_dfg.h"
#include "zend_ssa.h"
#include "zend_dump.h"
#include "zend_inference.h"
#include "Optimizer/zend_optimizer_internal.h"
static bool dominates(const zend_basic_block *blocks, int a, int b) {
while (blocks[b].level > blocks[a].level) {
b = blocks[b].idom;
}
return a == b;
}
static bool will_rejoin(
const zend_cfg *cfg, const zend_dfg *dfg, const zend_basic_block *block,
int other_successor, int exclude, int var) {
int i;
for (i = 0; i < block->predecessors_count; i++) {
int predecessor = cfg->predecessors[block->predecessor_offset + i];
if (predecessor == exclude) {
continue;
}
/* The variable is changed in this predecessor,
* so we will not rejoin with the original value. */
// TODO: This should not be limited to the direct predecessor block.
if (DFG_ISSET(dfg->def, dfg->size, predecessor, var)) {
continue;
}
/* The other successor dominates this predecessor,
* so we will get the original value from it. */
if (dominates(cfg->blocks, other_successor, predecessor)) {
return 1;
}
}
return 0;
}
static bool needs_pi(const zend_op_array *op_array, const zend_dfg *dfg, const zend_ssa *ssa, int from, int to, int var) /* {{{ */
{
const zend_basic_block *from_block, *to_block;
int other_successor;
if (!DFG_ISSET(dfg->in, dfg->size, to, var)) {
/* Variable is not live, certainly won't benefit from pi */
return 0;
}
/* Make sure that both successors of the from block aren't the same. Pi nodes are associated
2019-03-18 17:49:53 +08:00
* with predecessor blocks, so we can't distinguish which edge the pi belongs to. */
from_block = &ssa->cfg.blocks[from];
ZEND_ASSERT(from_block->successors_count == 2);
if (from_block->successors[0] == from_block->successors[1]) {
return 0;
}
to_block = &ssa->cfg.blocks[to];
if (to_block->predecessors_count == 1) {
/* Always place pi if one predecessor (an if branch) */
return 1;
}
/* Check whether we will rejoin with the original value coming from the other successor,
* in which case the pi node will not have an effect. */
other_successor = from_block->successors[0] == to
? from_block->successors[1] : from_block->successors[0];
return !will_rejoin(&ssa->cfg, dfg, to_block, other_successor, from, var);
}
/* }}} */
static zend_ssa_phi *add_pi(
zend_arena **arena, const zend_op_array *op_array, zend_dfg *dfg, zend_ssa *ssa,
int from, int to, int var) /* {{{ */
{
zend_ssa_phi *phi;
if (!needs_pi(op_array, dfg, ssa, from, to, var)) {
return NULL;
}
phi = zend_arena_calloc(arena, 1,
2017-03-07 15:18:34 +08:00
ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi)) +
ZEND_MM_ALIGNED_SIZE(sizeof(int) * ssa->cfg.blocks[to].predecessors_count) +
sizeof(void*) * ssa->cfg.blocks[to].predecessors_count);
2017-03-07 15:18:34 +08:00
phi->sources = (int*)(((char*)phi) + ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi)));
memset(phi->sources, 0xff, sizeof(int) * ssa->cfg.blocks[to].predecessors_count);
2017-03-07 15:18:34 +08:00
phi->use_chains = (zend_ssa_phi**)(((char*)phi->sources) + ZEND_MM_ALIGNED_SIZE(sizeof(int) * ssa->cfg.blocks[to].predecessors_count));
phi->pi = from;
phi->var = var;
phi->ssa_var = -1;
phi->next = ssa->blocks[to].phis;
ssa->blocks[to].phis = phi;
/* Block "to" now defines "var" via the pi statement, so add it to the "def" set. Note that
* this is not entirely accurate, because the pi is actually placed along the edge from->to.
* If there is a back-edge to "to" this may result in non-minimal SSA form. */
DFG_SET(dfg->def, dfg->size, to, var);
/* If there are multiple predecessors in the target block, we need to place a phi there.
* However this can (generally) not be expressed in terms of dominance frontiers, so place it
* explicitly. dfg->use here really is dfg->phi, we're reusing the set. */
if (ssa->cfg.blocks[to].predecessors_count > 1) {
DFG_SET(dfg->use, dfg->size, to, var);
}
return phi;
}
/* }}} */
static void pi_range(
zend_ssa_phi *phi, int min_var, int max_var, zend_long min, zend_long max,
char underflow, char overflow, char negative) /* {{{ */
{
zend_ssa_range_constraint *constraint = &phi->constraint.range;
constraint->min_var = min_var;
constraint->max_var = max_var;
constraint->min_ssa_var = -1;
constraint->max_ssa_var = -1;
constraint->range.min = min;
constraint->range.max = max;
constraint->range.underflow = underflow;
constraint->range.overflow = overflow;
constraint->negative = negative ? NEG_INIT : NEG_NONE;
phi->has_range_constraint = true;
}
/* }}} */
static inline void pi_range_equals(zend_ssa_phi *phi, int var, zend_long val) {
pi_range(phi, var, var, val, val, 0, 0, 0);
}
static inline void pi_range_not_equals(zend_ssa_phi *phi, int var, zend_long val) {
pi_range(phi, var, var, val, val, 0, 0, 1);
}
static inline void pi_range_min(zend_ssa_phi *phi, int var, zend_long val) {
pi_range(phi, var, -1, val, ZEND_LONG_MAX, 0, 1, 0);
}
static inline void pi_range_max(zend_ssa_phi *phi, int var, zend_long val) {
pi_range(phi, -1, var, ZEND_LONG_MIN, val, 1, 0, 0);
}
static void pi_type_mask(zend_ssa_phi *phi, uint32_t type_mask) {
phi->has_range_constraint = false;
2016-06-08 03:52:47 +08:00
phi->constraint.type.ce = NULL;
phi->constraint.type.type_mask = MAY_BE_REF|MAY_BE_RC1|MAY_BE_RCN;
phi->constraint.type.type_mask |= type_mask;
if (type_mask & MAY_BE_NULL) {
phi->constraint.type.type_mask |= MAY_BE_UNDEF;
}
}
static inline void pi_not_type_mask(zend_ssa_phi *phi, uint32_t type_mask) {
uint32_t relevant = MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF;
pi_type_mask(phi, ~type_mask & relevant);
}
static inline uint32_t mask_for_type_check(uint32_t type) {
if (type & MAY_BE_ARRAY) {
2019-11-12 18:49:55 +08:00
return type | (MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_ARRAY_OF_REF);
} else {
return type;
}
}
/* We can interpret $a + 5 == 0 as $a = 0 - 5, i.e. shift the adjustment to the other operand.
* This negated adjustment is what is written into the "adjustment" parameter. */
2016-05-27 16:17:07 +08:00
static int find_adjusted_tmp_var(const zend_op_array *op_array, uint32_t build_flags, zend_op *opline, uint32_t var_num, zend_long *adjustment) /* {{{ */
{
zend_op *op = opline;
2016-06-29 22:53:39 +08:00
zval *zv;
while (op != op_array->opcodes) {
op--;
if (op->result_type != IS_TMP_VAR || op->result.var != var_num) {
continue;
}
if (op->opcode == ZEND_POST_DEC) {
if (op->op1_type == IS_CV) {
*adjustment = -1;
return EX_VAR_TO_NUM(op->op1.var);
}
} else if (op->opcode == ZEND_POST_INC) {
if (op->op1_type == IS_CV) {
*adjustment = 1;
return EX_VAR_TO_NUM(op->op1.var);
}
} else if (op->opcode == ZEND_ADD) {
2016-06-29 22:53:39 +08:00
if (op->op1_type == IS_CV && op->op2_type == IS_CONST) {
zv = CRT_CONSTANT_EX(op_array, op, op->op2);
2016-06-29 22:53:39 +08:00
if (Z_TYPE_P(zv) == IS_LONG
&& Z_LVAL_P(zv) != ZEND_LONG_MIN) {
*adjustment = -Z_LVAL_P(zv);
return EX_VAR_TO_NUM(op->op1.var);
}
} else if (op->op2_type == IS_CV && op->op1_type == IS_CONST) {
zv = CRT_CONSTANT_EX(op_array, op, op->op1);
2016-06-29 22:53:39 +08:00
if (Z_TYPE_P(zv) == IS_LONG
&& Z_LVAL_P(zv) != ZEND_LONG_MIN) {
*adjustment = -Z_LVAL_P(zv);
return EX_VAR_TO_NUM(op->op2.var);
}
}
} else if (op->opcode == ZEND_SUB) {
2016-06-29 22:53:39 +08:00
if (op->op1_type == IS_CV && op->op2_type == IS_CONST) {
zv = CRT_CONSTANT_EX(op_array, op, op->op2);
2016-06-29 22:53:39 +08:00
if (Z_TYPE_P(zv) == IS_LONG) {
*adjustment = Z_LVAL_P(zv);
return EX_VAR_TO_NUM(op->op1.var);
}
}
}
break;
}
return -1;
}
2016-05-27 16:17:07 +08:00
/* }}} */
/* e-SSA construction: Pi placement (Pi is actually a Phi with single
* source and constraint).
2020-01-19 15:50:48 +08:00
* Order of Phis is important, Pis must be placed before Phis
*/
static void place_essa_pis(
2016-06-08 03:52:47 +08:00
zend_arena **arena, const zend_script *script, const zend_op_array *op_array,
uint32_t build_flags, zend_ssa *ssa, zend_dfg *dfg) /* {{{ */ {
zend_basic_block *blocks = ssa->cfg.blocks;
int j, blocks_count = ssa->cfg.blocks_count;
for (j = 0; j < blocks_count; j++) {
zend_ssa_phi *pi;
zend_op *opline = op_array->opcodes + blocks[j].start + blocks[j].len - 1;
int bt; /* successor block number if a condition is true */
int bf; /* successor block number if a condition is false */
if ((blocks[j].flags & ZEND_BB_REACHABLE) == 0 || blocks[j].len == 0) {
continue;
}
/* the last instruction of basic block is conditional branch,
* based on comparison of CV(s)
*/
switch (opline->opcode) {
case ZEND_JMPZ:
bf = blocks[j].successors[0];
bt = blocks[j].successors[1];
break;
case ZEND_JMPNZ:
bt = blocks[j].successors[0];
bf = blocks[j].successors[1];
break;
case ZEND_COALESCE:
if (opline->op1_type == IS_CV) {
int var = EX_VAR_TO_NUM(opline->op1.var);
if ((pi = add_pi(arena, op_array, dfg, ssa, j, blocks[j].successors[0], var))) {
pi_not_type_mask(pi, MAY_BE_NULL);
}
}
continue;
case ZEND_JMP_NULL:
if (opline->op1_type == IS_CV) {
int var = EX_VAR_TO_NUM(opline->op1.var);
if ((pi = add_pi(arena, op_array, dfg, ssa, j, blocks[j].successors[1], var))) {
pi_not_type_mask(pi, MAY_BE_NULL);
}
}
continue;
default:
continue;
}
/* The following patterns all inspect the opline directly before the JMPZ opcode.
* Make sure that it is part of the same block, otherwise it might not be a dominating
* assignment. */
if (blocks[j].len == 1) {
continue;
}
if (opline->op1_type == IS_TMP_VAR &&
((opline-1)->opcode == ZEND_IS_EQUAL ||
(opline-1)->opcode == ZEND_IS_NOT_EQUAL ||
(opline-1)->opcode == ZEND_IS_SMALLER ||
(opline-1)->opcode == ZEND_IS_SMALLER_OR_EQUAL) &&
opline->op1.var == (opline-1)->result.var) {
int var1 = -1;
int var2 = -1;
zend_long val1 = 0;
zend_long val2 = 0;
// long val = 0;
if ((opline-1)->op1_type == IS_CV) {
var1 = EX_VAR_TO_NUM((opline-1)->op1.var);
} else if ((opline-1)->op1_type == IS_TMP_VAR) {
var1 = find_adjusted_tmp_var(
op_array, build_flags, opline, (opline-1)->op1.var, &val2);
}
if ((opline-1)->op2_type == IS_CV) {
var2 = EX_VAR_TO_NUM((opline-1)->op2.var);
} else if ((opline-1)->op2_type == IS_TMP_VAR) {
var2 = find_adjusted_tmp_var(
op_array, build_flags, opline, (opline-1)->op2.var, &val1);
}
if (var1 >= 0 && var2 >= 0) {
if (!zend_sub_will_overflow(val1, val2) && !zend_sub_will_overflow(val2, val1)) {
zend_long tmp = val1;
val1 -= val2;
val2 -= tmp;
} else {
var1 = -1;
var2 = -1;
}
} else if (var1 >= 0 && var2 < 0) {
zend_long add_val2 = 0;
2016-06-29 22:53:39 +08:00
if ((opline-1)->op2_type == IS_CONST) {
zval *zv = CRT_CONSTANT_EX(op_array, (opline-1), (opline-1)->op2);
2016-06-29 22:53:39 +08:00
if (Z_TYPE_P(zv) == IS_LONG) {
add_val2 = Z_LVAL_P(zv);
} else {
var1 = -1;
}
} else {
var1 = -1;
}
if (!zend_add_will_overflow(val2, add_val2)) {
val2 += add_val2;
} else {
var1 = -1;
}
} else if (var1 < 0 && var2 >= 0) {
zend_long add_val1 = 0;
2016-06-29 22:53:39 +08:00
if ((opline-1)->op1_type == IS_CONST) {
zval *zv = CRT_CONSTANT_EX(op_array, (opline-1), (opline-1)->op1);
2016-06-29 22:53:39 +08:00
if (Z_TYPE_P(zv) == IS_LONG) {
add_val1 = Z_LVAL_P(CRT_CONSTANT_EX(op_array, (opline-1), (opline-1)->op1));
2016-06-29 22:53:39 +08:00
} else {
var2 = -1;
}
} else {
var2 = -1;
}
if (!zend_add_will_overflow(val1, add_val1)) {
val1 += add_val1;
} else {
var2 = -1;
}
}
if (var1 >= 0) {
if ((opline-1)->opcode == ZEND_IS_EQUAL) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var1))) {
pi_range_equals(pi, var2, val2);
}
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var1))) {
pi_range_not_equals(pi, var2, val2);
}
} else if ((opline-1)->opcode == ZEND_IS_NOT_EQUAL) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var1))) {
pi_range_equals(pi, var2, val2);
}
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var1))) {
pi_range_not_equals(pi, var2, val2);
}
} else if ((opline-1)->opcode == ZEND_IS_SMALLER) {
if (val2 > ZEND_LONG_MIN) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var1))) {
pi_range_max(pi, var2, val2-1);
}
}
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var1))) {
pi_range_min(pi, var2, val2);
}
} else if ((opline-1)->opcode == ZEND_IS_SMALLER_OR_EQUAL) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var1))) {
pi_range_max(pi, var2, val2);
}
if (val2 < ZEND_LONG_MAX) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var1))) {
pi_range_min(pi, var2, val2+1);
}
}
}
}
if (var2 >= 0) {
if((opline-1)->opcode == ZEND_IS_EQUAL) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var2))) {
pi_range_equals(pi, var1, val1);
}
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var2))) {
pi_range_not_equals(pi, var1, val1);
}
} else if ((opline-1)->opcode == ZEND_IS_NOT_EQUAL) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var2))) {
pi_range_equals(pi, var1, val1);
}
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var2))) {
pi_range_not_equals(pi, var1, val1);
}
} else if ((opline-1)->opcode == ZEND_IS_SMALLER) {
if (val1 < ZEND_LONG_MAX) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var2))) {
pi_range_min(pi, var1, val1+1);
}
}
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var2))) {
pi_range_max(pi, var1, val1);
}
} else if ((opline-1)->opcode == ZEND_IS_SMALLER_OR_EQUAL) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var2))) {
pi_range_min(pi, var1, val1);
}
if (val1 > ZEND_LONG_MIN) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var2))) {
pi_range_max(pi, var1, val1-1);
}
}
}
}
} else if (opline->op1_type == IS_TMP_VAR &&
((opline-1)->opcode == ZEND_POST_INC ||
(opline-1)->opcode == ZEND_POST_DEC) &&
opline->op1.var == (opline-1)->result.var &&
(opline-1)->op1_type == IS_CV) {
int var = EX_VAR_TO_NUM((opline-1)->op1.var);
if ((opline-1)->opcode == ZEND_POST_DEC) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) {
pi_range_equals(pi, -1, -1);
}
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) {
pi_range_not_equals(pi, -1, -1);
}
} else if ((opline-1)->opcode == ZEND_POST_INC) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) {
pi_range_equals(pi, -1, 1);
}
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) {
pi_range_not_equals(pi, -1, 1);
}
}
} else if (opline->op1_type == IS_TMP_VAR &&
((opline-1)->opcode == ZEND_PRE_INC ||
(opline-1)->opcode == ZEND_PRE_DEC) &&
opline->op1.var == (opline-1)->result.var &&
(opline-1)->op1_type == IS_CV) {
int var = EX_VAR_TO_NUM((opline-1)->op1.var);
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) {
pi_range_equals(pi, -1, 0);
}
/* speculative */
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) {
pi_range_not_equals(pi, -1, 0);
}
} else if (opline->op1_type == IS_TMP_VAR && (opline-1)->opcode == ZEND_TYPE_CHECK &&
opline->op1.var == (opline-1)->result.var && (opline-1)->op1_type == IS_CV) {
int var = EX_VAR_TO_NUM((opline-1)->op1.var);
uint32_t type = (opline-1)->extended_value;
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) {
pi_type_mask(pi, mask_for_type_check(type));
}
2019-11-12 17:59:50 +08:00
if (type != MAY_BE_RESOURCE) {
/* is_resource() may return false for closed resources */
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) {
pi_not_type_mask(pi, mask_for_type_check(type));
}
}
} else if (opline->op1_type == IS_TMP_VAR &&
((opline-1)->opcode == ZEND_IS_IDENTICAL
|| (opline-1)->opcode == ZEND_IS_NOT_IDENTICAL) &&
opline->op1.var == (opline-1)->result.var) {
int var;
zval *val;
uint32_t type_mask;
if ((opline-1)->op1_type == IS_CV && (opline-1)->op2_type == IS_CONST) {
var = EX_VAR_TO_NUM((opline-1)->op1.var);
val = CRT_CONSTANT_EX(op_array, (opline-1), (opline-1)->op2);
} else if ((opline-1)->op1_type == IS_CONST && (opline-1)->op2_type == IS_CV) {
var = EX_VAR_TO_NUM((opline-1)->op2.var);
val = CRT_CONSTANT_EX(op_array, (opline-1), (opline-1)->op1);
} else {
continue;
}
/* We're interested in === null/true/false comparisons here, because they eliminate
* a type in the false-branch. Other === VAL comparisons are unlikely to be useful. */
if (Z_TYPE_P(val) != IS_NULL && Z_TYPE_P(val) != IS_TRUE && Z_TYPE_P(val) != IS_FALSE) {
continue;
}
type_mask = _const_op_type(val);
if ((opline-1)->opcode == ZEND_IS_IDENTICAL) {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) {
pi_type_mask(pi, type_mask);
}
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) {
pi_not_type_mask(pi, type_mask);
}
} else {
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bf, var))) {
pi_type_mask(pi, type_mask);
}
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) {
pi_not_type_mask(pi, type_mask);
}
}
2016-06-08 03:52:47 +08:00
} else if (opline->op1_type == IS_TMP_VAR && (opline-1)->opcode == ZEND_INSTANCEOF &&
opline->op1.var == (opline-1)->result.var && (opline-1)->op1_type == IS_CV &&
(opline-1)->op2_type == IS_CONST) {
int var = EX_VAR_TO_NUM((opline-1)->op1.var);
zend_string *lcname = Z_STR_P(CRT_CONSTANT_EX(op_array, (opline-1), (opline-1)->op2) + 1);
zend_class_entry *ce = zend_optimizer_get_class_entry(script, op_array, lcname);
2016-06-08 03:52:47 +08:00
if (!ce) {
continue;
2016-06-08 03:52:47 +08:00
}
if ((pi = add_pi(arena, op_array, dfg, ssa, j, bt, var))) {
pi_type_mask(pi, MAY_BE_OBJECT);
pi->constraint.type.ce = ce;
}
}
}
}
2016-05-27 16:17:07 +08:00
/* }}} */
static zend_always_inline int _zend_ssa_rename_op(const zend_op_array *op_array, const zend_op *opline, uint32_t k, uint32_t build_flags, int ssa_vars_count, zend_ssa_op *ssa_ops, int *var) /* {{{ */
{
const zend_op *next;
if (opline->op1_type & (IS_CV|IS_VAR|IS_TMP_VAR)) {
ssa_ops[k].op1_use = var[EX_VAR_TO_NUM(opline->op1.var)];
//USE_SSA_VAR(op_array->last_var + opline->op1.var)
}
if (opline->op2_type & (IS_CV|IS_VAR|IS_TMP_VAR)) {
ssa_ops[k].op2_use = var[EX_VAR_TO_NUM(opline->op2.var)];
//USE_SSA_VAR(op_array->last_var + opline->op2.var)
}
if ((build_flags & ZEND_SSA_USE_CV_RESULTS)
&& opline->result_type == IS_CV
&& opline->opcode != ZEND_RECV) {
ssa_ops[k].result_use = var[EX_VAR_TO_NUM(opline->result.var)];
//USE_SSA_VAR(op_array->last_var + opline->result.var)
}
switch (opline->opcode) {
case ZEND_ASSIGN:
if ((build_flags & ZEND_SSA_RC_INFERENCE) && opline->op2_type == IS_CV) {
ssa_ops[k].op2_def = ssa_vars_count;
var[EX_VAR_TO_NUM(opline->op2.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(opline->op2.var)
}
if (opline->op1_type == IS_CV) {
add_op1_def:
ssa_ops[k].op1_def = ssa_vars_count;
var[EX_VAR_TO_NUM(opline->op1.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(opline->op1.var)
}
break;
case ZEND_ASSIGN_REF:
if (opline->op2_type == IS_CV) {
ssa_ops[k].op2_def = ssa_vars_count;
var[EX_VAR_TO_NUM(opline->op2.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(opline->op2.var)
}
if (opline->op1_type == IS_CV) {
goto add_op1_def;
}
break;
case ZEND_ASSIGN_DIM:
case ZEND_ASSIGN_OBJ:
next = opline + 1;
if (next->op1_type & (IS_CV|IS_VAR|IS_TMP_VAR)) {
ssa_ops[k + 1].op1_use = var[EX_VAR_TO_NUM(next->op1.var)];
//USE_SSA_VAR(op_array->last_var + next->op1.var);
if (build_flags & ZEND_SSA_RC_INFERENCE && next->op1_type == IS_CV) {
ssa_ops[k + 1].op1_def = ssa_vars_count;
var[EX_VAR_TO_NUM(next->op1.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(next->op1.var)
}
}
if (opline->op1_type == IS_CV) {
ssa_ops[k].op1_def = ssa_vars_count;
var[EX_VAR_TO_NUM(opline->op1.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(opline->op1.var)
}
break;
case ZEND_ASSIGN_OBJ_REF:
2021-10-05 21:14:39 +08:00
if (opline->op1_type == IS_CV) {
ssa_ops[k].op1_def = ssa_vars_count;
var[EX_VAR_TO_NUM(opline->op1.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(opline->op1.var)
}
next = opline + 1;
if (next->op1_type & (IS_CV|IS_VAR|IS_TMP_VAR)) {
ssa_ops[k + 1].op1_use = var[EX_VAR_TO_NUM(next->op1.var)];
//USE_SSA_VAR(op_array->last_var + next->op1.var);
if (next->op1_type == IS_CV) {
ssa_ops[k + 1].op1_def = ssa_vars_count;
var[EX_VAR_TO_NUM(next->op1.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(next->op1.var)
}
}
break;
case ZEND_ASSIGN_STATIC_PROP:
next = opline + 1;
if (next->op1_type & (IS_CV|IS_VAR|IS_TMP_VAR)) {
ssa_ops[k + 1].op1_use = var[EX_VAR_TO_NUM(next->op1.var)];
//USE_SSA_VAR(op_array->last_var + next->op1.var);
if ((build_flags & ZEND_SSA_RC_INFERENCE) && next->op1_type == IS_CV) {
ssa_ops[k + 1].op1_def = ssa_vars_count;
var[EX_VAR_TO_NUM(next->op1.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(next->op1.var)
}
}
break;
case ZEND_ASSIGN_STATIC_PROP_REF:
next = opline + 1;
if (next->op1_type & (IS_CV|IS_VAR|IS_TMP_VAR)) {
ssa_ops[k + 1].op1_use = var[EX_VAR_TO_NUM(next->op1.var)];
//USE_SSA_VAR(op_array->last_var + next->op1.var);
if (next->op1_type == IS_CV) {
ssa_ops[k + 1].op1_def = ssa_vars_count;
var[EX_VAR_TO_NUM(next->op1.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(next->op1.var)
}
}
break;
case ZEND_ASSIGN_STATIC_PROP_OP:
next = opline + 1;
if (next->op1_type & (IS_CV|IS_VAR|IS_TMP_VAR)) {
ssa_ops[k + 1].op1_use = var[EX_VAR_TO_NUM(next->op1.var)];
//USE_SSA_VAR(op_array->last_var + next->op1.var);
}
break;
case ZEND_ASSIGN_DIM_OP:
case ZEND_ASSIGN_OBJ_OP:
2021-10-05 21:14:39 +08:00
if (opline->op1_type == IS_CV) {
ssa_ops[k].op1_def = ssa_vars_count;
var[EX_VAR_TO_NUM(opline->op1.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(opline->op1.var)
}
next = opline + 1;
if (next->op1_type & (IS_CV|IS_VAR|IS_TMP_VAR)) {
ssa_ops[k + 1].op1_use = var[EX_VAR_TO_NUM(next->op1.var)];
//USE_SSA_VAR(op_array->last_var + next->op1.var);
}
break;
case ZEND_ASSIGN_OP:
case ZEND_PRE_INC:
case ZEND_PRE_DEC:
case ZEND_POST_INC:
case ZEND_POST_DEC:
case ZEND_BIND_GLOBAL:
case ZEND_BIND_STATIC:
case ZEND_BIND_INIT_STATIC_OR_JMP:
case ZEND_SEND_VAR_NO_REF:
case ZEND_SEND_VAR_NO_REF_EX:
case ZEND_SEND_VAR_EX:
case ZEND_SEND_FUNC_ARG:
case ZEND_SEND_REF:
case ZEND_SEND_UNPACK:
case ZEND_FE_RESET_RW:
case ZEND_MAKE_REF:
case ZEND_PRE_INC_OBJ:
case ZEND_PRE_DEC_OBJ:
case ZEND_POST_INC_OBJ:
case ZEND_POST_DEC_OBJ:
case ZEND_UNSET_DIM:
case ZEND_UNSET_OBJ:
case ZEND_FETCH_DIM_W:
case ZEND_FETCH_DIM_RW:
case ZEND_FETCH_DIM_FUNC_ARG:
case ZEND_FETCH_DIM_UNSET:
case ZEND_FETCH_LIST_W:
if (opline->op1_type == IS_CV) {
goto add_op1_def;
}
break;
case ZEND_SEND_VAR:
case ZEND_CAST:
case ZEND_QM_ASSIGN:
case ZEND_JMP_SET:
case ZEND_COALESCE:
case ZEND_FE_RESET_R:
if ((build_flags & ZEND_SSA_RC_INFERENCE) && opline->op1_type == IS_CV) {
goto add_op1_def;
}
break;
case ZEND_ADD_ARRAY_UNPACK:
ssa_ops[k].result_use = var[EX_VAR_TO_NUM(opline->result.var)];
break;
case ZEND_ADD_ARRAY_ELEMENT:
ssa_ops[k].result_use = var[EX_VAR_TO_NUM(opline->result.var)];
ZEND_FALLTHROUGH;
case ZEND_INIT_ARRAY:
if (((build_flags & ZEND_SSA_RC_INFERENCE)
|| (opline->extended_value & ZEND_ARRAY_ELEMENT_REF))
&& opline->op1_type == IS_CV) {
goto add_op1_def;
}
break;
case ZEND_YIELD:
if (opline->op1_type == IS_CV
&& ((op_array->fn_flags & ZEND_ACC_RETURN_REFERENCE)
|| (build_flags & ZEND_SSA_RC_INFERENCE))) {
goto add_op1_def;
}
break;
case ZEND_UNSET_CV:
goto add_op1_def;
case ZEND_VERIFY_RETURN_TYPE:
if (opline->op1_type & (IS_TMP_VAR|IS_VAR|IS_CV)) {
goto add_op1_def;
}
break;
case ZEND_FE_FETCH_R:
case ZEND_FE_FETCH_RW:
if (opline->op2_type != IS_CV) {
ssa_ops[k].op2_use = -1; /* not used */
}
ssa_ops[k].op2_def = ssa_vars_count;
var[EX_VAR_TO_NUM(opline->op2.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(opline->op2.var)
break;
case ZEND_BIND_LEXICAL:
if ((opline->extended_value & ZEND_BIND_REF) || (build_flags & ZEND_SSA_RC_INFERENCE)) {
ssa_ops[k].op2_def = ssa_vars_count;
var[EX_VAR_TO_NUM(opline->op2.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(opline->op2.var)
}
break;
case ZEND_COPY_TMP:
if (build_flags & ZEND_SSA_RC_INFERENCE) {
ssa_ops[k].op1_def = ssa_vars_count;
var[EX_VAR_TO_NUM(opline->op1.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(opline->op1.var)
}
break;
default:
break;
}
if (opline->result_type & (IS_CV|IS_VAR|IS_TMP_VAR)) {
ssa_ops[k].result_def = ssa_vars_count;
var[EX_VAR_TO_NUM(opline->result.var)] = ssa_vars_count;
ssa_vars_count++;
//NEW_SSA_VAR(op_array->last_var + opline->result.var)
}
return ssa_vars_count;
}
/* }}} */
ZEND_API int zend_ssa_rename_op(const zend_op_array *op_array, const zend_op *opline, uint32_t k, uint32_t build_flags, int ssa_vars_count, zend_ssa_op *ssa_ops, int *var) /* {{{ */
{
return _zend_ssa_rename_op(op_array, opline, k, build_flags, ssa_vars_count, ssa_ops, var);
}
/* }}} */
static zend_result zend_ssa_rename(const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa, int *var, int n) /* {{{ */
{
zend_basic_block *blocks = ssa->cfg.blocks;
zend_ssa_block *ssa_blocks = ssa->blocks;
zend_ssa_op *ssa_ops = ssa->ops;
int ssa_vars_count = ssa->vars_count;
int i, j;
zend_op *opline, *end;
int *tmp = NULL;
ALLOCA_FLAG(use_heap = 0);
// FIXME: Can we optimize this copying out in some cases?
if (blocks[n].next_child >= 0) {
2015-12-16 09:59:05 +08:00
tmp = do_alloca(sizeof(int) * (op_array->last_var + op_array->T), use_heap);
memcpy(tmp, var, sizeof(int) * (op_array->last_var + op_array->T));
var = tmp;
}
if (ssa_blocks[n].phis) {
zend_ssa_phi *phi = ssa_blocks[n].phis;
do {
if (phi->ssa_var < 0) {
phi->ssa_var = ssa_vars_count;
var[phi->var] = ssa_vars_count;
ssa_vars_count++;
} else {
var[phi->var] = phi->ssa_var;
}
phi = phi->next;
} while (phi);
}
opline = op_array->opcodes + blocks[n].start;
end = opline + blocks[n].len;
for (; opline < end; opline++) {
uint32_t k = opline - op_array->opcodes;
if (opline->opcode != ZEND_OP_DATA) {
ssa_vars_count = _zend_ssa_rename_op(op_array, opline, k, build_flags, ssa_vars_count, ssa_ops, var);
}
}
zend_ssa_op *fe_fetch_ssa_op = blocks[n].len != 0
&& ((end-1)->opcode == ZEND_FE_FETCH_R || (end-1)->opcode == ZEND_FE_FETCH_RW)
&& (end-1)->op2_type == IS_CV
? &ssa_ops[blocks[n].start + blocks[n].len - 1] : NULL;
for (i = 0; i < blocks[n].successors_count; i++) {
int succ = blocks[n].successors[i];
zend_ssa_phi *p;
for (p = ssa_blocks[succ].phis; p; p = p->next) {
if (p->pi == n) {
/* e-SSA Pi */
if (p->has_range_constraint) {
if (p->constraint.range.min_var >= 0) {
p->constraint.range.min_ssa_var = var[p->constraint.range.min_var];
}
if (p->constraint.range.max_var >= 0) {
p->constraint.range.max_ssa_var = var[p->constraint.range.max_var];
}
}
for (j = 0; j < blocks[succ].predecessors_count; j++) {
p->sources[j] = var[p->var];
}
if (p->ssa_var < 0) {
p->ssa_var = ssa_vars_count;
ssa_vars_count++;
}
} else if (p->pi < 0) {
/* Normal Phi */
for (j = 0; j < blocks[succ].predecessors_count; j++)
if (ssa->cfg.predecessors[blocks[succ].predecessor_offset + j] == n) {
break;
}
ZEND_ASSERT(j < blocks[succ].predecessors_count);
p->sources[j] = var[p->var];
if (fe_fetch_ssa_op && i == 0 && p->sources[j] == fe_fetch_ssa_op->op2_def) {
/* On the exit edge of an FE_FETCH, use the pre-modification value instead. */
p->sources[j] = fe_fetch_ssa_op->op2_use;
}
}
}
for (p = ssa_blocks[succ].phis; p && (p->pi >= 0); p = p->next) {
if (p->pi == n) {
zend_ssa_phi *q = p->next;
while (q) {
if (q->pi < 0 && q->var == p->var) {
for (j = 0; j < blocks[succ].predecessors_count; j++) {
if (ssa->cfg.predecessors[blocks[succ].predecessor_offset + j] == n) {
break;
}
}
ZEND_ASSERT(j < blocks[succ].predecessors_count);
q->sources[j] = p->ssa_var;
}
q = q->next;
}
}
}
}
ssa->vars_count = ssa_vars_count;
j = blocks[n].children;
while (j >= 0) {
// FIXME: Tail call optimization?
if (zend_ssa_rename(op_array, build_flags, ssa, var, j) == FAILURE)
return FAILURE;
j = blocks[j].next_child;
}
2015-12-16 09:59:05 +08:00
if (tmp) {
free_alloca(tmp, use_heap);
}
return SUCCESS;
}
/* }}} */
ZEND_API zend_result zend_build_ssa(zend_arena **arena, const zend_script *script, const zend_op_array *op_array, uint32_t build_flags, zend_ssa *ssa) /* {{{ */
{
zend_basic_block *blocks = ssa->cfg.blocks;
zend_ssa_block *ssa_blocks;
int blocks_count = ssa->cfg.blocks_count;
uint32_t set_size;
zend_bitset def, in, phi;
int *var = NULL;
int i, j, k, changed;
zend_dfg dfg;
2016-03-17 10:53:01 +08:00
ALLOCA_FLAG(dfg_use_heap)
ALLOCA_FLAG(var_use_heap)
if ((blocks_count * (op_array->last_var + op_array->T)) > 4 * 1024 * 1024) {
/* Don't build SSA for very big functions */
return FAILURE;
}
ssa_blocks = zend_arena_calloc(arena, blocks_count, sizeof(zend_ssa_block));
ssa->blocks = ssa_blocks;
2015-12-11 22:40:23 +08:00
/* Compute Variable Liveness */
dfg.vars = op_array->last_var + op_array->T;
dfg.size = set_size = zend_bitset_len(dfg.vars);
dfg.tmp = do_alloca((set_size * sizeof(zend_ulong)) * (blocks_count * 4 + 1), dfg_use_heap);
memset(dfg.tmp, 0, (set_size * sizeof(zend_ulong)) * (blocks_count * 4 + 1));
dfg.def = dfg.tmp + set_size;
dfg.use = dfg.def + set_size * blocks_count;
dfg.in = dfg.use + set_size * blocks_count;
dfg.out = dfg.in + set_size * blocks_count;
2015-12-11 22:40:23 +08:00
zend_build_dfg(op_array, &ssa->cfg, &dfg, build_flags);
if (build_flags & ZEND_SSA_DEBUG_LIVENESS) {
zend_dump_dfg(op_array, &ssa->cfg, &dfg);
}
def = dfg.def;
in = dfg.in;
/* Reuse the "use" set, as we no longer need it */
phi = dfg.use;
zend_bitset_clear(phi, set_size * blocks_count);
/* Place e-SSA pis. This will add additional "def" points, so it must
* happen before def propagation. */
2016-06-08 03:52:47 +08:00
place_essa_pis(arena, script, op_array, build_flags, ssa, &dfg);
/* SSA construction, Step 1: Propagate "def" sets in merge points */
do {
changed = 0;
for (j = 0; j < blocks_count; j++) {
zend_bitset def_j = def + j * set_size, phi_j = phi + j * set_size;
if ((blocks[j].flags & ZEND_BB_REACHABLE) == 0) {
continue;
}
if (blocks[j].predecessors_count > 1) {
if (blocks[j].flags & ZEND_BB_IRREDUCIBLE_LOOP) {
/* Prevent any values from flowing into irreducible loops by
replacing all incoming values with explicit phis. The
register allocator depends on this property. */
zend_bitset_union(phi_j, in + (j * set_size), set_size);
} else {
for (k = 0; k < blocks[j].predecessors_count; k++) {
i = ssa->cfg.predecessors[blocks[j].predecessor_offset + k];
while (i != -1 && i != blocks[j].idom) {
zend_bitset_union_with_intersection(
phi_j, phi_j, def + (i * set_size), in + (j * set_size), set_size);
i = blocks[i].idom;
}
}
}
if (!zend_bitset_subset(phi_j, def_j, set_size)) {
zend_bitset_union(def_j, phi_j, set_size);
changed = 1;
}
}
}
} while (changed);
/* SSA construction, Step 2: Phi placement based on Dominance Frontiers */
2015-12-16 09:59:05 +08:00
var = do_alloca(sizeof(int) * (op_array->last_var + op_array->T), var_use_heap);
if (!var) {
2015-12-16 09:59:05 +08:00
free_alloca(dfg.tmp, dfg_use_heap);
return FAILURE;
}
for (j = 0; j < blocks_count; j++) {
if ((blocks[j].flags & ZEND_BB_REACHABLE) == 0) {
continue;
}
if (!zend_bitset_empty(phi + j * set_size, set_size)) {
ZEND_BITSET_REVERSE_FOREACH(phi + j * set_size, set_size, i) {
zend_ssa_phi *phi = zend_arena_calloc(arena, 1,
2017-03-07 15:18:34 +08:00
ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi)) +
ZEND_MM_ALIGNED_SIZE(sizeof(int) * blocks[j].predecessors_count) +
sizeof(void*) * blocks[j].predecessors_count);
2017-03-07 15:18:34 +08:00
phi->sources = (int*)(((char*)phi) + ZEND_MM_ALIGNED_SIZE(sizeof(zend_ssa_phi)));
memset(phi->sources, 0xff, sizeof(int) * blocks[j].predecessors_count);
2017-03-07 15:18:34 +08:00
phi->use_chains = (zend_ssa_phi**)(((char*)phi->sources) + ZEND_MM_ALIGNED_SIZE(sizeof(int) * ssa->cfg.blocks[j].predecessors_count));
phi->pi = -1;
phi->var = i;
phi->ssa_var = -1;
/* Place phis after pis */
{
zend_ssa_phi **pp = &ssa_blocks[j].phis;
while (*pp) {
if ((*pp)->pi < 0) {
break;
}
pp = &(*pp)->next;
}
phi->next = *pp;
*pp = phi;
}
} ZEND_BITSET_FOREACH_END();
}
}
if (build_flags & ZEND_SSA_DEBUG_PHI_PLACEMENT) {
zend_dump_phi_placement(op_array, ssa);
}
/* SSA construction, Step 3: Renaming */
ssa->ops = zend_arena_calloc(arena, op_array->last, sizeof(zend_ssa_op));
memset(ssa->ops, 0xff, op_array->last * sizeof(zend_ssa_op));
2016-05-27 16:17:07 +08:00
memset(var + op_array->last_var, 0xff, op_array->T * sizeof(int));
/* Create uninitialized SSA variables for each CV */
for (j = 0; j < op_array->last_var; j++) {
var[j] = j;
}
ssa->vars_count = op_array->last_var;
if (zend_ssa_rename(op_array, build_flags, ssa, var, 0) == FAILURE) {
2015-12-16 09:59:05 +08:00
free_alloca(var, var_use_heap);
free_alloca(dfg.tmp, dfg_use_heap);
return FAILURE;
}
2015-12-16 09:59:05 +08:00
free_alloca(var, var_use_heap);
free_alloca(dfg.tmp, dfg_use_heap);
return SUCCESS;
}
/* }}} */
ZEND_API void zend_ssa_compute_use_def_chains(zend_arena **arena, const zend_op_array *op_array, zend_ssa *ssa) /* {{{ */
{
zend_ssa_var *ssa_vars;
int i;
if (!ssa->vars) {
ssa->vars = zend_arena_calloc(arena, ssa->vars_count, sizeof(zend_ssa_var));
}
ssa_vars = ssa->vars;
for (i = 0; i < op_array->last_var; i++) {
ssa_vars[i].var = i;
ssa_vars[i].scc = -1;
ssa_vars[i].definition = -1;
ssa_vars[i].use_chain = -1;
}
for (i = op_array->last_var; i < ssa->vars_count; i++) {
ssa_vars[i].var = -1;
ssa_vars[i].scc = -1;
ssa_vars[i].definition = -1;
ssa_vars[i].use_chain = -1;
}
for (i = op_array->last - 1; i >= 0; i--) {
zend_ssa_op *op = ssa->ops + i;
if (op->op1_use >= 0) {
op->op1_use_chain = ssa_vars[op->op1_use].use_chain;
ssa_vars[op->op1_use].use_chain = i;
}
if (op->op2_use >= 0 && op->op2_use != op->op1_use) {
op->op2_use_chain = ssa_vars[op->op2_use].use_chain;
ssa_vars[op->op2_use].use_chain = i;
}
if (op->result_use >= 0 && op->result_use != op->op1_use && op->result_use != op->op2_use) {
op->res_use_chain = ssa_vars[op->result_use].use_chain;
ssa_vars[op->result_use].use_chain = i;
}
if (op->op1_def >= 0) {
ssa_vars[op->op1_def].var = EX_VAR_TO_NUM(op_array->opcodes[i].op1.var);
ssa_vars[op->op1_def].definition = i;
}
if (op->op2_def >= 0) {
ssa_vars[op->op2_def].var = EX_VAR_TO_NUM(op_array->opcodes[i].op2.var);
ssa_vars[op->op2_def].definition = i;
}
if (op->result_def >= 0) {
ssa_vars[op->result_def].var = EX_VAR_TO_NUM(op_array->opcodes[i].result.var);
ssa_vars[op->result_def].definition = i;
}
}
for (i = 0; i < ssa->cfg.blocks_count; i++) {
zend_ssa_phi *phi = ssa->blocks[i].phis;
while (phi) {
phi->block = i;
ssa_vars[phi->ssa_var].var = phi->var;
ssa_vars[phi->ssa_var].definition_phi = phi;
if (phi->pi >= 0) {
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
zend_ssa_phi *p;
ZEND_ASSERT(phi->sources[0] >= 0);
p = ssa_vars[phi->sources[0]].phi_use_chain;
while (p && p != phi) {
p = zend_ssa_next_use_phi(ssa, phi->sources[0], p);
}
if (!p) {
phi->use_chains[0] = ssa_vars[phi->sources[0]].phi_use_chain;
ssa_vars[phi->sources[0]].phi_use_chain = phi;
}
if (phi->has_range_constraint) {
/* min and max variables can't be used together */
zend_ssa_range_constraint *constraint = &phi->constraint.range;
if (constraint->min_ssa_var >= 0) {
phi->sym_use_chain = ssa_vars[constraint->min_ssa_var].sym_use_chain;
ssa_vars[constraint->min_ssa_var].sym_use_chain = phi;
} else if (constraint->max_ssa_var >= 0) {
phi->sym_use_chain = ssa_vars[constraint->max_ssa_var].sym_use_chain;
ssa_vars[constraint->max_ssa_var].sym_use_chain = phi;
}
}
} else {
int j;
for (j = 0; j < ssa->cfg.blocks[i].predecessors_count; j++) {
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
zend_ssa_phi *p;
ZEND_ASSERT(phi->sources[j] >= 0);
p = ssa_vars[phi->sources[j]].phi_use_chain;
while (p && p != phi) {
p = zend_ssa_next_use_phi(ssa, phi->sources[j], p);
}
if (!p) {
phi->use_chains[j] = ssa_vars[phi->sources[j]].phi_use_chain;
ssa_vars[phi->sources[j]].phi_use_chain = phi;
}
}
}
phi = phi->next;
}
}
/* Mark indirectly accessed variables */
for (i = 0; i < op_array->last_var; i++) {
if ((ssa->cfg.flags & ZEND_FUNC_INDIRECT_VAR_ACCESS)) {
ssa_vars[i].alias = SYMTABLE_ALIAS;
} else if (zend_string_equals_literal(op_array->vars[i], "http_response_header")) {
ssa_vars[i].alias = HTTP_RESPONSE_HEADER_ALIAS;
}
}
for (i = op_array->last_var; i < ssa->vars_count; i++) {
if (ssa_vars[i].var < op_array->last_var) {
ssa_vars[i].alias = ssa_vars[ssa_vars[i].var].alias;
}
}
}
/* }}} */
void zend_ssa_unlink_use_chain(zend_ssa *ssa, int op, int var) /* {{{ */
{
if (ssa->vars[var].use_chain == op) {
ssa->vars[var].use_chain = zend_ssa_next_use(ssa->ops, var, op);
return;
}
int use = ssa->vars[var].use_chain;
while (use >= 0) {
if (ssa->ops[use].result_use == var) {
if (ssa->ops[use].res_use_chain == op) {
ssa->ops[use].res_use_chain = zend_ssa_next_use(ssa->ops, var, op);
return;
} else {
use = ssa->ops[use].res_use_chain;
}
} else if (ssa->ops[use].op1_use == var) {
if (ssa->ops[use].op1_use_chain == op) {
ssa->ops[use].op1_use_chain = zend_ssa_next_use(ssa->ops, var, op);
return;
} else {
use = ssa->ops[use].op1_use_chain;
}
} else if (ssa->ops[use].op2_use == var) {
if (ssa->ops[use].op2_use_chain == op) {
ssa->ops[use].op2_use_chain = zend_ssa_next_use(ssa->ops, var, op);
return;
} else {
use = ssa->ops[use].op2_use_chain;
}
} else {
break;
}
}
/* something wrong */
ZEND_UNREACHABLE();
}
2016-05-27 16:17:07 +08:00
/* }}} */
void zend_ssa_replace_use_chain(zend_ssa *ssa, int op, int new_op, int var) /* {{{ */
{
if (ssa->vars[var].use_chain == op) {
ssa->vars[var].use_chain = new_op;
return;
} else {
int use = ssa->vars[var].use_chain;
while (use >= 0) {
if (ssa->ops[use].result_use == var) {
if (ssa->ops[use].res_use_chain == op) {
ssa->ops[use].res_use_chain = new_op;
return;
} else {
use = ssa->ops[use].res_use_chain;
}
} else if (ssa->ops[use].op1_use == var) {
if (ssa->ops[use].op1_use_chain == op) {
ssa->ops[use].op1_use_chain = new_op;
return;
} else {
use = ssa->ops[use].op1_use_chain;
}
} else if (ssa->ops[use].op2_use == var) {
if (ssa->ops[use].op2_use_chain == op) {
ssa->ops[use].op2_use_chain = new_op;
return;
} else {
use = ssa->ops[use].op2_use_chain;
}
} else {
break;
}
}
}
/* something wrong */
ZEND_UNREACHABLE();
}
/* }}} */
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
void zend_ssa_remove_instr(zend_ssa *ssa, zend_op *opline, zend_ssa_op *ssa_op) /* {{{ */
{
if (ssa_op->result_use >= 0) {
zend_ssa_unlink_use_chain(ssa, ssa_op - ssa->ops, ssa_op->result_use);
ssa_op->result_use = -1;
ssa_op->res_use_chain = -1;
}
if (ssa_op->op1_use >= 0) {
if (ssa_op->op1_use != ssa_op->op2_use) {
zend_ssa_unlink_use_chain(ssa, ssa_op - ssa->ops, ssa_op->op1_use);
} else {
ssa_op->op2_use_chain = ssa_op->op1_use_chain;
}
ssa_op->op1_use = -1;
ssa_op->op1_use_chain = -1;
}
if (ssa_op->op2_use >= 0) {
zend_ssa_unlink_use_chain(ssa, ssa_op - ssa->ops, ssa_op->op2_use);
ssa_op->op2_use = -1;
ssa_op->op2_use_chain = -1;
}
/* We let the caller make sure that all defs are gone */
ZEND_ASSERT(ssa_op->result_def == -1);
ZEND_ASSERT(ssa_op->op1_def == -1);
ZEND_ASSERT(ssa_op->op2_def == -1);
MAKE_NOP(opline);
}
/* }}} */
static inline zend_ssa_phi **zend_ssa_next_use_phi_ptr(zend_ssa *ssa, int var, zend_ssa_phi *p) /* {{{ */
{
if (p->pi >= 0) {
return &p->use_chains[0];
} else {
int j;
for (j = 0; j < ssa->cfg.blocks[p->block].predecessors_count; j++) {
if (p->sources[j] == var) {
return &p->use_chains[j];
}
}
}
ZEND_UNREACHABLE();
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
return NULL;
}
/* }}} */
/* May be called even if source is not used in the phi (useful when removing uses in a phi
* with multiple identical operands) */
2017-09-07 22:10:38 +08:00
static inline void zend_ssa_remove_use_of_phi_source(zend_ssa *ssa, zend_ssa_phi *phi, int source, zend_ssa_phi *next_use_phi) /* {{{ */
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
{
zend_ssa_phi **cur = &ssa->vars[source].phi_use_chain;
while (*cur && *cur != phi) {
cur = zend_ssa_next_use_phi_ptr(ssa, source, *cur);
}
if (*cur) {
2017-09-07 22:10:38 +08:00
*cur = next_use_phi;
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
}
}
/* }}} */
static void zend_ssa_remove_uses_of_phi_sources(zend_ssa *ssa, zend_ssa_phi *phi) /* {{{ */
{
int source;
FOREACH_PHI_SOURCE(phi, source) {
2017-09-07 22:10:38 +08:00
zend_ssa_remove_use_of_phi_source(ssa, phi, source, zend_ssa_next_use_phi(ssa, source, phi));
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
} FOREACH_PHI_SOURCE_END();
}
/* }}} */
static void zend_ssa_remove_phi_from_block(zend_ssa *ssa, zend_ssa_phi *phi) /* {{{ */
{
zend_ssa_block *block = &ssa->blocks[phi->block];
zend_ssa_phi **cur = &block->phis;
while (*cur != phi) {
ZEND_ASSERT(*cur != NULL);
cur = &(*cur)->next;
}
*cur = (*cur)->next;
}
/* }}} */
void zend_ssa_remove_defs_of_instr(zend_ssa *ssa, zend_ssa_op *ssa_op) /* {{{ */
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
{
if (ssa_op->op1_def >= 0) {
zend_ssa_remove_uses_of_var(ssa, ssa_op->op1_def);
zend_ssa_remove_op1_def(ssa, ssa_op);
}
if (ssa_op->op2_def >= 0) {
zend_ssa_remove_uses_of_var(ssa, ssa_op->op2_def);
zend_ssa_remove_op2_def(ssa, ssa_op);
}
if (ssa_op->result_def >= 0) {
zend_ssa_remove_uses_of_var(ssa, ssa_op->result_def);
zend_ssa_remove_result_def(ssa, ssa_op);
}
}
/* }}} */
static inline void zend_ssa_remove_phi_source(zend_ssa *ssa, zend_ssa_phi *phi, int pred_offset, int predecessors_count) /* {{{ */
{
int j, var_num = phi->sources[pred_offset];
2017-10-16 14:19:37 +08:00
zend_ssa_phi *next_phi = phi->use_chains[pred_offset];
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
predecessors_count--;
if (pred_offset < predecessors_count) {
memmove(phi->sources + pred_offset, phi->sources + pred_offset + 1, (predecessors_count - pred_offset) * sizeof(uint32_t));
2017-10-16 14:19:37 +08:00
memmove(phi->use_chains + pred_offset, phi->use_chains + pred_offset + 1, (predecessors_count - pred_offset) * sizeof(zend_ssa_phi*));
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
}
/* Check if they same var is used in a different phi operand as well, in this case we don't
* need to adjust the use chain (but may have to move the next pointer). */
for (j = 0; j < predecessors_count; j++) {
if (phi->sources[j] == var_num) {
if (j < pred_offset) {
ZEND_ASSERT(next_phi == NULL);
2017-10-16 14:19:37 +08:00
} else if (j >= pred_offset) {
phi->use_chains[j] = next_phi;
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
}
2017-10-16 14:19:37 +08:00
return;
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
}
}
/* Variable only used in one operand, remove the phi from the use chain. */
2017-10-16 14:19:37 +08:00
zend_ssa_remove_use_of_phi_source(ssa, phi, var_num, next_phi);
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
}
/* }}} */
void zend_ssa_remove_phi(zend_ssa *ssa, zend_ssa_phi *phi) /* {{{ */
{
ZEND_ASSERT(phi->ssa_var >= 0);
ZEND_ASSERT(ssa->vars[phi->ssa_var].use_chain < 0
&& ssa->vars[phi->ssa_var].phi_use_chain == NULL);
zend_ssa_remove_uses_of_phi_sources(ssa, phi);
zend_ssa_remove_phi_from_block(ssa, phi);
ssa->vars[phi->ssa_var].definition_phi = NULL;
phi->ssa_var = -1;
}
/* }}} */
void zend_ssa_remove_uses_of_var(zend_ssa *ssa, int var_num) /* {{{ */
{
zend_ssa_var *var = &ssa->vars[var_num];
zend_ssa_phi *phi;
int use;
FOREACH_PHI_USE(var, phi) {
int i, end = NUM_PHI_SOURCES(phi);
for (i = 0; i < end; i++) {
if (phi->sources[i] == var_num) {
phi->use_chains[i] = NULL;
}
}
} FOREACH_PHI_USE_END();
var->phi_use_chain = NULL;
FOREACH_USE(var, use) {
zend_ssa_op *ssa_op = &ssa->ops[use];
if (ssa_op->op1_use == var_num) {
ssa_op->op1_use = -1;
ssa_op->op1_use_chain = -1;
}
if (ssa_op->op2_use == var_num) {
ssa_op->op2_use = -1;
ssa_op->op2_use_chain = -1;
}
if (ssa_op->result_use == var_num) {
ssa_op->result_use = -1;
ssa_op->res_use_chain = -1;
}
} FOREACH_USE_END();
var->use_chain = -1;
}
/* }}} */
void zend_ssa_remove_predecessor(zend_ssa *ssa, int from, int to) /* {{{ */
{
zend_basic_block *next_block = &ssa->cfg.blocks[to];
zend_ssa_block *next_ssa_block = &ssa->blocks[to];
zend_ssa_phi *phi;
int j;
/* Find at which predecessor offset this block is referenced */
int pred_offset = -1;
int *predecessors = &ssa->cfg.predecessors[next_block->predecessor_offset];
for (j = 0; j < next_block->predecessors_count; j++) {
if (predecessors[j] == from) {
pred_offset = j;
break;
}
}
/* If there are duplicate successors, the predecessors may have been removed in
* a previous iteration already. */
if (pred_offset == -1) {
return;
}
/* For phis in successor blocks, remove the operands associated with this block */
for (phi = next_ssa_block->phis; phi; phi = phi->next) {
if (phi->pi >= 0) {
if (phi->pi == from) {
zend_ssa_rename_var_uses(ssa, phi->ssa_var, phi->sources[0], /* update_types */ 0);
zend_ssa_remove_phi(ssa, phi);
}
} else {
ZEND_ASSERT(phi->sources[pred_offset] >= 0);
zend_ssa_remove_phi_source(ssa, phi, pred_offset, next_block->predecessors_count);
}
}
/* Remove this predecessor */
next_block->predecessors_count--;
if (pred_offset < next_block->predecessors_count) {
predecessors = &ssa->cfg.predecessors[next_block->predecessor_offset + pred_offset];
memmove(predecessors, predecessors + 1, (next_block->predecessors_count - pred_offset) * sizeof(uint32_t));
}
}
/* }}} */
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
void zend_ssa_remove_block(zend_op_array *op_array, zend_ssa *ssa, int i) /* {{{ */
{
zend_basic_block *block = &ssa->cfg.blocks[i];
zend_ssa_block *ssa_block = &ssa->blocks[i];
zend_ssa_phi *phi;
int j;
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
block->flags &= ~ZEND_BB_REACHABLE;
/* Removes phis in this block */
for (phi = ssa_block->phis; phi; phi = phi->next) {
zend_ssa_remove_uses_of_var(ssa, phi->ssa_var);
zend_ssa_remove_phi(ssa, phi);
}
/* Remove instructions in this block */
for (j = block->start; j < block->start + block->len; j++) {
if (op_array->opcodes[j].opcode == ZEND_NOP) {
continue;
}
zend_ssa_remove_defs_of_instr(ssa, &ssa->ops[j]);
zend_ssa_remove_instr(ssa, &op_array->opcodes[j], &ssa->ops[j]);
}
zend_ssa_remove_block_from_cfg(ssa, i);
}
/* }}} */
void zend_ssa_remove_block_from_cfg(zend_ssa *ssa, int i) /* {{{ */
{
zend_basic_block *block = &ssa->cfg.blocks[i];
int *predecessors;
int j, s;
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
for (s = 0; s < block->successors_count; s++) {
zend_ssa_remove_predecessor(ssa, i, block->successors[s]);
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
}
/* Remove successors of predecessors */
predecessors = &ssa->cfg.predecessors[block->predecessor_offset];
for (j = 0; j < block->predecessors_count; j++) {
if (predecessors[j] >= 0) {
zend_basic_block *prev_block = &ssa->cfg.blocks[predecessors[j]];
for (s = 0; s < prev_block->successors_count; s++) {
if (prev_block->successors[s] == i) {
memmove(prev_block->successors + s,
prev_block->successors + s + 1,
sizeof(int) * (prev_block->successors_count - s - 1));
prev_block->successors_count--;
s--;
}
}
}
}
block->successors_count = 0;
block->predecessors_count = 0;
/* Remove from dominators tree */
if (block->idom >= 0) {
j = ssa->cfg.blocks[block->idom].children;
if (j == i) {
ssa->cfg.blocks[block->idom].children = block->next_child;
} else if (j >= 0) {
while (ssa->cfg.blocks[j].next_child >= 0) {
if (ssa->cfg.blocks[j].next_child == i) {
ssa->cfg.blocks[j].next_child = block->next_child;
break;
}
j = ssa->cfg.blocks[j].next_child;
}
}
}
block->idom = -1;
block->level = -1;
block->children = -1;
block->next_child = -1;
}
/* }}} */
static void propagate_phi_type_widening(zend_ssa *ssa, int var) /* {{{ */
{
zend_ssa_phi *phi;
FOREACH_PHI_USE(&ssa->vars[var], phi) {
if (ssa->var_info[var].type & ~ssa->var_info[phi->ssa_var].type) {
ssa->var_info[phi->ssa_var].type |= ssa->var_info[var].type;
propagate_phi_type_widening(ssa, phi->ssa_var);
}
} FOREACH_PHI_USE_END();
}
/* }}} */
void zend_ssa_rename_var_uses(zend_ssa *ssa, int old, int new, bool update_types) /* {{{ */
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
{
zend_ssa_var *old_var = &ssa->vars[old];
zend_ssa_var *new_var = &ssa->vars[new];
int use;
zend_ssa_phi *phi;
ZEND_ASSERT(old >= 0 && new >= 0);
ZEND_ASSERT(old != new);
/* Only a no_val is both variables are */
new_var->no_val &= old_var->no_val;
/* Update ssa_op use chains */
FOREACH_USE(old_var, use) {
zend_ssa_op *ssa_op = &ssa->ops[use];
/* If the op already uses the new var, don't add the op to the use
* list again. Instead move the use_chain to the correct operand. */
bool add_to_use_chain = 1;
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
if (ssa_op->result_use == new) {
add_to_use_chain = 0;
} else if (ssa_op->op1_use == new) {
if (ssa_op->result_use == old) {
ssa_op->res_use_chain = ssa_op->op1_use_chain;
ssa_op->op1_use_chain = -1;
}
add_to_use_chain = 0;
} else if (ssa_op->op2_use == new) {
if (ssa_op->result_use == old) {
ssa_op->res_use_chain = ssa_op->op2_use_chain;
ssa_op->op2_use_chain = -1;
} else if (ssa_op->op1_use == old) {
ssa_op->op1_use_chain = ssa_op->op2_use_chain;
ssa_op->op2_use_chain = -1;
}
add_to_use_chain = 0;
}
/* Perform the actual renaming */
if (ssa_op->result_use == old) {
ssa_op->result_use = new;
}
if (ssa_op->op1_use == old) {
ssa_op->op1_use = new;
}
if (ssa_op->op2_use == old) {
ssa_op->op2_use = new;
}
/* Add op to use chain of new var (if it isn't already). We use the
* first use chain of (result, op1, op2) that has the new variable. */
if (add_to_use_chain) {
if (ssa_op->result_use == new) {
ssa_op->res_use_chain = new_var->use_chain;
new_var->use_chain = use;
} else if (ssa_op->op1_use == new) {
ssa_op->op1_use_chain = new_var->use_chain;
new_var->use_chain = use;
} else {
ZEND_ASSERT(ssa_op->op2_use == new);
ssa_op->op2_use_chain = new_var->use_chain;
new_var->use_chain = use;
}
}
} FOREACH_USE_END();
old_var->use_chain = -1;
/* Update phi use chains */
FOREACH_PHI_USE(old_var, phi) {
int j;
bool after_first_new_source = 0;
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
/* If the phi already uses the new var, find its use chain, as we may
* need to move it to a different source operand. */
zend_ssa_phi **existing_use_chain_ptr = NULL;
for (j = 0; j < ssa->cfg.blocks[phi->block].predecessors_count; j++) {
if (phi->sources[j] == new) {
existing_use_chain_ptr = &phi->use_chains[j];
break;
}
}
for (j = 0; j < ssa->cfg.blocks[phi->block].predecessors_count; j++) {
if (phi->sources[j] == new) {
after_first_new_source = 1;
} else if (phi->sources[j] == old) {
phi->sources[j] = new;
/* Either move existing use chain to this source, or add the phi
* to the phi use chain of the new variables. Do this only once. */
if (!after_first_new_source) {
if (existing_use_chain_ptr) {
phi->use_chains[j] = *existing_use_chain_ptr;
*existing_use_chain_ptr = NULL;
} else {
phi->use_chains[j] = new_var->phi_use_chain;
new_var->phi_use_chain = phi;
}
after_first_new_source = 1;
} else {
phi->use_chains[j] = NULL;
Added goblal optimisation passes based on data flow analyses using SSA form: SCCP - Sparse Conditional Constant Propagation, DCE - Dead Code Elimination and removing of unused local variablesi. Squashed commit of the following: commit bf5ac05fc0f5f6ab9c7f2e4eaa83a11c84f471d3 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 14:26:40 2017 +0300 Added news entry commit 4cfa6984b1f3cd8008a0c0dc82ee3de2da02bf7c Merge: 1cdaaac 1f261d7 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:50 2017 +0300 Merge branch 'sccp' into dce * sccp: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1f261d77cb1cb966335097f364ace9349269c704 Merge: a32a3fb b280ba8 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:30:39 2017 +0300 Merge branch 'master' into sccp * master: Bump OCI8 version for recent patch WS Fix test title Ensure that the stream position is kept between reads Turn off EXIF_DEBUG so Travis don't complain at me Don't add a new line to undefined tags in EXIF_DEBUG mode Fix compile error with EXIF_DEBUG update NEWS disable --with-pcre-valgrind on travis fix default args for --with-pcre-valgrind Enable valgrind support for PCRE by default in debug builds add oniguruma.patch to ease future upgrades SIZEOF_SIZE_T doesn't exist on AIX and POWER8 (ppc64le), keep using SIZEOF_LONG commit 1cdaaac601cff37fa729f3e6b31dc584782a1649 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 13:27:12 2017 +0300 Use generic evalution mechanism for constant functions commit 75bd92a60928818358686410deec24a48e05d6da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:39:05 2017 +0300 Fixed use-def chain unlinking for "$a = 1; $a += $a;" commit 7d7746814dc382e468f9016d90c069b88b8b0f0d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 12:38:29 2017 +0300 Enable duplicate predecessors verification commit 6b1667f2062d7c1b55e389b03b155cbe132f5dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:55:20 2017 +0300 Removed duplicate definitions commit 1415b53014bf5aa1521b779debea6847db8c7940 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:51:29 2017 +0300 Enable evaluation of constant functions with 3 arguments commit ab367deef99f39dee15c6bbac45cb25eb9d29e00 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:45:13 2017 +0300 Removed deprecated check commit c51659ea8c62e4e8fbf32a0567d4f541807d6b6d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:40:42 2017 +0300 Reduce limit commit b1be5a04d783eb160a71fe26e030386b3e2771ba Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:38:23 2017 +0300 Disable constant array_flip() evaluation commit 7a5b0596a149a2efc5893ea83be78ef9129009cb Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:33:20 2017 +0300 Fixed comments commit 377e48b3426f9ccbcd6207acbbed87b9fdbf549d Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:28:50 2017 +0300 Cast of string to long/double can not produce exception commit 228dd01af3bf6daefbd7d5be82938dec8b55b6a0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:24:50 2017 +0300 Added missed return commit 0972a2163643757e7e270b8e1c466800aedf1308 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:22:36 2017 +0300 objects may be nested in array operands commit bd346bfa5c4c58896fabd9ab2e4d9bb85b3c1402 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:19:20 2017 +0300 ~$resource is unsupported. commit c77e45610c22e29b5f4ad7234e38a1f4e2498937 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:15:39 2017 +0300 ws commit 0b64d71109fddfec736c91546b6df978adb1f4fd Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:14:40 2017 +0300 Call to zend_ssa_unlink_use_chain() shouldn't be dropped commit cb7059fcf6e51616c08d5b8a933401a94ae0b6e0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:11:58 2017 +0300 Safer check for function name. The previous check is incorrect in ZTS build. commit 7280aba1e125fc314284d7ef1252e14d04c415a4 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 11:02:10 2017 +0300 Missing warning commit 54bc7b576cee33037b7e575c013e3ede726647a2 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 14 10:56:42 2017 +0300 Proper check for successors count commit ea8c004a155453b4e15684e2bd1bdb1dc99e8833 Merge: 624f76d a32a3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:26 2017 +0300 Merge branch 'sccp' into dce * sccp: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit a32a3fb67cd03b9cdab8cd15f133ef55e717408d Merge: 2722dbf 5fb2abd Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 15:56:14 2017 +0300 Merge branch 'master' into sccp * master: fix fold Fixed bug #74866 extension_dir = "./ext" now use current directory for base add next vc15 toolset to the list Revert "Enable whole program optimization for builds without PGO, too" extend comment cleanup discontinued target commit 624f76df48db42f616bdfd02e9b26515a97c68e2 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 12:30:27 2017 +0300 Set RETURN_VALUE_UNUSED instead of additional FREE opcode, if possible. Keep alive dead instructions that have to free two temporary variables. commit 94c9b26695702e863ebeb40fa3cce5f5f2db7744 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 11:51:14 2017 +0300 More accurate "vararg" handling in DCE commit 665ed8491ca07cd6d3363abf42c5777e132a3da1 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 13 09:31:45 2017 +0300 Improved DCE performance, by avoiding redundand checks and repeatable iterations. commit 3f42ce18ba4420aabb9b07b838096cce340d06b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 23:03:11 2017 +0300 Added few more instructions without side effects and exceptions commit b17178f991c095d9137c1536b53b933208e575bf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:39:02 2017 +0300 Temprary enable SSA validation in DEBUG build commit e238a8dc79debcf2f833e07323f975173aec6205 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:37:53 2017 +0300 Inegrate SSA validation developed by Nikita commit a247cee80b47ca335162e8bd46d06274f8af5a4d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 20:31:27 2017 +0300 Perform DCE pass before other DFA optimisations, to properly reconstruct "no value" use-def chains. commit a651564f299e3b413af1146149de0d7eec0dfb28 Merge: 06f6eb0 2722dbf Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:55:05 2017 +0300 Merge branch 'sccp' into dce * sccp: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 2722dbfdf54702c8b429ed792e96f91219031eb6 Merge: 6595ea3 09d3b73 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 18:54:48 2017 +0300 Merge branch 'master' into sccp * master: Resources should be closed during object destructioin, not during freeing. Guard against AppVeyor losing deps issue increase poll timeout as false positives mitigation Value of EG(user_exception_handler) should't relive request boundary sodium ext: remove function names before exception messages sodium ext: update the crypto_kx_*() API to the libsodium one Revert "fix macro redifinitions" commit 06f6eb0e6877d8b26c621f5627587539ebcc781f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 14:52:28 2017 +0300 Use zend_ssa_is_no_val_use() instead of zend_has_improper_op1_use() commit 4b64dbb30d519be359c44ad4f3802e93a7f5fa65 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 13:07:14 2017 +0300 Check if instruction may throw exception only for instructions without known side effects. Always disable removing ASSIGN and UNSET_VAR that may throw. commit c5aa1f47cd16290c77fb988504dc0dd8bad242a3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:21:07 2017 +0300 Use existing bit commit c2af153baea6e05401f78a856a8ae436e5f37bf9 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:48 2017 +0300 Updated Windows build commit de5e8fc12971e55c81b0768daa96adcd6074038e Merge: 8c0de53 6595ea3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 11:10:12 2017 +0300 Merge branch 'sccp' into dce * sccp: (29 commits) Use existing bit Updated Windows build Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found ... commit 6595ea3420b686d1bfe49fbd5893b6a42115c60b Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:27:02 2017 +0300 Use existing bit commit f0bfd36cb822dbbe28df827a53a2ed96aa61051f Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 10:21:22 2017 +0300 Updated Windows build commit a9bd7c89f28cf99933a4d3d026a6da5f5e3ca0f7 Merge: d1eb5ed 2b7d3fb Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 12 09:51:32 2017 +0300 Merge branch 'master' into sccp * master: (27 commits) Fixed compilation error Remove debug code We need to check for the length here too, or we crash and no one likes that! :( * Implemented #65187 (exif_read_data/thumbnail: add support for stream resource) * ext/exif now uses FAST_ZPP Remove extraneous configure flag Revert "remove excessive checks and fix warnings" parametrize zip names Upgrade bundled PCRE to 8.41 Updated NEWS file with LDAP changes Fixed removing all controls by passing an empty array to ldap_set_option Filled in NEWS file with ext/ldap last modifications change order, allow to build as shared extension restore file deleted by mistake in a merge commit Fix segfault in php_stream_context_get_option call remove excessive checks and fix warnings fix macro redifinitions fix symbol availability and ws Remove this for now, as not found fix authors NEWS for Sodium ... commit 8c0de53e5f599c83fa03c78931527ab4ff14cf93 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 21:54:36 2017 +0300 Initial integration of Dead Code Elimination (DCE) and unused variable removing passes, originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass. commit d1eb5ede3a2b9a0bf57e06783f7913a6383f5d6d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 12:19:11 2017 +0300 Proper SSA reconstruction for "$a = $a;" commit 4872d139b55c22c2325459dba0ee557c708567b5 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:57:33 2017 +0300 Replace conditions, that should be always true, by ZEND_ASSERT() commit 9915b1f5cd2bdd92d0cc5e90244a90fbef06740b Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:56:51 2017 +0300 Fixed pass name commit d26ff1b88d3b3b1e8742f2e7812ae5e2531958a6 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 11:55:47 2017 +0300 Don't create identical predecessors commit 0625fbe32bd66b7bcca29e65b131f0cfccd3e074 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:36:07 2017 +0300 Update unreachable blocks. commit 9d7d409e6abda5c2e13458f01b8133095fb68531 Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 09:28:49 2017 +0300 Keep consistent cfg.map[] commit 85a86e58b220eaf2012f652b97fbeb2d2f85646d Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:36:14 2017 +0300 Remove unusded phi commit d5e0f2df4c76656bbe5973e69e12e1b7415de5ee Author: Dmitry Stogov <dmitry@zend.com> Date: Tue Jul 11 02:35:00 2017 +0300 Don't clear phi->spources[] too early. commit a90ed34295a0bab09c00bb7001a368a858a38399 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 21:29:39 2017 +0300 Make SCCP to remove dead live ranges. commit 320237f3d84b872dfa096b9a604ae4d5b4d28c8e Merge: 63bbed5 7be2637 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:35:21 2017 +0300 Merge branch 'master' into sccp * master: Fixed memory leak introduced by 7cb5bdf64a95bd70623d33d6ea122c13b01113bd eliminate casts remove checks for eol dependencies improve test Small fix in ext/ldap, Moved vars definitions to the beginning of the block using them ZipArchive implements countable, added ZipArchive::count() method commit 63bbed5e71432d14217b591de511f09937a3c00c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 17:01:15 2017 +0300 Evaluation of few more constant functions commit 07f45d8a3dbfa67bc28c9ef4bb14c753816f4e44 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 16:22:47 2017 +0300 Properly unlinking dead blocks from predecessors/successors and dominators commit 502002aa6e11452ed27829f7e29604b27fc69ad2 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 13:33:14 2017 +0300 Replacel constant JMPZ/NZ/ZNZ by JMP or NOP commit 3253e61b66b3aa324115ec57ff1cb271ca27dc14 Merge: e7f69f0 161c378 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:22:39 2017 +0300 Merge branch 'master' into sccp * master: Revert "Fixed bug #74878" Upgrading note for #74837 Fixed bug #74837 - NEWS Implement Countable for DomNodeList and DOMNamedNodeMap (Request #74837) Fix #49649 - Handle property visibility changes on unserialization commit e7f69f07fc649692218d01dab34b8f8555a6f88c Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 12:15:08 2017 +0300 Prevent compile-time evaluation of implode() with arguments causing run-time warnings commit 0e882f189a01b6ee648420776fb473c1efd22380 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:54:04 2017 +0300 Constant evaluation of ini_get() for some safe cases commit 9e36a748b28850bd15ac621879e1d28ed8e36169 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 11:13:37 2017 +0300 Constant evaluation of implode() commit e73046e266617ae23caa7f40344fc6e8e41e3c56 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:51:23 2017 +0300 Fixed uninitialized value commit f5e2e8e68cc46cfc1380d000672d01b243ad7f59 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 10:05:37 2017 +0300 Remove (compact) unused constants after SCCP pass commit f0b7bb86ebe93373a02ef36029f76239ba9ec1d4 Merge: e69d4f6 cfacf84 Author: Dmitry Stogov <dmitry@zend.com> Date: Mon Jul 10 09:10:00 2017 +0300 Merge branch 'master' into sccp * master: (37 commits) #73594 tests only check the extra params if dns_get_record is successful Fixed bug #74852 (property_exists returns true on unknown DateInterval property) fix uninitialized var fix comparison warning comply with POSIX signature fix warning remove some casts cleanup casts remove useless cast eliminate casts sync vim mode lines in main [ci skip] update NEWS [ci skip] update NEWS [ci skip] update NEWS Fixed bug #74883 SQLite3::__construct() produces "out of memory" exception with invalid flags Silent compiler warning Fix test Deprecated the read_exif_data() alias Add myself as exif maintainer update libs versions ... commit e69d4f61409c473ae36d85c3779ad5f786fecdc0 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:51:41 2017 +0300 Avoid in-place modification of referenced data commit 58f7c17978dec7b5fe6fe80b4efc55e2168bab61 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 12:33:24 2017 +0300 Use arena for temporary data. commit 93d3e7ddc22f1bc7323abae2256b0b50bc1f8b29 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:54:47 2017 +0300 Made sccp_ctx to be an "extension" of scdf_ctx and remove duplicate data. commit f810c6f7c47b03412c61878b761e1bb687fbcf28 Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 11:20:48 2017 +0300 Improved SSCP integration commit d17ed887f304af0f6ccba76a3dbfca888867ea01 Merge: d90805a 29653da Author: Dmitry Stogov <dmitry@zend.com> Date: Fri Jul 7 10:22:37 2017 +0300 Merge branch 'master' into sccp * master: Fixed bug #74873 (Minor BC break: PCRE_JIT changes output of preg_match()). Fixed bug #72324 (imap_mailboxmsginfo() return wrong size) Fix redefine warnings Expand sb's name and capitalize my own Write the URL on a new line, so that it is easier copyable commit d90805a40bd5d75d197f7b95c69680f636932868 Merge: 2e5e03b fc336c7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:07:04 2017 +0300 Merge branch 'master' into sccp * master: Added missed dump of "main" script code replace the stack var by a macro [ci skip] sync NEWS minor fix for web announce add missing NEWS entry for #74087 and also fix the formatting move NEWS entry to the correct place, also bump the version commit 2e5e03b673cb86ee0fa6be06496553fa6b8c52e7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 23:03:41 2017 +0300 Call info should be removed, but at least we should prevent incorrect stack adjustment. commit 1ee9110b35eab79f74d08278c104c92796740fa7 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 19:34:43 2017 +0300 Remove NOP instructions, introduced bvy SCCP. This commit discloses unrelated issue caused ext/soap/tests/bug70211.phpt failure. commit 9a2f50070d1afde8ee4784a1dade2537e1ac30d5 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:34:02 2017 +0300 Avoid useless iterations for first SSA variablesi, always marked BOT. commit c57dd7c6efb98c89a8c87af0eaad76b71c9cda16 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 16:33:46 2017 +0300 Use reference-counting commit 90f822d68ef1cb68befa3fff289c9e8d1b2068c8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 14:00:22 2017 +0300 Support for few more opcodes commit cffee2f7e5bb4198e645e291fafe5690443cf26c Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 12:35:13 2017 +0300 Combined constants substitutaion and dead instruction removing in single pass. This eleminates substitution in dead instructions. commit f890375c16052a9d79bf77c9021914cb9c6616f8 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 10:34:48 2017 +0300 Use reference-counting instead of duplication commit db0cd64dfa7a2ff809b49a049074b5fa39d37314 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 03:04:27 2017 +0300 Improved SCDF<->SCCP interface - "get_feasible_successors" callback is changed into "mark_feasible_successors" and should mark necessary edges through scdf_mark_edge_feasible() - SCDF takes care about OP_DATA instruction - SCDF code is re-arranged to avoid repeatable checks commit e0ad5dd48942c71033fad985c591549a35c21ef3 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:55:40 2017 +0300 Changed representation of "feasible_edges", using one bit per edge. commit afee3138fe49588b3967f54bf66375f880a51924 Author: Dmitry Stogov <dmitry@zend.com> Date: Thu Jul 6 00:49:56 2017 +0300 Revert "Don't propagate unused values" This reverts commit 84e5bfd4304d34e3a7107db71783882013f8de59. commit 84e5bfd4304d34e3a7107db71783882013f8de59 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:42 2017 +0300 Don't propagate unused values commit d4f15b95061a8a2303d90e6e54effeb9733f90b7 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 23:39:10 2017 +0300 Don't visit the same Phi twice commit 2558311b4d530fb84539db304d03dfeba5eda789 Merge: 722a59d 7bb4ae5 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:51:06 2017 +0300 Merge branch 'master' into sccp * master: Fixed final dump "after optimizer" commit 722a59ddb12e641aea99ca8853ef921c4fdf9819 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 21:09:29 2017 +0300 SCCP doesn't support VERIFY_RETURN_TYPE (ext/opcache/tests/bug73789.phpt failure) commit 7084fade4dcb74415f0644d8e207f0fab6c6509d Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 20:37:21 2017 +0300 Fixed SSA reconstruction commit 37ec4e0845a5b25fe2b523452d32dba22605d2e3 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:34:46 2017 +0300 Disable constant propagation for variables that can be modified indirectly commit 4bb9b6526e44c2f324f9a7c08890ab9bdedd639c Merge: 6800460 73d5097 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 19:17:04 2017 +0300 Merge branch 'master' into sccp * master: (43 commits) Keep information about SSA variables, that may be modified indirectly. Added constants for known ldap controls OID and tests for ldap_get/set_option for controls Added support for controls to ldap_get_option [ci skip] sync NEWS NEWS for oniguruma Patch from the upstream git https://github.com/kkos/oniguruma/issues/60 (CVE-2017-9228) Patch from the upstream git https://github.com/kkos/oniguruma/issues/59 (CVE-2017-9229) b690371bbf97794b4a1d3f295d4fb9a8b05d402d Modified for onig 5.9.6 Patch from the upstream git https://github.com/kkos/oniguruma/issues/58 (CVE-2017-9227) Patch from the upstream git https://github.com/kkos/oniguruma/issues/57 (CVE-2017-9224) Patch from the upstream git https://github.com/kkos/oniguruma/issues/55 (CVE-2017-9226) b4bf968ad52afe14e60a2dc8a95d3555c543353a Modified for onig 5.9.6 f015fbdd95f76438cd86366467bb2b39870dd7c6 Modified for onig 5.9.6 valid_symbol_table removed Improve fix for #74145 Fix wddx Fix tests Fixed bug #74111 Fix bug #74603 - use correct buffer size Fix bug #74651 - check EVP_SealInit as it can return -1 Update NEWS Fix bug #74087 Fixed parsing of strange formats with mixed month/day and time strings ... commit 680046086c17b938e0288fca820668a183b86834 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 16:14:38 2017 +0300 Support for few more internal functions evaluation commit 74a29468ef14260ea3c210a2d1e3548806c81339 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:42:55 2017 +0300 Disabled evaluation of strpos() with empty needle. commit e8908946e52127727da9f0dd22a053befe8bf848 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 13:17:30 2017 +0300 Replace calls to in_array() with constant array by IN_ARRAY instruction after SCCP. commit 4e8fa2c3dd087a49ba90a3ef8231cc81f0399548 Author: Dmitry Stogov <dmitry@zend.com> Date: Wed Jul 5 00:58:12 2017 +0300 Initial integration of Sparse Conditional Constant Propagation (SCCP), originally developed in https://github.com/nikic/php-src/tree/opt, into DFA optimization pass.
2017-07-14 19:33:34 +08:00
}
}
}
/* Make sure phi result types are not incorrectly narrow after renaming.
* This should not normally happen, but can occur if we DCE an assignment
* or unset and there is an improper phi-indirected use lateron. */
// TODO Alternatively we could rerun type-inference after DCE
if (update_types && (ssa->var_info[new].type & ~ssa->var_info[phi->ssa_var].type)) {
ssa->var_info[phi->ssa_var].type |= ssa->var_info[new].type;
propagate_phi_type_widening(ssa, phi->ssa_var);
}
} FOREACH_PHI_USE_END();
old_var->phi_use_chain = NULL;
}
/* }}} */