|
|
|
@ -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; |
|
|
|
|