com php-src: Fixed CFG/SSA construction (avoid multiple identical predecessors): ext/opcache/Optimizer/zend_cfg.c
| From: | Dmitry Stogov | Date: | Mon, 17 Jul 2017 10:35:47 +0000 |
| Subject: | com php-src: Fixed CFG/SSA construction (avoid multiple identical predecessors): ext/opcache/Optimizer/zend_cfg.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-98585@lists.php.net to get a copy of this message | ||
Commit: d9d3b2c20641b61b4d02258cd1363aa713de37b8
Author: Dmitry Stogov <dmitry@zend.com> Mon, 17 Jul 2017 13:35:47 +0300
Parents: 5b0e6248e6e4afe92c10fad618168ead39373363
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=d9d3b2c20641b61b4d02258cd1363aa713de37b8
Log:
Fixed CFG/SSA construction (avoid multiple identical predecessors)
Changed paths:
M ext/opcache/Optimizer/zend_cfg.c
Diff:
diff --git a/ext/opcache/Optimizer/zend_cfg.c b/ext/opcache/Optimizer/zend_cfg.c
index 9a7529a..25d0acb 100644
--- a/ext/opcache/Optimizer/zend_cfg.c
+++ b/ext/opcache/Optimizer/zend_cfg.c
@@ -649,9 +649,18 @@ int zend_cfg_build_predecessors(zend_arena **arena, zend_cfg *cfg) /* {{{ */
for (j = 0; j < cfg->blocks_count; j++) {
if (blocks[j].flags & ZEND_BB_REACHABLE) {
+ /* SWITCH_STRING/LONG may have few identical successors */
for (s = 0; s < blocks[j].successors_count; s++) {
- /* SWITCH_STRING/LONG may have few following identical successors */
- if (s == 0 || blocks[j].successors[s-1] != blocks[j].successors[s]) {
+ int duplicate = 0;
+ int p;
+
+ for (p = 0; p < s; p++) {
+ if (blocks[j].successors[p] == blocks[j].successors[s]) {
+ duplicate = 1;
+ break;
+ }
+ }
+ if (!duplicate) {
zend_basic_block *b = blocks + blocks[j].successors[s];
predecessors[b->predecessor_offset + b->predecessors_count] = j;